Hadoop全分布式集群配置文档
CentOS6.2下Hadoop全分布式集群配置文档集群网络环境介绍
集群包含三个hadoop节点:1个namenode、2个datanode。节点之间局域网连接,可以互相ping通,并且配置了节点之间互相无密码ssh访问。节点IP地址如下:
NameNode:192.168.1.220 主机名:master
DataNode 1:192.168.1.223主机名:slaver1
DataNode 2:192.168.1.224主机名:slaver2
说明:105机器能ping通,但是ssh连接上去短暂的一段时间后自动断开,必须105用ssh访问其他网络之后,才能再次连接上。检查防火墙等各种原因之后未能解决。(望大家提供指导)
三台机器系统均为CentOs6.2简体中文版。并且都新建了一个MDSS用户作为hadoop用户,其hadoop都安装在/home/MDSS/hadoop目录下。
集群环境配置/SSH无密码验证配置
配置主机名,以便ssh网络之间识别,在NameNode/192.168.15.102机器上作如下操作:
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
在/etc/hosts文件中添加主机名和一下IP地址列表,以便ssh访问能识别主机名:
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
同时,对datanode1/192.168.15.103机器上和datanode2/192.168.15.105机器上两台机器做如上操作。(区别:datanode1 HOSTNAME=slaver1 , datanode2 HOSTENAME=slaver2)
SSH无密码验证配置
生成密钥文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
输入如图所示命令,便可以在~/.ssh/下生产id_rsa、id_rsa.pub两个密钥文件,其中id_rsa为私钥,id_rsa.pub为公钥。
将公钥文件添加到~/.ssh/authorized_keys文件中
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
将公钥文件远程复制到datanode1和datanode2上
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
分别用MDSS登陆datanod1/slaver1和datanode2/slaver2机器上,将NameNode/master的公钥文件添加到~/.ssh/authorized_keys文件中
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
对anthorized_keys文件夹执行授权命令
chmod 600 .ssh/authorized_keys
此时,在namenode/master机器上执行 service sshd restart命令重启ssh服务
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
到此,NameNode/master的MDSS用户机器就可以无密码访问datanode1/slaver1和datanode2/slaver2的MDSS用户了
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
若要datanode1/slaver1和datanode2/slaver2的MDSS用户也能无密码SSH访问namenode/master的MDSS用户,只需按照以上步骤做相反的操作就可以。
JDK安装和JAVA环境变量配置
JDK安装
在所有机器上安装jdk1.7
下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html
我下载的是jdk-7u5-linux-i586.rpm,可以根据自己的机器操作系统和版本选择合适的
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
最好还是先卸载掉openjdk,在安装sun公司的jdk
先查看 rpm -qa | grep java
显示如下信息:
java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
卸载:
rpm -e --nodeps java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
rpm -e --nodeps java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
还有一些其他的命令
rpm -qa | grep gcj
rpm -qa | grep jdk
如果出现找不到openjdk source的话,那么还可以这样卸载
yum -y remove java java-1.4.2-gcj-compat-1.4.2.0-40jpp.115
yum -y remove java java-1.6.0-openjdk-1.6.0.0-1.7.b09.el5
安装下载到/opt目录下的jdk-7u5-linux-i586.rpm
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
在所有机器上设置JAVA环境变量
编辑/etc/profile文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
在其末尾添加如下配置行:
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
使配置文件生效
source /etc/profile
输入javac或者java -version验证jdk安装和JAVA环境是否配置成功
出现如下图界面则配置成功
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
Hadoop安装配置
此次我安装的hadoop版本是hadoop-1.0.3
下载地址:http://mirror.bjtu.edu.cn/apache/hadoop/core/hadoop-1.0.3/
下载并将hadoop-1.0.3.tar.gz包放置在/opt目录下
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
将hadoop-1.0.3.tar.gz解压至/opt/hadoop-1.0.3
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
将/opt/hadoop-1.0.3移置到/home/MDSS/hadoop下
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
检查MDSS对hadoop的权限
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
在所有机器上新建/home/MDSS/hadoop_tmp文件
配置hadoop-env.sh文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
加入JAVA_HOME环境变量
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
配置core-site.xml文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
修改fs.defaultname的value为hdfs://192.168.15.102:9000
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
修改hadoop.tmp.dir为/home/MDSS/hadoop_tmp
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
配置hdfs-site.xml文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
修改datanode的数量,默认为3,由于现在我只有两个datanode节点,所以配置为2,若是配置的数量大于实际的datanode节点数,则hadoop会启动失败。
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
配置mapred-site.xml文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
配置 masters文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
加入Namenode节点IP
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
配置slaves文件
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
加入所有dataNode节点IP
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
将配置好的hadoop文件远程复制到两个datanode节点机器slaver1/slaver2上
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
在slaver1和slaver2上新建/home/MDSS/hadoop_tmp文件
配置HADOOP_HOME
编辑/etc/profile
在末尾加入
HADOOP_HOME=/home/MDSS/hadoop
PATH=$HADOOP_HOME/bin:$PATH
export HADOOP_HOME
export PATH
使修改生效,执行:source /etc/profile
启动Hadoop
格式化NameNode
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
启动所有服务
在NameNode节点启动hadoop服务
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
检查NameNode是否启动成功
在NameNode节点上用java自带工具jps查看进程
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
检查datanode是否启动成功
在所有dataNode节点机器上用java自带的jps查看进程
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
在NameNode上查看集群状态
在NameNode节点执行:hadoop dfsadmin –report命令查看集群状态
http://blog.51cto.com/e/u/themes/default/images/spacer.gif
Hadoop安装和配置常出现的问题及解决办法
权限不够:没有执行权限,不能创建目录
做好权限控制,及时检查用户是否有执行权限。
hadoop-root-datanode-master.log 中有如下错误: ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in
导致datanode启动不了。原因:每次namenode format会重新创建一个namenodeId,而dfs.data.dir参数配置的目录中包含的是上次format创建的id,和dfs.name.dir参数配置的目录中的id不一致。namenode format清空了namenode下的数据,但是没有清空datanode下的数据,导致启动时失败,所要做的就是每次fotmat前,清空dfs.data.dir参数配置的目录.
如果datanode连接不上namenode,导致datanode无法启动。 ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Call to ... failed on local exception: java.net.NoRouteToHostException: No route to host
关闭防火墙
Shell代码http://blog.51cto.com/e/u/themes/default/images/spacer.gif
1.service iptables stop
从本地往hdfs文件系统上传文件,出现如下错误: INFO hdfs.DFSClient: Exception in createBlockOutputStream java.io.IOException: Bad connect ack with firstBadLink
INFO hdfs.DFSClient: Abandoning block blk_-1300529705803292651_37023
WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Unable to create new block.
解决方法:关闭防火墙:
Shell代码http://blog.51cto.com/e/u/themes/default/images/spacer.gif
1.service iptables stop
1.
禁用selinux:
编辑 /etc/selinux/config文件,设置“SELINUX=disabled”
4、安全模式导致的错误
org.apache.hadoop.dfs.SafeModeException: Cannot delete ..., Name node is in safe mode
在分布式文件系统启动的时候,开始的时候会有安全模式,当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。在实践过程中,系统启动的时候去修改和删除文件也会有安全模式不允许修改的出错提示,只需要等待一会儿即可。
Java代码http://blog.51cto.com/e/u/themes/default/images/spacer.gif
1.hadoop dfsadmin -safemode leave
关闭安全模式
Hadoop集群启动的时候一切正常,但一直处于safemode,只能读不能写,这种时候应该查看namenode的logs,当然这可能会出现不同的情况... 下面仅介绍一种错误处理方案,希望能抛砖引玉,能对大家有所启发。
以下是日志提示(此地只摘抄了重要部分)
org.apache.hadoop.hdfs.server.namenode.SafeModeException: Cannot delete /home/hadoop/tmp/mapred/system. Name node is in safe mode.
The ratio of reported blocks 0.0000 has not reached the threshold 0.9990. Safe mode will be turned off automatically.
由日志可以看出无法删除/home/hadoop/tmp/mapred/system.(其实这只是一种假象,往往我们会去纠结于这个目录,其实不然)
解决方案:
1:终极办法强制退出安全模式(safemode) hadoop dfsadmin -safemode leave 这种方式虽然快,但会有遗留问题,我在用habse的时候就遇到过,很麻烦,然后你就用“hadoop fsck /”工具慢慢恢复吧。
2:删除namenode下/home/hadoop/tmp下的所有文件,重新format,当然这种方式非常暴力,因为你的数据完全木有了(对于format后可能会遇到的问题我的另一篇文章 http://blog.csdn.net/rzhzhz/article/details/7056812有提到)
3:参考源码可发现这个错误是在检查file的时候抛出来的,基本也就是file的block丢失、错误等原因造成的。这种情况在副本数为1的情况下会很棘手,其他的时候hadoop基本能自行解决,错误数很多的情况下就会一直处于safemode下,当然你可以强制离开安全模式,先保证正常读写,然后再启用“hadoop fsck /”工具慢慢修复。
关于集群修改配置文件后的分发,本人写了一个配置文件分发工具http://blog.csdn.net/rzhzhz/article/details/7056775,希望能给大家带来便利。
页:
[1]