Ubuntu_10.04下Hadoop-0.20.2集群配置手册(一)
一、软硬件环境的准备
集群包含三个节点:1个namenode,3个datanode,节点之间局域网连接,可以相互ping通。操作系统ubuntu 10.04节点IP地址分布如下:
hadoop-namenode:
hadoop-datanode1:
hadoop-datanode2:
hadoop-datanode3:
修改/etc/hosts文件如下:
192.168.7.132
hadoop-namenode
192.168.8.2
hadoop-datanode1
192.168.7.123
hadoop-datanode2
192.168.7.179
hadoop-datanode3
把namenode上面的hosts文件覆盖所有datanode上面的hosts,是他们内容一致。
安装JDK环境:
下载JDK安装包jdk-6u20-linux-i586.bin,进行安装,然后把安装目录移到/usr/lib/ jdk1.6.0_20,
然后ln –s /usr/lib/jdk1.6.0_20/bin/java /usr/bin/java
在/etc/profile下面设置JDK_HOME变量
export
JDK_HOME=/usr/lib/jdk1.6.0_20
JDK环境的操作需要在所有的namenode和datanode上面进行操作。
SSH无密码验证配置
Hadoop
需要使用SSH协议,namenode将使用SSH协议启动namenode和datanode进程,
(
datanode
向namenode传递心跳信息可能也是使用SSH协议,这是我认为的,还没有做深入了解
)。许多教程上介绍Hadoop集群配置时只说明了namenode上SSH无密码登录所有datanode,我在配置时发现必须使datanode上也能SSH无密码登录到namenode,Hadoop集群才能正常启动(
也许这不是必须的,只是我的一个失误,但是这样能够正常启动Hadoop集群
)。
l
配置Namenode无密码登录所有Datanode (0)原理
Namenode作为客户端,要实现无密码公钥认证,连接到服务端datanode上时,需要在namenode上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到datanode上。当namenode通过ssh连接datanode时,datanode就会生成一个随机数并用namenode的公钥对随机数进行加密,并发送给namenode。namenode收到加密数之后再用私钥进行解密,并将解密数回传给datanode,datanode确认解密数无误之后就允许namenode进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端namenode公钥复制到datanode上。
(1)所有机器上生成密码对
所有节点上执行以下命令:
root@hadoop-namenode# ssh-keygen –t
然后一路回车就可以了。
这将在/root/.ssh/目录下生成一个私钥id_rsa和一个公钥id_rsa.pub。
把namenode节点上面的id_rsa.pub 复制到所有datanode节点/root/.ssh/位置。
root@hadoop-namenode# cp id_rsa.pub authorized_keys
namenode的公钥
root@hadoop-namenode# chmod 644 authorized_keys
使用SSH协议将namenode的公钥信息authorized_keys复制到所有DataNode的.ssh目录下(.ssh下最初没有authorized_keys,如果有,则需要复制追加,后面会讲到如何追加)。
root@hadoop-namenode# scp authorized_keys data节点ip地址:/root/.ssh
这样配置过后,namenode可以无密码登录所有datanode,可以通过命令
“ssh 节点ip地址”来验证。有些手册上介绍的配置方法与此不一致,但是这种方法是成功的。很多手册到此步SSH配置就完成了,但是我实验时发现不能正常启动hadoop,所以我还继续做了配置。
l
配置每个Datanode无密码登录Namenode (0)原理
Namenode连接datanode时namenode是客户端,需要将namenode上的公钥复制到datanode上,那么,如果datanode主动连接namenode,datanode是客户端,此时需要将datanode上的公钥信息追加到namenode中的authorized_keys
之中。(此时,由于namenode中已经存在
authorized_keys
文件,所以这里是追加)。
如果进一步需要datanode之间实现公钥无密码验证,则同样需要相互之间追加公钥信息
(1)将各个datanode上的id_rsa.pub追加到namenode的authorized_keys
在所有datanode上依次执行如下命令:
root@hadoop-datanode1# scp id_rsa.pub namenode ip地址:/root/.ssh/datanode ip地址.id_rsa.pub
这将datanode上之前产生的公钥id_rsa.pub复制到namenode上的.ssh目录中,并重命名为datanode ip地址.id_rsa.pub,这是为了区分从各个datanode上传过来的公钥。
复制完毕,在namenode上执行以下命令,将每个datanode的公钥信息追加
:
root@hadoop-namenode#
cat datanode ip地址.id_rsa.pub >> authorized_keys
这样,namenode和datanode之间便可以相互ssh上并不需要密码......
注意:整个过程中只涉及到创建密钥,复制公钥,添加公钥内容,没有更改配置文件,实际上配置文件/etc/ssh/sshd_config中开启了公钥验证
{
RSAAuthentication yes
PubkeyAuthentication yes
}
(2)SSH配置完毕
至此,namenode能无密码验证登陆每个datanode。每个datanode也能无密码验证SSH登陆到namenode。
二、hadoop配置
1.
安装
下载hadoop发行版,地址:
http://apache.freelamp.com/hadoop/core/stable/
安装Hadoop集群通常要将安装软件解压到集群内的所有机器上。并且安装路径要一致,如果我们用HADOOP_HOME指代安装的根路径,通常,集群里的所有机器的HADOOP_HOME路径相同。
通常,集群里的一台机器被指定为NameNode,另一台不同的机器被指定为JobTracker。这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。
下载安装包后,直接解压安装即可:
$tar –zxvf hadoop-0.20.2.tar.gz
$cd hadoop-0.20.2
注:如果集群内机器的环境完全一样,可以在一台机器上把Hadoop0.20.2集群配置好,然后把配置好的软件即hadoop-0.20.2整个文件夹拷贝到其他机器的相同位置即可。
2.
配置
编辑conf/hadoop-env.sh文件,至少需要将JAVA_HOME设置为Java安装根路径。
配置core-site.xml
hadoop.tmp.dir
/opt/hadoop/tmp
(注意,请先在hadoop目录下建立tmp文件夹)
A base for other temporary directories.
fs.default.name
hdfs://hadoop-namenode:9000
页:
[1]