JDK配置和Hadoop安装网上教程比较多,就不多说了。
1.ssh配置(实现在主机之间执行指令时不需要输入密码)。
1).在所有机器上建立.ssh目录(假设在/home/user下)
$mkdir .ssh
2).在namenode上生成密钥对,$ssh-keygen -t rsa
3).然后一直【Enter】,即默认保存在~/.ssh/id_rsa文件中。
4).接着$cd ~/.ssh (这几个个命令只需在NameNode上执行就OK了)
$cp id_rsa.pub authorized_keys
$scp authorized_keys DataNode1:/home/user/.ssh
$scp authorized_keys DataNode2:/home/user/.ssh
5).进入所有机器的.ssh目录,改变authorized_keys文件的许可权限:$chmod 644 authorized_keys
这时从NameNode向其他机器(DataNode)发起SSH连接,只在第一次登录时需要输入密码。另外ssh连接过程中时出现
"Agent admitted failure to sign using the key" 时,在windows下"服务"启动VMware Agent Service这个服务。再重启VMware即可。
"Agent admitted failure to sign using the key" 时,在windows下"服务"启动VMware Agent Service这个服务。再重启VMware即可。
2.DataNode和NameNode未启动
1).格式化分布式文件系统 $bin/hadoop namenode -format;
2).启动hadoop守护进程 $bin/start-all.sh:
Q: 可能会出现"chown: changing ownership of ‘/hadoop-0.20.203.0/bin/../logs’: Operation not permitted"的错误,
A:不能自动创建或读取文件夹,跟权限有关系:可能文件或目录是用root用户创建的,先用root登录把logs目录删了,然后换成普通账户,再运行bin/start-all.sh
3).用jps命令检测启动情况 $bin/jps
正常情况下,在NameNode上会启动NameNode、JobTracker、Secondary NameNode进程
在DataNode上启动DataNode和TaskTracker进程;
否则打开hadoop的日志文件logs查看对应未启动进程的log文件。检查conf下的三个配置文件(对于端口被占用同样适用)。
附: 查看端口是否启动:netstat -tnl
3. 1)浏览器访问时如http://NameNode:50070 Live Nodes是否为0(注意:进程启动正常,而Live Nodes也可能为0),
可能是因为防火墙的原因,需要到所有的节点上执行service iptables stop 来关闭防火墙;
2)还有http://NameNode:50030 的Nodes是否为0——>
解决1:将各机器的tmp目录下的内容删除,再重新格式化文件系统,就可以正常运转了。
解决2:可能是因为子节点的mapred-site.xml的配置错误,一定要配置成namenode的ip
4. 最后运行WordCount实例,查看分布式部署结果图(1个master,1个slave):
1).查看JobTracker运行状态(50030)
2).查看NameNode状态(50070):
总结:hadoop单机和伪分布配置都比较简单,但是完全的分布式在配置过程中各种各样的情况都会出现,也希望大家能少走一些弯路。
注意linux下的权限机制,还有最重要的log文件~
其他错误:
1)Hadoop报错“could only be replicated to 0 nodes, instead of 1”
2) Source name ugi already exists (这个不知道怎么回事??)
来源:https://www.cnblogs.com/Seiyagoo/archive/2012/03/04/2378926.html