一. 安装背景:VirtualBox下安装三台Centos6.8虚拟机(一主:master, 两从:slave1,slave2)
Centos版本:CentOS-6.8-x86_64
网络配置:三台虚拟机配置静态IP,并配置主机名master,slave1,slave2
系统配置:安装JDK,增加hadoop用户(三台都需要)
Hadoop安装包:hadoop-2.6.0-cdh5.6.0.tar.gz
无密码ssh:配置ssh无密码连接(master->slave1, master->slave2)
二. 安装过程
1. 在master节点上,将hadoop安装包解压到安装目录/opt/hadoop-2.6.0-cdh5.6.0
2. 配置配置文件:hadoop-env.sh, core-site.xml, hdfs-site.xml, mapred-site.xml, yarn-site.xml, salves
slaves文件内容如下:
salve1
salve2
3. 从master节点将已配置好的hadoop发送到从节点
scp -i /opt/hadoop-2.6.0-cdh5.6.0 hadoop@slave1:/opt
scp -i /opt/hadoop-2.6.0-cdh5.6.0 hadoop@slave2:/opt
4. 配置环境变量(三台),修改/etc/profile文件,添加内容如下:
export HADOOP_HOME=/opt/hadoop-2.6.0-cdh5.6.0
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
三. 疑难问题
1.启动时,报错"Unable to load native-hadoop library for your platform... "
① 问题分析:修改日志级别export HADOOP_ROOT_LOGGER=DEBUG,console ,查看启动日志信息"GLIBC_2.14 not found",
使用 "strings /lib64/libc.so.6 |grep GLIBC" 查看系统glibc版本, Centos6及Centos7只支持到2.12,而hadoop需要glibc-2.14.so
解决方法:(使用root用户)升级glibc版本,下载glibc-2.14.tar.gz到/var/soft/目录
cd /var/soft
tar -zxvf glibc-2.14.tar.gz
cd glibc-2.14
mkdir build
cd build
../configure --prefix=/opt/glibc-2.14
make -j4
make install
注:make install 安装报错缺少gperf工具,使用"yum install gperf"命令安装
替换libc.so.6
cp /opt/glibc-2.14/lib/libc-2.14.so /lib64/libc-2.14.so
mv /lib64/libc.so.6 /lib64/libc.so.6.bak
#此时ll,cp等需要用到libc.so.6的命令都无法使用,更新libc.so.6链接库即可
LD_PRELOAD=/lib64/libc-2.14.so ln -s /lib64/libc-2.14.so /lib64/libc.so.6 #务必使用root用户操作
此时再查看glibc的版本,已经支持到2.14了。
② 此时仍然报错,因为我们的hadoop-2.6.0-cdh5.6.0.tar.gz安装包是64位版本,内部并没有提供对应的hadoop 64位的native库
解决方法:下载hadoop官网已编译好的的native库 hadoop-native-64-2.6.0.tar,解压后,将其拷贝到我们的hadoop安装目录下
$HADOOP_HOME/lib和$HADOOP_HOME/lib/native目录下都拷贝一份,未验证hadoop会加载哪一份。
2.网络问题
确保master主节点可以telnet通,且hadoop响应的端口可以telnet
a.关闭防火墙
service iptables stop #关闭防火墙
service iptables status #查看防火墙状态
chkconfig iptables off #关闭防火墙开机启动
b.安装telnet和telnet-server
rpm -qa | grep telnet #查看telnet是否安装
#安装
yum install telnet
yum install telnet-server
安装完telnet-server之后修改配置/etc/xinetd.d/telnet, 将disable=yes改为disable=no,重启管理telnet的xinetd进程"service xinetd restart"
3. 执行命令hadoop dfs -mkdir /user/hadoop/input 创建目录报错"No such file or directory"
需要-p选项创建目录 hadoop dfs -mkdir -p /user/hadoop/input
4. 执行wordcount测试用例一直卡住,查看日志显示"org.apache.hadoop.ipc.Client: Retrying connect to server: 0.0.0.0/0.0.0.0:8030"
在伪分布式模式下无此问题,在完全分布式下会出现此错误。
如果没有配置调度地址,NodeManager会默认为0.0.0.0:8030。如果MR ApplicationMaster在 master机器上启动,0.0.0.0:8030 对应的调度器地址 恰好在本机;否则,在slave机器上0.0.0.0:8030 是找不到调度器的,因为调度器必须在master机器上。而完全分布式中MR ApplicationMaster是启动在slave机器上的,所以需要在yarn-site.xml中配置调度器地址,如下:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value> <!-- 此处master为master节点的主机名-->
</property>
注:不同版本的实现不一样,需要看源码才能知道读取的是哪一个配置。