「海量数据处理」Proj1. Hadoop集群的安装

本文是备忘记录,仅供参考。

我们在http://collabedit.com/建了一个房间,用于记录Project完成过程中的tips和公共通知,建了一个QQ讨论组,三个人的小组。
下面基本照搬一下collabedit的记录:
单机安装的参考网站:
http://xuyuanshuaaa.iteye.com/blog/1063303
一些设置:
建立ssh

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

.bashrc设置

export HADOOP_HOME="/home/sbhadoop/myHadoop/hadoop-1.0.4/"
export PATH="$PATH:${HADOOP_HOME}/bin/"

单击测试完成后,我们对所有conf文件做了备份,之后重新配置集群版本。

集群安装的参考网站:
http://blog.csdn.net/hguisu/article/details/7237395
当时我们有三个节点,设置的时候是一个master,三个slave,master的namenode其实也可以同时当datanode的。
绑定直接选择寝室固定的ip,修改了/etc/hosts的文件,给三个ip起了别名。
core-site.xml和mapred-site.xml里面需要将单机版localhost的地方改成master的别名 or ip。
最后启动起来master确保会有namenode,jobtracker,secondnamenode,datanode,tasktracker
slaves会有datanode和tasktracker

测试wordcount
一个生成随机单词的python小程序

import random
charlist='abcdefghijklmnopqrstuvwxyz'
## n = random.randint(0, 26)
for i in range(20000000):
	for j in range(10):
		length = random.randint(1, 5)
		word = ''
		for k in range(length):
			n = random.randint(0, 25)
			word += charlist[n]
		print word,
	print ''

修改一下数值就可以自行选择生成的单词数目也就是文件大小了,调用

python word.py > word.txt

,最后我们分别测试了20M,40M,80M的文件。
在这里生成的单词速度略慢,有一个实时监控的方法,shell命令:

watch -n 1 -d "ls -al | grep word.txt"

其中-n 1表示间隔1s刷新,-d表示高亮改变的部分,最后监控

ls -al | grep word.txt

这一条命令,查看的是word.txt的大小的变化,差不多达到要求就可以直接Ctrl+c暂停掉。

遇到的一些问题及参考解决方案:
一直启动不了datanode进程,只有tasktracker:
此时最好的办法就是直接看日志记录,找到了java.io.IOException: Incompatible namespaceIDs
一个相关链接: http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster
这个链接提供了两个解决方案,第一种是重新删掉一切重来,第二种是修改namespace的值,第二种亲测可用。主要问题发生的原因就是namespace不一致造成的,文章中将清楚了,我们之前没完全规划好瞎测很容易出现这个错误。

mapreduce的时候reduce卡在16%不再继续了:
通过排除法,这个问题单机不发生,集群发生条件时同时多个datanode进行mapreduce。
现象是我们使用20M和40M的文件测试都没问题,因为此时文件小,从监控来看hadoop只把任务分给了一个机器做。而测80M时,分了两个机器做,就出问题了,最后出来的错误叫shuffle错误,shuffle error:exceeded max_failed_unique_matche : bailing out。
参考链接:
http://www.360doc.com/content/11/0323/23/23378_104035203.shtml

第一修改方案,一度以为就是打开文件的问题,fail:
在sudo vim /etc/security/limits.conf添加
* soft nofile 102400
* hard nofile 409600
vi /etc/pam.d/login
加上:
session required /lib/security/pam_limits.so
最后这个方案失效。

第二修改方案,可能是网络问题,fail:
感觉是firewall的问题,ubuntu默认关闭了firewall,不太像是端口的问题。
减少机器跑,排除防火墙问题…一台机器可以跑….(其实只要工作的datanode有一个就可以跑)

第三解决方案,不知道哪里听说的:
把hosts里面三个人的ip对应的名字改成各自的hostname,修改hosts,master,slave,各种xml,然后重新mapreduce。
这里我让别名与机器的hostname统一。不过最终奇葩了,master能启动slave的datanode进程,但是livenode看不到slave,改回来又对了。这个原因还不知道
##等待补充##

16%的问题时间关系没解决好,最后用40M文件测的交了报告。有空再看看吧。
##等待补充##

没研究出来如何合理的动态添加和拿掉datanode,总是直接进入safemode,个人觉得不至于吧,那淘宝那些集群这么容易挂datanode不久总是悲剧了。待研究。
##等待补充##

##等待补充##
还有一些小问题,本周周末有空再看,赶别的作业去了。
##等待补充##

Tags :

2 thoughts on “「海量数据处理」Proj1. Hadoop集群的安装”

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Click the right image To submit your comment: