环境:CentOS6.5、hadoop1.2.1、jdk1.8.0
namenode:centos1(ip:172.16.26.129)
datanode:centos2(ip:172.16.26.130)、centos3(ip:172.16.26.131)
配置步骤:
(1)在所有机器上安装所需软件
(2)在所有机器上配置NameNode和DataNode
在所有机器上修改/etc/hosts
在所有机器上修改hostname
在所有机器上修改network配置
在所有机器上关闭防火墙
(3)在所有机器上建立相同的用户
在所有机器上成功建立grid用户后,设置用户密码
(4)在namenode上设置SSH无密码访问
在所有机器上使用grid用户登录
在所有机器上/home/grid下创建ssh文件夹
在namenode上生成密钥对
注意点:
不进行以下步骤SSH免密码登录设置会不成功
.ssh目录要设成700 有执行权限
authorized_keys要设成600 否则会出错
还有ssh 登陆要加入用户名的 比如
ssh root@localhost
这时从centos1向其他机器发起SSH连接,只有第一次登录时需要输入密码,以后则不需要
(5)在所有机器上安装配置hadoop1.2.1
首先在namenode上配置,配置后在分发到datanode上
接下来需要修改hadoop的conf文件夹下的配置信息:
修改core-site.xml,如下:
注意:hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。它默认的位置是在/tmp/{$user}下面,在local和hdfs都会建有相同的目录,但是在/tmp路径下的存储是不安全的,因为linux一次重启,文件就可能被删除。导致namenode启动不起来。
修改hdfs-site.xml,如下
修改mapred-site.xml,如下(保险起见这里写centos1对应的IP地址):
masters里写入作为namenode节点机器的IP
slaves里写入作为datanode节点的机器的IP
修改bin下的hadoop中Jvm的调用方式
查找 –jvm . vi 下的命令模式: :/-jvm,将-jvm server改成 –server .
因为JDK1.6已经废除了一个参数-jvm,如果不修改的话,无法启动数据节点。
到此,hadoop的有关配置已经完成,namenode端通过如下命令把配置好的hadoop发送到各个datanode处:
(6)启动服务
在namenode端格式化分布式文件系统:
如果没有任何error字样的信息,下面接着在namenode端启动hadoop进程:
如果没有其它差错的话,hadoop可以正常启动,并能够在各个机器上得到验证:
在namenode端用jps命令查看启动情况,如下:
在datanode端用jps查看启动情况,如下:
然后可以通过如下地址来查看集群运行状况:
————————————-我是分割线——————————-
跑hadoop自带的wordcount程序
1、通过hadoop的命令在HDFS上创建/tmp/workcount目录,命令如下:
2、通过copyFromLocal命令把本地的word.txt复制到HDFS上,命令如下:
3、通过命令运行例子,使用命令如下:
4、查看运行结果,查看例子的输出结果使用命令:
发现有两个文件夹和一个文件,使用命令查看part-r-00000文件:
————————————-我是分割线——————————-
问题1:
namenode无法启动,启动显示host = java.net.UnknownHostException
应对:
针对每台机器需要设置正确的hostname,方法如下:
问题2:
datanode无法启动,报错NoRouteToHostException: No route to host
应对:
关闭master的防火墙。
问题3:
ssh无法无密码访问,每次都需要输入密码
应对:
重启机器;设置权限为600;
暂时还没有更好的解决方法!
问题4:
查看log发现错误:Incompatible namespaceIDs
应对:
(1)停掉集群服务
(2)在出问题的datanode节点上删除data目录,data目录即是在hdfs-site.xml文件中配置的dfs.data.dir目录,本机器上那个是/var/lib/hadoop-0.20/cache/hdfs/dfs/data/ (注:我们当时在所有的datanode和namenode节点上均执行了该步骤。以防删掉后不成功,可以先把data目录保存一个副本).
(3)格式化namenode.
(4)重新启动集群。
问题5:
Cannot lock storage /tmp/hadoop-root/dfs/name. The directory is already locked.
应对:
./hadoop namenode -format 命令是格式化命名空间,一定是在未启动 hadoop 服务的时候才能执行。出现这个错误提示是因为 hadoop 的服务是子运行状态。