配置Hadoop集群的几个问题

12月 15th, 2011 2,398 留下评论 阅读评论

实验室的调研项目,负责调研HBase,在用单机模式和本地文件系统测试之后,需要搭建HBase集群来测试,当然就要先搭建起来Hadoop集群。花了一天时间,碰到问题若干,并且都一定程度地坑爹,最后终于顺利跑起,泪流满面。

环境:CentOS、hadoop-0.20.203.0rc1.tar.gz、3台虚拟机构建的集群

问题一:手动mkdir相关目录


比如hdfs-site.xml中的dfs.name.dir项、dfs.data.dir项,mapred-site.xml中的mapred.system.dir项,这些配置的目录都需要事先mkdir好并保证应有的权限。

问题二:root用户导致的-jvm问题

使用root用户启动hadoop,会报“无法识别的 -jvm 参数,Java虚拟机启动失败”这样的错误。原因在于$HADOOP_HOME/bin/hadoop文件中的一行,搜索-jvm就能发现,当用户ID为0(即root用户),则会多带一个-jvm项。

为hadoop和mapreduce专门建立账号是官方推荐的做法,懒人可以直接修改上面提到的地方绕过-jvm的问题。

坑爹指数:★★★     评论:虽然用root账户不是推荐的方法,那直接报个Warning好了嘛,直接报错导致启动失败总不是应该的结果吧…

问题三:使用start-all.sh导致jobtracker.info写入问题

LZ在搭建集群过程中,执行start-all.sh后,遇到namenode机器mapred写入jobtracker.info文件失败的问题,具体异常信息为“java.io.IOException : File ***/jobtracker.info could only be replicated to 0 nodes, instead of 1”。

问题在于执行start-all.sh,在启动namenode之后会立即启动mapred,而这时namenode处于30秒的安全状态中,datanode还没有连接上来,于是执行mapred就出错了。解决方法是:不要执行start-all.sh,先执行start-dfs.sh,通过http://yoururl:50070观看hdfs的状态,有明确倒计时说明安全状态,在安全状态结束后,再执行start-mapred.sh,即可。

坑爹指数:★★?     评论:那bin目录下给一个start-all.sh到底是为什么呢?难道是由于哪里配置的问题或是什么的问题?

虽然在百度实习时有搭建过Hadoop集群,不过貌似那时用的Hadoop不像是Apache发布的包而大概是经过百度内部改良的吧,反正和这次下载的包结构有差别。所以基本也算是第一次搭建了,不过万事靠Google、百度基本还是能找到解决,各种求罩求指导!

Categories: Java 标签:
  1. 还没有评论呢。