Centos6下安装Hadoop2.6 问题总结

一. 安装背景: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>

  注:不同版本的实现不一样,需要看源码才能知道读取的是哪一个配置。

 

posted @ 2016-08-29 00:06  byron_nj  阅读(885)  评论(0编辑  收藏  举报