本文将向大家介绍Hadoop 2.6.0“伪分布式”集群的安装和配置方法。在后面的一系列有关大数据技术以及IQ同大数据技术集成的文章中都将使用“伪分布式”模式下的hadoop集群作为示例环境。

本文中用于说明Hadoop 2.6.0安装和配置内容所使用的环境如下:

 * VMware虚拟机1个:2 CPU、4GB内存、操作系统Cent OS 6.6 64bit ,运行”伪分布式" Hadoop HDFS集群

 * Apache Hadoop 2.6.0原生安装包 

 

下面将详细说明安装和配置方法。

1.创建用户和用户组

groupadd  hadoop  -g  1210

useradd -m -u 2000 hadoop -g hadoop

passwd hadoop   #修改hadoop用户口令

2.安装Java JDK 1.6或1.7

本文使用JDK 1.7。下载JDK 1.7,解压到/usr/local ,完成后目录为 /usr/local/jdk1.7.0_75

修改JDK 1.7目录的相应权限:

chown -R root:root /usr/local/jdk1.7.0_75

用root用户登录,打开/etc/profile文件,在文件末尾增加如下内容:

export JAVA_HOME=/usr/local/jdk1.7.0_75

export PATH=$JAVA_HOME/bin:$PATH

3.下载、解压、安装hadoop 2.x

Hadoop 2.6.0安装包可以从如下地址下载:

http://hadoop.apache.org/releases.html

下载成功后,在虚拟机中解压安装包,执行如下命令:

tar xvfz hadoop-2.6.0.tar.gz

chown -R hadoop:hadoop  /user/local/hadoop-2.6.0

4. SSH配置(对于“伪分布式模式”也应配置)

配置节点信任,允许hadoop用户无需键入密码即可登录集群内节点:

A.以hadoop用户登录,键入如下指令产生一个RSA秘钥对

ssh-keygen  -t  rsa  -f  ~/.ssh/id_rsa

提示输入秘钥的口令,可输入也可空口令(回车即可)。生成的秘钥对中私钥存放在-f指定的文件中,例如:~/.ssh/id_rsa;存放公钥的文件名称类似,以.pub为后缀,例如:~/.ssh/id_rsa.pub

B.需要确保公钥存放在用户打算连接的所有机器的~/.ssh/authorized_keys文件中。

   在集群中的一台机器上(即生成密钥对的那台机上)执行如下命令生成

authorized_keys文件:

   cat ~/.ssh/id_rsa.pub  >> ~/.ssh/authorized_keys

   然后使用scp命令,拷贝到集群中的其他节点上。

C. 测试可以通过ssh直接登录节点机器

    ssh TestHostName

    例如:ssh SAPDB-01

    如果不需要输入密码直接登录成功,表明配置成功。

如果还是提示密码,可能是因为selinux为打开的。 修改/etc/selinux/config 文件:

   将SELINUX=enforcing改为SELINUX=disabled

   重启机器即可

此外,authorized_keys文件的组权限不能有w,因为可以执行:

 chmod g-w authorized_keys 

5. 配置Hadoop(伪分布式)

   假设hadoop安装到 /usr/local/hadoop-2.6.0目录。

   首先使用root用户登录,打开/etc/profile文件,在文件末尾增加如下内容:

export HADOOP_HOME=/usr/local/hadoop-2.6.0

export YARN_HOME=/usr/local/hadoop-2.6.0

export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

export YARN_CONF_DIR=$HADOOP_HOME/etc/hadoop

    

   然后使用操作系统账户hadoop登录系统,编辑如下配置文件:

  A. $HADOOP_HOME/etc/hadoop/hadoop-env.sh

    修改如下项目:
    export JAVA_HOME=/usr/local/jdk1.7.0_75
    
export HADOOP_LOG_DIR=/home/hadoop/logs

   注意:上面的目录hadoop在启动时会自动创建

  B. $HADOOP_HOME/etc/hadoop/core-site.xml

    下面是一个修改后的样例:

注意:

     hadoop 1.x指定NameNode地址和端口的属性在hadoo 2.x中变为fs.defaultFS

     hadoop.tmp.dir属性指定的目录要由hadoop启动时(start-yarn.sh)自动创建

  C. $HADOOP_HOME/etc/hadoop/hdfs-site.xml

    下面是一个修改后的样例:

说明:

对于伪分布式部署,需要把副本数设为1

Hadoop 1.x的属性dfs.name.dir、dfs.checkpoint.dir和dfs.data.dir在Hadoop 2.x变为:dfs.namenode.name.dir、dfs.namenode.checkpoint.dir和dfs.datanode.data.dir

上面指定的namenod和datanode相关目录在进行格式化的时候自动创建。

 D. $HADOOP_HOME/etc/hadoop/mapred-site.xml

    下面是一个修改后的样例:

  E. $HADOOP_HOME/etc/hadoop/yarn-site.xml

下面是一个修改后的样例:


6. 编辑hadoop操作系统用户的.profile(或 .bash_profile)文件,加入如下命令:

. $HADOOP_HOME/etc/hadoop/hadoop-env.sh

. $HADOOP_HOME/etc/hadoop/mapred-env.sh

. $HADOOP_HOME/etc/hadoop/yarn-env.sh

export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

export LD_LIBRARY_PATH=$HADOOP_HOME/lib/native:$LD_LIBRARY_PATH

7. 对Hadoop集群进行初始格式化

hadoop namenode -format 

8. 启动hadoop集群

cd  $HADOOP_HOME/sbin

./start-dfs.sh

./start-yarn.sh

说明:

原先Hadoop 1.x的start-all.sh脚本已经被废弃,建议不使用(不过,目前还是能够启动Hadoop的)

停止hadoop集群:

./stop-yarn.sh

./stop-dfs.sh

说明:

原先Hadoop 1.x的stop-all.sh脚本已经被废弃,建议不使用(不过,目前还是能够启动Hadoop的)

9. 测试安装

 执行如下命令进行测试:

 hadoop fs -mkdir -p /user/sybiq

 hadoop fs -ls /

 10.常见问题解决
  当在第9步时使用hadoop命令shell执行时(例如:hadoop fs -ls /),可能会报如下错误:
15/06/19 15:20:59 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

 为了定位问题的原因,编辑 $HADOOP_CONF_DIR/log4j.properties文件,增加如下行(黑色字体是文件中原有内容,红色是增加的):
# Custom Logging levels
#log4j.logger.org.apache.hadoop.mapred.JobTracker=DEBUG
#log4j.logger.org.apache.hadoop.mapred.TaskTracker=DEBUG
#log4j.logger.org.apache.hadoop.hdfs.server.namenode.FSNamesystem.audit=DEBUG

log4j.logger.org.apache.hadoop.util.NativeCodeLoader=DEBUG


  然后再次执行hadoop 命令shell,报如下信息:
15/06/19 15:25:00 DEBUG util.NativeCodeLoader: Trying to load the custom-built native-hadoop library...
15/06/19 15:25:00 DEBUG util.NativeCodeLoader: Failed to load native-hadoop with error: java.lang.UnsatisfiedLinkError: /usr/local/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0: /lib64/libc.so.6: version `GLIBC_2.14' not found (required by /usr/local/hadoop-2.6.0/lib/native/libhadoop.so.1.0.0)
15/06/19 15:25:00 DEBUG util.NativeCodeLoader: java.library.path=/usr/local/hadoop-2.6.0/lib/native
15/06/19 15:25:00 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

  看来是操作系统的glibc的版本问题造成的。需要安装更高版本的glibc解决。下面是具体的方法(注意:glibc是操作系统的基本包,在升级时要给外注意):
 (1)下载glibc 2.1.5或更高版本。在这里以2.1.5为例,需要两个包:
      glibc-2.15.tar.gz  
      glibc-ports-2.15.tar

 (2)把下载的glibc-2.1.5.tar.gz包拷贝到/tmp目录下,然后执行如下操作:
tar -xvf  glibc-2.15.tar.gz  
tar -xvf  glibc-ports-2.15.tar.gz  
mv glibc-ports-2.15 glibc-2.15/ports  
mkdir glibc-build-2.15   
cd glibc-build-2.15  
../glibc-2.15/configure  --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin  
make
  
make install  


    说明:为了能够成功编译和升级glibc 2.1.5,操作系统需要安装gcc包


     再次执行hadoop fs -ls /,问题解决。
 


12-21 15:37