Spark 编译与部署 ( 中 ) --Hadoop 编译安装 第 1 页共 28 页
目录 1 编译 HADOOOP... 3 1.1 搭建环境... 3 1.1.1 安装并设置 maven... 3 1.1.2 以 root 用户使用 yum 安装 svn... 4 1.1.3 以 root 用户使用 yum 安装 autoconf automake libtool cmake... 5 1.1.4 以 root 用户使用 yum 安装 ncurses-devel... 6 1.1.5 以 root 用户使用 yum 安装 openssl-devel... 7 1.1.6 以 root 用户使用 yum 安装 gcc*... 8 1.1.7 安装并设置 protobuf... 8 1.2 编译 HADOOP... 11 1.2.1 下载 Hadoop 源代码 Release2.2.0... 11 1.2.2 编译 Hadoop 源代码... 11 1.2.3 验证编译是否成功... 12 2 安装 HADOOP... 13 2.1 配置准备... 13 2.1.1 上传并解压 Hadoop 安装包... 13 2.1.2 在 Hadoop 目录下创建子目录... 14 2.1.3 配置 hadoop-env.sh... 14 2.1.4 配置 yarn-env.sh... 15 2.1.5 配置 core-site.xml... 16 2.1.6 配置 hdfs-site.xml... 18 2.1.7 配置 mapred-site.xml... 19 2.1.8 配置 yarn-site.xml... 21 2.1.9 配置 Slaves 文件... 22 2.1.10 向各节点分发 Hadoop 程序... 22 2.2 启动部署... 23 2.2.1 格式化 NameNode... 23 2.2.2 启动 HDFS... 24 2.2.3 验证 HDFS 启动... 24 2.2.4 启动 YARN... 24 2.2.5 验证 YARN 启动... 25 3 问题解决... 25 3.1 CENTOS 64BIT 安装 HADOOP2.2.0 中出现文件编译位数异常... 25 3.2 编译 HADOOP2.2.0 出现代码异常... 26 3.3 安装 HADOOP2.2.0 出现不能找到 /ETC/HADOOP 目录异常... 28 第 2 页共 28 页
1 编译 Hadooop Spark 编译与部署 ( 中 ) 1.1 搭建环境 1.1.1 安装并设置 maven 1. 下载 maven 安装包, 建议安装 3.0 以上版本, 本次安装选择的是 maven3.0.5 的二进制包, 下载地址如下 http://mirror.bit.edu.cn/apache/maven/maven-3/ 2. 使用 ssh 工具把 maven 包上传到 /home/hadoop/upload 目录 3. 解压缩 apache-maven-3.0.5-bin.tar.gz 包 $tar -zxvf apache-maven-3.0.5-bin.tar.gz 第 3 页共 28 页
4. 把 apache-maven-3.0.5 目录移到 /usr/local 目录下 $sudo mv apache-maven-3.0.5 /usr/local 5. 在 /etc/profile 配置文件中加入如下设置 export PATH=$JAVA_HOME/bin:/usr/local/apache-maven-3.0.5/bin:$PATH 6. 编辑 /etc/profile 文件并验证配置是否成功 : $source /etc/profile $mvn -version 1.1.2 以 root 用户使用 yum 安装 svn #yum install svn 第 4 页共 28 页
1.1.3 以 root 用户使用 yum 安装 autoconf automake libtool cmake #yum install autoconf automake libtool cmake 第 5 页共 28 页
1.1.4 以 root 用户使用 yum 安装 ncurses-devel #yum install ncurses-devel 第 6 页共 28 页
1.1.5 以 root 用户使用 yum 安装 openssl-devel #yum install openssl-devel 第 7 页共 28 页
1.1.6 以 root 用户使用 yum 安装 gcc* #yum install gcc* 1.1.7 安装并设置 protobuf 注 : 该程序包需要在 gcc 安装完毕后才能安装, 否则提示无法找到 gcc 编译器 1. 下载 protobuf 安装包下载链接为 : https://code.google.com/p/protobuf/downloads/list 第 8 页共 28 页
2. 使用 ssh 工具把 protobuf-2.5.0.tar.gz 包上传到 /home/hadoop/downloads 目录 3. 解压安装包 $tar -zxvf protobuf-2.5.0.tar.gz 第 9 页共 28 页
4. 把 protobuf-2.5.0 目录转移到 /usr/local 目录下 $sudo mv protobuf-2.5.0 /usr/local 5. 进行目录运行命令进入目录以 root 用户运行如下命令 : #./configure #make #make check #make install 6. 验证是否安装成功 运行成功之后, 通过如下方式来验证是否安装成功 #protoc 第 10 页共 28 页
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 1.2.2 编译 Hadoop 源代码 :) 由于 hadoop2.2.0 在 svn 中 pom.xml 有点问题, 会造成编译中出错, 可先参考 3.2 修复该问题 在 Hadoop 源代码的根目录执行如下命令 : $mvn package -Pdist,native -DskipTests Dtar ( 注意 : 这行命令需要手工输入, 如果复制执行会报异常!) 耗费的时间较长, 总共花费了 32 分钟, 在编译过程需要联网, 从网络中下载所需要的资料 第 11 页共 28 页
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 位 第 12 页共 28 页
在 hadoop-dist/target 目录中已经打包好了 hadoop-2.2.0.tar.gz, 该文件作为 Hadoop2.X 64 位安装包 2 安装 Hadoop 2.1 配置准备 2.1.1 上传并解压 Hadoop 安装包 1. 在 Apache 网站上提供 Hadoop2.X 安装包只支持 32 位操作系统安装, 在 64 位服务器安装会出现 4.1 的错误异常 我们使用上一步骤编译好的 hadoop-2.2.0.tar.gz 文件作为安装包 ( 也可以从网上下载 native 文件夹或者打包好的 64 位 hadoop 安装包 ), 使用 " Spark 编译与部署 ( 上 )" 中 1. 3.1 介绍的工具上传到 /home/hadoop/upload 目录下 2. 在主节点上解压缩 $cd /home/hadoop/upload/ $tar -xzf hadoop-2.2.0.tar.gz 第 13 页共 28 页
3. 把 hadoop-2.2.0 目录移到 /app/hadoop 目录下 $ mv hadoop-2.2.0 /app/hadoop $ls /app/hadoop 2.1.2 在 Hadoop 目录下创建子目录 hadoop 用户在 /app/hadoop/hadoop-2.2.0 目录下创建 tmp name 和 data 目录 $cd /app/hadoop/hadoop-2.2.0/ $mkdir tmp $mkdir name $mkdir data $ll 2.1.3 配置 hadoop-env.sh 1. 打开配置文件 hadoop-env.sh $cd /app/hadoop/hadoop-2.2.0/etc/hadoop $sudo vi hadoop-env.sh 第 14 页共 28 页
2. 加入配置内容, 设置 JAVA_HOME 和 PATH 路径 export JAVA_HOME=/usr/lib/java/jdk1.7.0_55 export PATH=$PATH:/app/hadoop/hadoop-2.2.0/bin 3. 编译配置文件 hadoop-env.sh, 并确认生效 $source hadoop-env.sh $hadoop version 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 第 15 页共 28 页
2. 加入配置内容, 设置 JAVA_HOME 路径 export JAVA_HOME=/usr/lib/java/jdk1.7.0_55 3. 编译配置文件 yarn-env.sh, 并确认生效 $source yarn-env.sh 2.1.5 配置 core-site.xml 1. 使用如下命令打开 core-site.xml 配置文件 $sudo vi core-site.xml 第 16 页共 28 页
2. 在配置文件中, 按照如下内容进行配置 <configuration> <name>fs.default.name</name> <value>hdfs://hadoop1:9000</value> <name>fs.defaultfs</name> <value>hdfs://hadoop1:9000</value> <name>io.file.buffer.size</name> <value>131072</value> <name>hadoop.tmp.dir</name> <value>file:/app/hadoop/hadoop-2.2.0/tmp</value> <description>abase for other temporary directories.</description> <name>hadoop.proxyuser.hduser.hosts</name> <value>*</value> <name>hadoop.proxyuser.hduser.groups</name> <value>*</value> 第 17 页共 28 页
</configuration> 2.1.6 配置 hdfs-site.xml 1. 使用如下命令打开 hdfs-site.xml 配置文件 $sudo vi hdfs-site.xml 2. 在配置文件中, 按照如下内容进行配置 <configuration> <name>dfs.namenode.secondary.http-address</name> <value>hadoop1:9001</value> <name>dfs.namenode.name.dir</name> <value>file:/app/hadoop/hadoop-2.2.0/name</value> 第 18 页共 28 页
<name>dfs.datanode.data.dir</name> <value>file:/app/hadoop/hadoop-2.2.0/data</value> <name>dfs.replication</name> <value>2</value> <name>dfs.webhdfs.enabled</name> <value>true</value> </configuration> 2.1.7 配置 mapred-site.xml 1. 默认情况下不存在 mapred-site.xml 文件, 可以从模板拷贝一份 $cp mapred-site.xml.template mapred-site.xml 第 19 页共 28 页
2. 使用如下命令打开 mapred-site.xml 配置文件 $sudo vi mapred-site.xml 3. 在配置文件中, 按照如下内容进行配置 <configuration> <name>mapreduce.framework.name</name> <value>yarn</value> <name>mapreduce.jobhistory.address</name> <value>hadoop1:10020</value> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop1:19888</value> </configuration> 第 20 页共 28 页
2.1.8 配置 yarn-site.xml 1. 使用如下命令打开 yarn-site.xml 配置文件 $sudo vi yarn-site.xml 2. 在配置文件中, 按照如下内容进行配置 <configuration> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.shufflehandler</value> <name>yarn.resourcemanager.address</name> <value>hadoop1:8032</value> <name>yarn.resourcemanager.scheduler.address</name> <value>hadoop1:8030</value> <name>yarn.resourcemanager.resource-tracker.address</name> <value>hadoop1:8031</value> <name>yarn.resourcemanager.admin.address</name> 第 21 页共 28 页
<value>hadoop1:8033</value> <name>yarn.resourcemanager.webapp.address</name> <value>hadoop1:8088</value> </configuration> 2.1.9 配置 Slaves 文件使用 $sudo vi slaves 打开从节点配置文件, 在文件中加入 hadoop1 hadoop2 hadoop3 2.1.10 向各节点分发 Hadoop 程序 1. 确认 hadoop2 和 hadoop3 节点 /app/hadoop 所属组和用户均为 hadoop, 然后进入 hadoop1 机器 /app/hadoop 目录, 使用如下命令把 hadoop 文件夹复制到 hadoop2 和 hadoop3 机器 第 22 页共 28 页
$cd /app/hadoop $scp -r hadoop-2.2.0 hadoop@hadoop2:/app/hadoop/ $scp -r hadoop-2.2.0 hadoop@hadoop3:/app/hadoop/ 2. 在从节点查看是否复制成功 2.2 启动部署 2.2.1 格式化 NameNode $cd /app/hadoop/hadoop-2.2.0/ $./bin/hdfs namenode -format 第 23 页共 28 页
2.2.2 启动 HDFS $cd /app/hadoop/hadoop-2.2.0/sbin $./start-dfs.sh 如果服务器操作系统为 32 位时, 出现问题 3.1 异常, 可以参考解决 2.2.3 验证 HDFS 启动 此时在 hadoop1 上面运行的进程有 :NameNode SecondaryNameNode 和 DataNode hadoop2 和 hadoop3 上面运行的进程有 :NameNode 和 DataNode 2.2.4 启动 YARN $cd /app/hadoop/hadoop-2.2.0/sbin $./start-yarn.sh 第 24 页共 28 页
2.2.5 验证 YARN 启动 此时在 hadoop1 上运行的进程有 :NameNode SecondaryNameNode DataNode NodeManager 和 ResourceManager hadoop2 和 hadoop3 上面运行的进程有 :NameNode DataNode 和 NodeManager 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 第 25 页共 28 页
通过分析是由于 lib/native 目录中有些文件是在 32 位编译, 无法适应 CentOS 64 位环境造成 有两种办法解决 : 重新编译 hadoop, 然后重新部署 暂时办法是修改配置, 忽略有问题的文件 3.2 编译 Hadoop2.2.0 出现代码异常 目前的 2.2.0 的 Source 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 第 26 页共 28 页
直接修改 hadoop-common-project/hadoop-auth/pom.xml, 其实就是少了一个包, 添加一个 dependency: <dependency> <groupid>org.mortbay.jetty</groupid> <artifactid>jetty-util</artifactid> <scope>test</scope> </dependency> 第 27 页共 28 页
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 127.0.0.1 localhost 改为 192.168.0.61 localhost 重启机器即可 第 28 页共 28 页