Hadoop配置及安装部署

hadoop%e9%85%8d%e7%bd%ae%e5%8f%8a%e5%ae%89%e8%a3%85%e9%83%a8%e7%bd%b2

以前博客上的老文,最近又重新在搞hadoop,转过来方便查阅

硬件环境
共有3台机器,均使用的FC5系统,Java使用的是jdk1.6.0。IP配置如下:
dbrg-1:202.197.18.72
dbrg-2:202.197.18.73
dbrg-3:202.197.18.74

这里有一点需要强调的就是,务必要确保每台机器的主机名和IP地址之间能正确解析。

一个很简单的测试办法就是ping一下主机名,比如在dbrg-1上ping dbrg-2,如果能ping通就OK!若不能正确解析,可以修改/etc/hosts文件,如果该台机器作Namenode用,则需要在hosts文件中加上集群中所有机器的IP地址及其对应的主机名;如果该台机器作Datanode用,则只需要在hosts文件中加上本机IP地址和Namenode机器的IP地址。

以本文为例,dbrg-1中的/etc/hosts文件看起来就应该是这样的:
127.0.0.0         localhost     localhost
202.197.18.72     dbrg-1        dbrg-1
202.197.18.73     dbrg-2        dbrg-2
202.197.18.74     dbrg-3        dbrg-3

dbrg-2中的/etc/hosts文件看起来就应该是这样的:
127.0.0.0         localhost    localhost
202.197.18.72     dbrg-1       dbrg-1
202.197.18.73     dbrg-2       dbrg-2

在上一篇学习笔记中提到过,对于Hadoop来说,在HDFS看来,节点分为Namenode和Datanode,其中Namenode只有一个,Datanode可以是很多;在MapReduce看来,节点又分为Jobtracker和Tasktracker,其中Jobtracker只有一个,Tasktracker可以是很多。
我是将namenode和jobtracker部署在dbrg-1上,dbrg-2,dbrg-3作为datanode和tasktracker。当然你也可以将namenode,datanode,jobtracker,tasktracker全部部署在一台机器上

点击查看更多 »

Hadoop的pid配置

hadoop%e7%9a%84pid%e9%85%8d%e7%bd%ae

今天发现一个问题,当hadoop集群运行一段时间以后,无法停止服务。执行stop-all的时候提示no tasktracker to stop ,no datanode to stop。而当我把所有节点手动kill掉以后,执行start-all和stop-all均没有问题。在邮件群组里问了一下,最后结论如下:

stop-all.sh会调用stop-mapred.sh和 stop-dfs.sh去停止jobtracker, tasktrackers; namenode, datanodes。

Jobtracker和namenode的停止是在本地通过调用hadoop-daemon完成的,而tasktracker,和datanode的停止是通过调用hadoop-daemons来完成的。Hadoop-daemon实质上是ssh到每一个slave去执行一个当地的hadoop-daemon命令,比如:hadoop-daemon stop datanoade。

Hadoop-daemon  stop command会通过kill -0 `cat command.pid` 来测试进程是否存在,如果这个测试中有错误产生,就会报”no command to stop ”。

  • 可能原因:pid文件丢了,导致hadoop-daemon.sh stop XXX时找不到进程号。
  • 解决办法:默认pid文件放在/tmp目录下,不太安全。可以在conf/hadoop-env.sh里设置HADOOP_PID_DIR 境变量改变 pid文件的存放目录。

最后我增加上了pid的路径配置,这下应该没有问题了