本文将向大家介绍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 /,问题解决。