两台机器组成一个小实验集群,一台master,一台slave1。
OS: Red Hat Enterprise Linux 5
Java: jdk1.6
hadoop: 0.20.2
master机器的配置情况:
编辑
/etc/hosts文件,加上master和slave1的ip地址
编辑
hadoop-0.20.2/conf/masters文件,加上"master"
编辑
hadoop-0.20.2/conf/slaves文件,加上"slave1"
编辑
hadoop-0.20.2/conf/hadoop-env.sh文件,
加上JAVA_HOME路径:
export JAVA_HOME=/usr/java6/jdk1.6.0_20
即使是配置伪分布式模式,也需要安装ssh
sudo apt-get install openssh-server
编辑hadoop-0.20.2/conf/core-site.xml文件,
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value> <!-- 此目录是本地文件系统路径,hdfs上也会生成相同路径 -->
</property>
如果是伪分布式,core-site.xml文件这样配置:
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
编辑hadoop-0.20.2/conf/hdfs-site.xml文件,
<property>
<name>dfs.replication</name>
<value>2</value> <!-- 伪分布式就配成1 -->
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/tmp/dfs/name</value> <!-- 本地文件系统路径 -->
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/tmp/dfs/data</value> <!-- 本地文件系统路径 -->
</property>
编辑hadoop-0.20.2/conf/mapred-site.xml文件,
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
<property>
<name>mapred.job.reuse.jvm.num.tasks</name>
<value>10</value>
</property>
启动hadoop之前要格式化namenode
hadoop namenode -format
在master上执行start-all.sh脚本,如果slave1机器上的java进程不能启动。
解决方法:关闭防火墙,
service iptables stop
机器需要用ssh来启动和停止各个datanode上的进程,而且是不输入密码的方式,故需要配置SSH使用无密码公钥认证的方式。
在namenode上需要生成一个密钥对,即一个私钥,一个公钥。将公钥拷贝到datanode上,这样,比如当namenode向datanode发起ssh连接的时候,datanode上就会生成一个随机数并用namenode的公钥对这个随机数进行加密,并发送给namenode;namenode收到这个加密的数以后用私钥进行解密,并将解密后的数发送回datanode,datanode确认解密的数无误后就允许namenode进行连接了。这就完成了一次公钥认证过程。
首先在namenode上用rsa算法生成密钥对:
ssh-keygen -t rsa
也可以用dsa算法
ssh-kengen -t dsa
这个命令将为namenode上的登录用户生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在.ssh目录下。然后将id_rsa.pub的内容复制到每个机器(也包括本机)的.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接cp或者scp就好了。
下面的操作假设各个机器上都没有authorized_keys文件。
chmod 644 authorized_keys
必须保证authorized_keys只对其所有者有读写权限,其他人不允许有写的权限,否则SSH是不会工作的。
至此各个机器上的SSH配置已经完成,可以测试一下了,比如namenode向datanode发起ssh连接
ssh slave1
别忘了测试本机
ssh master