转载

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

【注】该系列文章以及使用到安装包/测试数据 可以在《 倾情大奉送--Spark入门实战系列 》获取

1 编译 Hadooop

1.1   搭建环境

1.1.1  安装并设置 maven

1.   下载 maven 安装包,建议安装 3.0 以上版本,本次安装选择的是 maven3.0.5 的二进制包,下载地址如下

http://mirror.bit.edu.cn/apache/maven/maven-3/

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   使用 ssh 工具把 maven 包上传到 /home/hadoop/upload 目录

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.   解压缩 apache-maven-3.0.5-bin.tar.gz

$tar -zxvf apache-maven-3.0.5-bin.tar.gz

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

4.   apache-maven-3.0.5 目录移到 /usr/local 目录下

$sudo mv apache-maven-3.0.5 /usr/local

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

5.   /etc/profile 配置文件中加入如下设置

export PATH=$JAVA_HOME/bin:/usr/local/apache-maven-3.0.5/bin:$PATH

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

6.   编辑 /etc/profile 文件并验证配置是否成功 :

$source /etc/profile

$mvn -version

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.1.2  root 用户使用 yum 安装 svn

#yum install svn

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.1.3  root 用户使用 yum 安装 autoconf automake libtool cmake

#yum install autoconf automake libtool cmake

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.1.4  root 用户使用 yum 安装 ncurses-devel

#yum install ncurses-devel

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.1.5  root 用户使用 yum 安装 openssl-devel

#yum install openssl-devel

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.1.6  root 用户使用 yum 安装 gcc*

#yum install gcc*

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.1.7  安装并设置 protobuf

注:该程序包需要在 gcc 安装完毕后才能安装,否则提示无法找到 gcc 编译器。

1.   下载 protobuf 安装包

下载链接为: https://code.google.com/p/protobuf/downloads/list

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   使用 ssh 工具把 protobuf-2.5.0.tar.gz 包上传到 /home/hadoop/Downloads 目录

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.   解压安装包

$tar -zxvf protobuf-2.5.0.tar.gz

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

4.   protobuf-2.5.0 目录转移到 /usr/local 目录下

$sudo mv protobuf-2.5.0 /usr/local

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

5.   进行目录运行命令

进入目录以 root 用户运行如下命令:

#./configure

#make

#make check

#make install

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

6.   验证是否安装成功

运行成功之后,通过如下方式来验证是否安装成功

#protoc

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.2   编译 Hadoop

1.2.1  下载 Hadoop 源代码 Release2.2.0

通过 SVN 获取 Hadoop2.2.0 源代码,在 /home/hadoop/Downloads 目录下命令:

$svn checkout http://svn.apache.org/repos/asf/hadoop/common/tags/release-2.2.0

获取时间较长,大小约 75.3M

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.2.2  编译 Hadoop 源代码

:) 由于 hadoop2.2.0svnpom.xml 有点问题,会造成编译中出错,可先参考 3.2 修复该问题。在 Hadoop 源代码的根目录执行如下命令:

$mvn package -Pdist,native -DskipTests –Dtar

( 注意: 这行命令需要手工输入,如果复制执行会报异常! )

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

耗费的时间较长,总共花费了 32 分钟,在编译过程需要联网,从网络中下载所需要的资料。

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

1.2.3  验证编译是否成功

hadoop-dist/target/hadoop-2.2.0/lib/native 目录中查看 libhadoop.so.1.0.0 属性:

$file ./libhadoop.so.1.0.0

该文件为 ELF 64-bit LSB 则表示文件成功编译为 64

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

hadoop-dist/target 目录中已经打包好了 hadoop-2.2.0.tar.gz ,该文件作为 Hadoop2.X 64 位安装包。

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2 安装 Hadoop

2.1   配置准备

2.1.1  上传并解压 Hadoop 安装包

1. Apache 网站上提供 Hadoop2.X 安装包只支持 32 位操作系统安装,在 64 位服务器安装会出现 4.1 的错误异常。我们使用上一步骤编译好的 hadoop-2.2.0.tar.gz 文件作为安装包(也可以从网上下载 native 文件夹或者打包好的 64hadoop 安装包),使用 " Spark 编译与部署(上) "1. 3.1 介绍的工具上传到 /home/hadoop/upload 目录下

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.  在主节点上解压缩

$cd /home/hadoop/upload/

$tar -xzf hadoop-2.2.0.tar.gz

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.  hadoop-2.2.0 目录移到 /app/hadoop 目录下

$ mv hadoop-2.2.0 /app/hadoop

$ls /app/hadoop

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.2  Hadoop 目录下创建子目录

hadoop 用户在 /app/hadoop/hadoop-2.2.0 目录下创建 tmpnamedata 目录

$cd /app/hadoop/hadoop-2.2.0/

$mkdir tmp

$mkdir name

$mkdir data

$ll

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.3  配置 hadoop-env.sh

1.      打开配置文件 hadoop-env.sh

$cd /app/hadoop/hadoop-2.2.0/etc/hadoop

$sudo vi hadoop-env.sh

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   加入配置内容,设置 JAVA_HOMEPATH 路径

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

export PATH=$PATH:/app/hadoop/hadoop-2.2.0/bin

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.   编译配置文件 hadoop-env.sh ,并确认生效

$source hadoop-env.sh

$hadoop version

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.4  配置 yarn-env.sh

1.   /app/hadoop/hadoop-2.2.0/etc/hadoop 打开配置文件 yarn-env.sh

$cd /app/hadoop/hadoop-2.2.0/etc/hadoop

$sudo vi yarn-env.sh

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   加入配置内容,设置 JAVA_HOME 路径

export JAVA_HOME=/usr/lib/java/jdk1.7.0_55

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.   编译配置文件 yarn-env.sh ,并确认生效

$source yarn-env.sh

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.5  配置 core-site.xml

1.   使用如下命令打开 core-site.xml 配置文件

$sudo vi core-site.xml

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   在配置文件中,按照如下内容进行配置

<configuration>

<property>

<name>fs.default.name</name>

<value>hdfs://hadoop1:9000</value>

</property>

<property>

<name>fs.defaultFS</name>

<value>hdfs://hadoop1:9000</value>

</property>

<property>

<name>io.file.buffer.size</name>

<value>131072</value>

</property>

<property>

   <name>hadoop.tmp.dir</name>

<value>file:/app/hadoop/hadoop-2.2.0/tmp</value>

<description>Abase for other temporary directories.</description>

</property>

<property>

<name>hadoop.proxyuser.hduser.hosts</name>

<value>*</value>

</property>

<property>

<name>hadoop.proxyuser.hduser.groups</name>

<value>*</value>

</property>

</configuration>

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.6  配置 hdfs-site.xml

1.   使用如下命令打开 hdfs-site.xml 配置文件

$sudo vi hdfs-site.xml

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   在配置文件中,按照如下内容进行配置

<configuration>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>hadoop1:9001</value>

</property>

<property>

<name>dfs.namenode.name.dir</name>

<value>file:/app/hadoop/hadoop-2.2.0/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>file:/app/hadoop/hadoop-2.2.0/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

</configuration>

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.7  配置 mapred-site.xml

1.   默认情况下不存在 mapred-site.xml 文件,可以从模板拷贝一份

$cp mapred-site.xml.template mapred-site.xml

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   使用如下命令打开 mapred-site.xml 配置文件

$sudo vi mapred-site.xml

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.   在配置文件中,按照如下内容进行配置

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>hadoop1:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>hadoop1:19888</value>

</property>

</configuration>

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.8  配置 yarn-site.xml

1.   使用如下命令打开 yarn-site.xml 配置文件

$sudo vi yarn-site.xml

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   在配置文件中,按照如下内容进行配置

<configuration>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

  <value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

<name>yarn.resourcemanager.address</name>

<value>hadoop1:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address</name>

<value>hadoop1:8030</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address</name>

<value>hadoop1:8031</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address</name>

<value>hadoop1:8033</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address</name>

<value>hadoop1:8088</value>

</property>

</configuration>

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.1.9  配置 Slaves 文件

使用 $sudo vi slaves 打开从节点配置文件,在文件中加入

hadoop1

hadoop2

hadoop3

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装  

2.1.10   向各节点分发 Hadoop 程序

1. 确认 hadoop2hadoop3 节点 /app/hadoop 所属组和用户均为 hadoop ,然后进入 hadoop1 机器 /app/hadoop 目录,使用如下命令把 hadoop 文件夹复制到 hadoop2hadoop3 机器

$cd /app/hadoop

$scp -r hadoop-2.2.0 hadoop@hadoop2:/app/hadoop/

$scp -r hadoop-2.2.0 hadoop@hadoop3:/app/hadoop/

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.   在从节点查看是否复制成功

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.2   启动部署

2.2.1  格式化 NameNode

$cd /app/hadoop/hadoop-2.2.0/

$./bin/hdfs namenode -format

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.2.2  启动 HDFS

$cd /app/hadoop/hadoop-2.2.0/sbin

$./start-dfs.sh

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

如果服务器操作系统为 32 位时, 出现问题 3.1 异常,可以参考解决

2.2.3  验证 HDFS 启动

此时在 hadoop1 上面运行的进程有: NameNodeSecondaryNameNodeDataNode

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

hadoop2hadoop3 上面运行的进程有: NameNodeDataNode

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.2.4  启动 YARN

$cd /app/hadoop/hadoop-2.2.0/sbin

$./start-yarn.sh

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

2.2.5  验证 YARN 启动

此时在 hadoop1 上运行的进程有: NameNodeSecondaryNameNodeDataNodeNodeManagerResourceManager

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

hadoop2hadoop3 上面运行的进程有: NameNodeDataNodeNodeManager

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3 问题解决

3.1   CentOS 64bit 安装 Hadoop2.2.0 中出现文件编译位数异常

在安装 hadoop2.2.0 过程中出现如下异常: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

通过分析是由于 lib/native 目录中有些文件是在 32 位编译,无法适应 CentOS 64 位环境造成

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

有两种办法解决:

l   重新编译 hadoop ,然后重新部署

l   暂时办法是修改配置,忽略有问题的文件

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.2   编译 Hadoop2.2.0 出现代码异常

目前的 2.2.0Source Code 压缩包解压出来的 code 有个 bug 需要 patch 后才能编译。否则编译 hadoop-auth 会提示下面错误:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:testCompile (default-testCompile) on project hadoop-auth: Compilation failure: Compilation failure:

[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[88,11] error: cannot access AbstractLifeCycle

[ERROR] class file for org.mortbay.component.AbstractLifeCycle not found

[ERROR] /home/hadoop/Downloads/release-2.2.0/hadoop-common-project/hadoop-auth/src/test/java/org/apache/hadoop/security/authentication/client/AuthenticatorTestCase.java:[96,29] error: cannot access LifeCycle

[ERROR] class file for org.mortbay.component.LifeCycle not found

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

直接修改 hadoop-common-project/hadoop-auth/pom.xml ,其实就是少了一个包,添加一个 dependency

<dependency>

<groupId>org.mortbay.jetty</groupId>

<artifactId>jetty-util</artifactId>

<scope>test</scope>

</dependency>

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

3.3   安装 Hadoop2.2.0 出现不能找到 /etc/hadoop 目录异常

在安装过程中启动 HDFS 出现如下错误:

2015-01-14 22:55:16,076 WARN [main] util.NativeCodeLoader (NativeCodeLoader.java:<clinit>(62)) - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable]

Error: Cannot find configuration directory: /etc/hadoop

Error: Cannot find configuration directory: /etc/hadoop

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

127.0.0.1     localhost

改为

192.168.0.61 localhost

Spark入门实战系列--2.Spark编译与部署(中)--Hadoop编译安装

重启机器即可

正文到此结束
Loading...