Hadoop全分布式集群配置文档

CentOS6.2Hadoop全分布式集群配置文档

集群网络环境介绍

集群包含三个hadoop节点:1namenode2datanode。节点之间局域网连接,可以互相ping通,并且配置了节点之间互相无密码ssh访问。节点IP地址如下:

NameNode192.168.1.220 主机名:master

DataNode 1192.168.1.223主机名:slaver1

DataNode 2192.168.1.224主机名:slaver2

说明:105机器能ping通,但是ssh连接上去短暂的一段时间后自动断开,必须105ssh访问其他网络之后,才能再次连接上。检查防火墙等各种原因之后未能解决。(望大家提供指导)

三台机器系统均为CentOs6.2简体中文版。并且都新建了一个MDSS用户作为hadoop用户,其hadoop都安装在/home/MDSS/hadoop目录下。

集群环境配置/SSH无密码验证配置

配置主机名,以便ssh网络之间识别,在NameNode/192.168.15.102机器上作如下操作:

/etc/hosts文件中添加主机名和一下IP地址列表,以便ssh访问能识别主机名:

同时,对datanode1/192.168.15.103机器上和datanode2/192.168.15.105机器上两台机器做如上操作。(区别:datanode1 HOSTNAME=slaver1 , datanode2 HOSTENAME=slaver2

SSH无密码验证配置

生成密钥文件

输入如图所示命令,便可以在~/.ssh/下生产id_rsaid_rsa.pub两个密钥文件,其中id_rsa为私钥,id_rsa.pub为公钥。

将公钥文件添加到~/.ssh/authorized_keys文件中

将公钥文件远程复制到datanode1datanode2

分别用MDSS登陆datanod1/slaver1datanode2/slaver2机器上,将NameNode/master的公钥文件添加到~/.ssh/authorized_keys文件中

anthorized_keys文件夹执行授权命令

chmod 600 .ssh/authorized_keys

此时,在namenode/master机器上执行 service sshd restart命令重启ssh服务

到此,NameNode/masterMDSS用户机器就可以无密码访问datanode1/slaver1datanode2/slaver2MDSS用户了

若要datanode1/slaver1datanode2/slaver2MDSS用户也能无密码SSH访问namenode/masterMDSS用户,只需按照以上步骤做相反的操作就可以。

JDK安装和JAVA环境变量配置

JDK安装

在所有机器上安装jdk1.7

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

我下载的是jdk-7u5-linux-i586.rpm,可以根据自己的机器操作系统和版本选择合适的

最好还是先卸载掉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

在所有机器上设置JAVA环境变量

编辑/etc/profile文件

在其末尾添加如下配置行:

使配置文件生效

source /etc/profile

输入javac或者java -version验证jdk安装和JAVA环境是否配置成功

出现如下图界面则配置成功

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目录下

hadoop-1.0.3.tar.gz解压至/opt/hadoop-1.0.3

/opt/hadoop-1.0.3移置到/home/MDSS/hadoop

检查MDSShadoop的权限

在所有机器上新建/home/MDSS/hadoop_tmp文件

配置hadoop-env.sh文件

加入JAVA_HOME环境变量

配置core-site.xml文件

修改fs.defaultnamevaluehdfs://192.168.15.102:9000

修改hadoop.tmp.dir/home/MDSS/hadoop_tmp

配置hdfs-site.xml文件

修改datanode的数量,默认为3,由于现在我只有两个datanode节点,所以配置为2,若是配置的数量大于实际的datanode节点数,则hadoop会启动失败。

配置mapred-site.xml文件

配置 masters文件

加入Namenode节点IP

配置slaves文件

加入所有dataNode节点IP

将配置好的hadoop文件远程复制到两个datanode节点机器slaver1/slaver2

slaver1slaver2上新建/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

启动所有服务

NameNode节点启动hadoop服务

检查NameNode是否启动成功

NameNode节点上用java自带工具jps查看进程

检查datanode是否启动成功

在所有dataNode节点机器上用java自带的jps查看进程

NameNode上查看集群状态

NameNode节点执行:hadoop dfsadmin �Creport命令查看集群状态

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代码

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代码

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代码

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,希望能给大家带来便利。

 

你可能感兴趣的:(hadoop)