Hadoop-2.2.0编译安装步骤
环境: 系统 CentOS 6.3 64位 * 3
Master 192.168.80.90
Slave1 192.168.90.91
Slave2 192.168.80.92
软件: Hadoop-2.2.0-src.tar.gz
一,准备环境
1.1 分别设置三台节点ip地址(固定) 此步骤所有节点都要操作
vi /etc/sysconfig/network-scripts/ifcfg-eth0
1.2 修改三台节点主机名 此步骤所有节点都要操作
vi /etc/sysconfig/network
以上两步骤需要重启服务器后才生效
1.3 创建hadoop用户 此步骤所有节点都要操作
useradd hadoop
1.4 添加hosts记录 此步骤所有节点都要操作
vi /etc/hosts
192.168.80.90 Master.Hadoop
192.168.80.91 Slave1.Hadoop
192.168.80.92 Slave2.Hadoop
1.5 建立hadoop用户之间相互信任(互相无密码登陆)此步骤所有节点都要操作
切换至hadoop用户下执行 ssh-keygen -t rsa
然后将自己的公钥以及其他服务器hadoop用户的公钥放置hadoop宿主目录下 的 .ssh/authorized_keys 中,注意authorized_keys默认不存在需要手动创建,并且 必须设置权限为600
1.6 安装java(建议每台机器的JAVA_HOME路径信息相同) 此步骤所有节点都要操作
下载jkd(http://www.oracle.com/technetwork/java/javase/downloads/index.html)
下载后解压至自己指定的目录如/usr/java
添加变量:以root用户 vi /etc/profile
根据自己路径在最后添加以下三行
export JAVA_HOME=/usr/java/jdk1.6.0_23
exportCLASSPATH=:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
exportPATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/jre/bin
添加之后执行sourc /etc/profile重新加载 建议root用户和hadoop用户都操作 此步
1.7 安装基本应用程序 (此步骤要求联公网) 此步骤只需在master上操作
yum -y install svn ncurses-devel gcc*
yum -y install lzo-develzlib-devel autoconf automake libtool cmake openssl-devel
1.8 安装maven
下载apache-maven-3.1.1-bin.tar.gz
(下载地址 http://maven.apache.org/download.cgi)
并解压 tar zxvf apache-maven-3.1.1-bin.tar.gz
mv apache-maven-3.1.1 maven (改名)
注意一下maven存放路径,可以自定义路径
添加变量:以root用户 vi /etc/profile
根据自己路径在最后添加以下两行
export MAVEN_HOME=/home/hadoop/maven
export PATH=$PATH:$MAVEN_HOME/bin
添加之后执行sourc /etc/profile 重新加载
1.9 安装protobuf(不安装,编译将无法完成)
下载:http://code.google.com/p/protobuf/downloads/detail?name=protobuf-2.5.0.tar.gz
解压,设置属主为 root chowd -R root.root protobuf-2.5.0
编译安装protobuf
① cd protobuf-2.5.0
② ./configure
③ make
④ make install
检测 protoc --version
二,编译安装hadoop-2.2.0
2.1 下载 hadoop-2.2.0-src.tat.gz
Hadoop-2.2.0源码包下载地址 http://apache.claz.org/hadoop/common/hadoop-2.2.0/
2.2 解压hadoop-2.2.0-src.tat.gz
2.3 开始编译:
执行命令 mvn clean package -Pdist,native -DskipTests -Dtar
此步骤要求主机能访问公网,并且此步骤很漫长,由于服务器配置和网 速的不同因素,,时间为1小时到30分钟不等,等待吧……
完成结果类似一下截图
挺快的,用了32分钟
编译成功后,/hadoop-dist/target/hadoop-2.2.0.tar.gz就是我们需 要的文件了
将编译好的/hadoop-dist/target/hadoop-2.2.0.tar.gz文件分别拷贝 至其他节点,并将其解压,设置其属主,属组都为hadoop用户(路径自 定义,注:所有节点hadoop路径必须相同,我这里所有服务器节点都放 置/home/hadoop/)
然后添加环境变量: vi /etc/profile 此步骤所有节点都要操作
添加以下两条
exportHADOOP_HOME=/home/hadpoop/hadoop-2.2.0
export PATH=$PATH:$HADOOP_HOME/bin
添加之后执行sourc /etc/profile重新加载 建议root用户和hadoop用户都操作此步
2.4 Master上操作
解压/hadoop-dist/target/hadoop-2.2.0.tar.gz到/home/hadoop
进入配置文件目录
cd /home/hadoop/hadoop-2.2.0/etc/hadoop
在这里主要修改一下几个文件:(文件内容有些参数根据自己实际情况修改)
slaves core-site.xml hadoop-env.sh hdfs-site.xml
mapred-site.xml (此文件默认不存在) yarn-env.sh yarn-site.xml
2.4.1 修改slaves 文件,添加以下两行(目的:添加slave节点,建议写ip地址)
192.168.80.91
192.168.80.92
2.4.2 修改core-site.xml添加一下内容
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.80.90:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop-2.2.0/temp</value>
<description>Abasefor 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>
2.4.3 修改 hdfs-site.xml 文件,添加以下内容
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.80.90:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/hadoop-2.2.0/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/hadoop-2.2.0/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
2.4.4 修改 mapred-site.xml 文件,添加以下内容
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.80.90:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.80.90:19888</value>
</property>
</configuration>
2.4.5 修改 yarn-site.xml 文件,添加以下内容
<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>192.168.80.90:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.80.90:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.80.90:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.80.90:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.80.90:8088</value>
</property>
</configuration>
2.4.6 修该hadoop-env.sh 文件
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.6.0_23)
2.4.7 修改 yarn-env.sh 文件
修改JAVA_HOME值(export JAVA_HOME=/usr/java/jdk1.6.0_23)
2.4.8 传送文件至各个节点保持一致
配置文件修改完了,然后将修改后的所有文件都复制(覆盖)到各个节点hadoop目录下
scp hadoop-env.sh hdfs-site.xml mapred-site.xml slaves yarn-env.shyarn-site.xml hadoop@192.168.80.91
scp hadoop-env.sh hdfs-site.xml mapred-site.xml slaves yarn-env.shyarn-site.xml hadoop@192.168.80.92
……
……
三,启动hadoop
3.1 初始化hadoop (注意:请关闭所有节点防火墙)
切换至hadoop用户,进入/home/hadoop/hadoop-2.2.0/bin/下执行命令hdfs namenode -format 进行初始化
……
中间会产生很多信息,这个正常
初始化完之后会自动的在/home/hdoop/hadoop-2.2.0/创建dfs/name/目录
每次初始化都会对dfs进行操作,一般只要初始化一次就可以了,因为如果dfs里面有数据的话会把它给弄丢的
3.2 启动hadoop (用hadoop用户执行)(注意:请关闭所有节点防火墙)
切换至/home/hadoop/hadoop-2.2.0/sbin/下
3.2.1 执行脚本 ./start-dfs.sh
此时master上会产生:(两个进程)
SecondaryNameNode
NameNode
Slave节点上会产:(一个进程)
DataNode
3.2.2 执行脚本./start-yar.sh
此时master上会产生:(多出来一个)
ResourceManager
SecondaryNameNode
NameNode
Slave节点上会产:
DataNode
NodeManager
访问网页 :http://192.168.80.90:8088
访问网页 :http://192.168.80.90:50070
至此,hadoop已经启动
##############################################################################
关于hadoop 的启动和关闭:
在/home/hadoop/hadoop-2.2.0/bin下
hdfs命令 用来初始化
hdfs namenode -format
在/home/hadoop/hadoop-2.2.0/sbin 下
启动
start-dfs.sh #Start hadoopdfs daemons
start-yarn.sh #Start allyarn daemons. Run this on master node
关闭
stop-dfs.sh
stop-yarn.sh
另外:
start-all.sh 脚本包含 start-dfs.sh和start-yarn.sh 两个脚本 所以启动时可以直接执行此脚本
stop-all.sh 关闭 同理
###############################################################################
四,常见问题
4.1 slave节点DataNode无法启动
我搭建了很多次,这个问题每次都出现,所以总结了一下:
① 防火墙没关 解决办法:你懂得
② 所有节点hosts 链表不统一,或有错误 解决办法:你懂得
③ 因为多次format namenode 造成namenode 和datanode的clusterID不一致
解决方法:
方法一:更改slave Cluster ID 与master相同
修改每一个datanode上面的CID(位于dfs/data/current/VERSION文件夹中)使两 者一致
方法二:删除所有节点/home/hadoop/hadoop-2.2.0/dfs/data/下 curren目录 然后 重新start-dfs.sh 即可
其他问题暂时没有发现,后期再补
匆忙完稿,如有错误,敬请谅解,谢谢!
作者: 落 叶
时间:2013年11月13日