MrTitan 2011-12-06
以前搭建环境或是配置软件从来都没有留Tips的习惯,但实践证明这是错误的——做过不等于记得怎么做,遇到过的错误也不等于今后就不是错误了。Nutch跟Hadoop的搭建困扰了我很久,但回头看看又觉得真正有些问题的其实就几个关键点,所以觉得花些时间写个简单流程,缅怀一下最近的探索,也希望能给想要搭建Nutch或hadoop的同学提供一些帮助。欢迎大家指正。
想要说明一下的是,虽然说hadoop诞生于nutch,但现在hadoop已经完全独立为一个分布式框架,我们可以简单地理解为nutch只是跑在hadoop基础之上的一个分布式应用程序(实现的功能是开源的搜索引擎:crawl+index+search)。根据我的实践,Nutch+hadoop的配置关键还是在于hadoop环境的搭建。
Hadoop 环境搭建
1. 硬件环境及软件选择
硬件环境:2台Fedora虚拟机(我自己实验的时候用了4台,有两台在另外一位同学的机子上,所以现在就不占用了),机器情况如下表:
计算机名 | IP | 内存 | 角色 |
Namenode | 172.18.218.34 | 1G | Namenode+datanode |
Datanode1 | 172.18.218.44 | 512M | Datanode |
另外,两个linux系统都创建了一个名为hadoop的用户。
至于nutch,我选择的是1.2版本,因为这个版本集成了Hadoop,不用再单独去下载Hadoop,而且兼容性较好。
下载地址:http://apache.etoak.com//nutch/ ,如果有需要,也可以从我这里拷贝。
2. Hosts文件修改
节点之间的通信有时候会用到IP地址,有时候会用到计算机名,所以需要给出节点IP地址跟计算机名的对应,linux系统中这种对应关系体现在/etc/hosts文件中,编辑hosts文件,按“IP 计算机名”的形式把各个节点写进hosts文件。
其中::1这一行是跟IPv6相关的,不需要去理会。其中127.0.0.1这一行是要注释掉的,不然之后运行hadoop的时候会出现“Bad connection to DFS”的错误,DFS是hadoop的文件系统。每次重启系统,hosts文件中都会自动自动加上一行127.0.0.1(原因不解),运行hadoop之前都要把这一行kill掉才行。
对于机器datanode1,hosts文件也要做类似处理。
3. SSH无密码访问
Hadoop集群中节点都是通过ssh相互联系,进行数据传输,我们不可能为每次连接输入访问密码(常规ssh需要访问密码),所以我们需要进行相应配置,使节点之间的ssh连接不需要密码。 我们可以通过设置密钥来实现。
首先在namenode跟datanode上安装ssh(一般情况下已经默认安装了)。
然后在所有的节点(包括namenode跟datanode)上创建公钥私钥。
创建公钥私钥命令: ssh-keygen –t rsa
期间会要求输入一些信息,直接按回车就可以。这样,在默认的路径/home/hadoop/.ssh 目录下创建私钥 id_rsa 和一个公钥 id_rsa.pub 。
对于 datanode 节点:
将自己的公钥发送到 namenode 上:
#cp id_rsa.pub datanode1_rsa.pub
#scp datanode1_rsa.pub 172.18.218.34:/home/hadoop/.ssh
这里需要注意,由于每个 datanode 节点都要将自己的公钥传到 namenode 的相同路径下,因此,各个 datanode 发送的公钥文件名不能相同。这里使用 cp 命令,在每台 datanode 节点上将公钥文件复制为唯一名字的文件。
对于 namenode 节点:
在收到所有 datanode 发送过来的公钥文件之后,要综合这些文件(包括自身),并将这些文件发送到每个节点上:
#cp id_rsa.pub authorized_keys
#cat datanode1_rsa.pub >>authorized_keys
把公钥authorized_keys拷贝到所有节点的.ssh文件夹下:
#scpauthorized_keys 172.18.218.44:/home/hadoop/.ssh
这时一定要查看一下 ssh 配置是否成功,查看方式是使用 ssh 命令: ssh 其他机器 ip ,如果不需要密码就可以登录,就说明配置成功。如果还需要密码,干脆无法登录,则需要重启电脑。重启之后再次使用 ssh 命令,如果还需要密码或者无法登录,则需要重新配置一遍。