在完成hadoop伪分布式配置后,就可以开始进行进行hadoop的集群配置。下面的环境都是基于伪分布式单节点配置成功的基础上进行的,即已经安装配置了SSH,安装完JDK,伪分布式单节点wordcount测试成功。
-
SSH无密码登录配置
环境:3个虚拟机,系统都为Ubuntu11.10
ip说明
192.168.47.129 master
192.168.47.131 slave1
192.168.47.132 slave2
对每个datanode虚拟机进行设置下面第1,2,3步骤(以slave1为例)
-
设置主机名 及 IP
改名称:
sudo gedit /etc/hostname => slave1
注:第一次使用可能会没权限更改,要对文件的权限进行修改。chmod 777 /etc/hostname
-
配置SSH
首先安装ssh
$ sudo apt-get install ssh
$ sudo apt-get install rsync
$ sudo apt-get install openssh-server
创建公钥私钥:ssh-keygen –t rsa
期间会要求输入一些信息,直接按回车就可以。这样,在默认的路径(其中mini 是当前用户名)/home/mini/.ssh 目录下创建私钥 id_rsa 和一个公钥id_rsa.pub
利用ssh –version可以查看ssh是否安装成功
-
把ssh的公钥上传到namenode节点
cd .ssh
cp id_rsa.pub datanode1.id_rsa.pub
scp datanode1.id_rsa.pub namenode节点的ip地址:/home/mini/.ssh
(在我的配置方案中,是192.168.47.129:/home/mini/.ssh)
选择yes之后,提示输入namenode节点的密码
上传后,到namenode的虚拟机上查看,发现已经有datanode1.id_rsa.pub,表示上传成功
-
复制master的文件到slave上
在收到所有 datanode 发送过来的公钥文件之后,要综合这些文件(包括自身),并将这些文件发送到每个节点上:
cp id_rsa.pub authorized_keys
cat datanode1.id_rsa.pub>> authorized_keys
cat datanode2.id_rsa.pub>> authorized_keys
scp authorized_keys 192.168.47.131:/home/mini/.ssh
scp authorized_keys 192.168.47.132:/home/mini/.ssh
这时要查看下ssh配置是否成功,使用 ssh 命令: ssh 其他机器ip ,如果不需要密码就可以登录,就说明配置成功。如果还需要密码,或者干脆无法登录,则需要重启电脑。重启之后再次使用 ssh 命令,如果还需要密码或者无法登录,则需要重新重新进行配置。
【问题】
连接的时候显示no
【解决方案】
查看一下ip是否变动,可能因为ip变化导致无法连接
-
集群配置
在master中进行修改
-
修改IP与主机名对应关系
修改主机的/etc/hosts文件:sudo gedit /etc/hosts
将集群中各个主机的IP与主机名都列在此处:
192.168.47.129 master
192.168.47.131 slave1
192.168.47.132 slave2
注意要将第一二行(127.0.0.1和127.0.1.1)先用 # 注释掉
-
配置hadoop-1.0.4/conf中的几个配置文件
-
配置core-site.xml
-
配置hdfs-site.xml
-
配置mapred-site.xml
-
配置masters文件
把里面内容改为namenode的主机名
master
-
配置slaves文件
把里面内容改为datanode的主机名
slave1
slave2
-
复制配置好的各文件到所有数据节点上
root用户下:
scp /etc/hosts 数据节点ip地址:/etc/hosts
scp /etc/profile 数据节点ip地址:/etc/profile
scp /usr/lib/jvm/jdk 数据节点ip地址:/usr/lib/jvm
scp –r /home/hadoop 数据节点ip地址:/home
【问题】
传输时说not a regular file
【解决方案】
可能你传输的是一个文件夹,要加 -r 进行文件夹的传输
-
对namenode进行格式化
cd /home/hadoop/deploy/hadoop-1.0.4/bin
./hadoop namenode –format
如果没有报错,这表示成功
【问题】
./hadoop namenode –format时出现以下错误
13/03/25 21:03:51 ERROR namenode.NameNode: java.io.IOException: Cannot create directory /home/hadoop/sysdata/1.0.4/name/current
at org.apache.hadoop.hdfs.server.common.Storage$StorageDirectory.clearDirectory(Storage.java:297)
at org.apache.hadoop.hdfs.server.namenode.FSImage.format(FSImage.java:1320)
at org.apache.hadoop.hdfs.server.namenode.FSImage.format(FSImage.java:1339)
at org.apache.hadoop.hdfs.server.namenode.NameNode.format(NameNode.java:1164)
at org.apache.hadoop.hdfs.server.namenode.NameNode.createNameNode(NameNode.java:1271)
at org.apache.hadoop.hdfs.server.namenode.NameNode.main(NameNode.java:1288)
【解决方案】
用root权限进行格式化即可
【问题】
格式化namenode出现cannot create directory /home/hadoop/sysdata/hdfs/name/current错误提示
【解决方案】
将hadoop的目录权限设为当前用户可写sudo chmod -R a+w /home/hadoop,授予hadoop目录的写权限
-
启动hadoop所有进程
./start-all.sh
【问题】
遇到slave2: chown: changing ownership of `/home/hadoop/deploy/hadoop-1.0.4/libexec/../logs': Operation not permitted
【解决方案】
用sudo chown -R mini /home/hadoop来解决,即将hadoop主目录授权给当前mini用户
【问题】
Jobtracker没启动,查log发现
org.apache.hadoop.security.AccessControlException: The systemdir hdfs://master:9000/tmp/hadoop/mapred/system is not owned by mini
【解决方案】
修改hadoop的配置文件:conf/hdfs-core.xml, 找到 dfs.permissions 的配置项 , 将value值改为 false
-
用./hadoop dfsadmin –report查看集群运行情况。
-
做集群测试
创建input目录 ./hadoop dfs –mkdir input
之后上传两个文本文件到hdfs的input中
./hadoop put /home/hadoop/core/data/data_in/*.txt input
查看是否上传成功 ./hadoop –ls input
下面我们运行hadoop的自带的wordcount程序
./hadoop jar ./../hadoop-examples-1.0.4.jar wordcount input output
在网页上192.168.47.129:50070中查看filesystem中的user里面的output
发现结果正确。
至此hadoop 的hdfs环境已经好了,可以跑mapreduce程序了。