hadoop集群部署常见问题
2013-06-10 09:26
357 查看
hadoop执行stop-all.sh的时候总是出现 “no namenode to stop”
这个原因其实是因为在执行stop-all.sh时,找不到pid文件了。
在 HADOOP_HOME/conf/ hadoop-env.sh 里面,修改配置如下:
export HADOOP_PID_DIR=/home/hadoop/pids
pid文件默认在/tmp目录下,而/tmp是会被系统定期清理的,所以Pid文件被删除后就no namenode to stop”
本人在搭建hadoop集群时折腾了好几天,过程中先后遇到了以下问题,记录下来和大家分享,以免后面再碰到
(1).当在格式化namenode时出现cannot create directory /usr/local/hadoop/hdfs/name/current的时候,请将hadoop的目录权限设为当前用户可写sudo chmod -R a+w /usr/local/hadoop,授予hadoop目录的写权限
(2).当碰到
chown:changing ownership of 'usr/local/hadoop ../logs':operation not permitted
时,可用sudo chown -R grid /usr/local/hadoop来解决,即将hadoop主目录授权给当前grid用户
(3).如果slaves机上通过jps只有TaskTracker进程,没有datanode进程,请查看日志,是不是有“could only be replicated to 0 nodes,instedas of 1”有这样的提示错误,如果有,可能就是没有关闭防火墙所致,服务器和客户机都关闭(sudo ufw disable)后,所有进程启动正常,浏览器查看状态也正常了(ubuntu防火墙关闭)
(4).要在服务器机上把masters和slavs机的IP地址加到/etc/hosts,当然这个不影响start-all.sh启动,只是浏览器jobtacker上找不到节slaves节点
(5).ssh免密码登陆时,注意文件authorized_keys和.ssh目录权限,如果从masters机上scp authorized_keys到slaves机上出现拒绝问题,那就在salves机上也ssh-keygen,这样目录和文件就不会有权限问题了,就可以实现ssh免密码登陆了,或直接将.ssh目录拷过去,在slaves机上新建.ssh目录权限好像和masters机的目录权限不一样
运行正常后,可以用wordcount例子来做一下测试:
bin/hadoop dfs –put /home/test-in input //将本地文件系统上的 /home/test-in 目录拷到 HDFS 的根目录上,目录名改为 input
bin/hadoop jar hadoop-examples-0.20.203.0.jar wordcount input output
#查看执行结果:
# 将文件从 HDFS 拷到本地文件系统中再查看:
$ bin/hadoop dfs -get output output
$ cat output/*
# 也可以直接查看
$ bin/hadoop dfs -cat output/*
如果在reduce过程中出现"Shuffle Error:Exceeded MAX_FAILED_UNIQUE_FETCHES;bailing-out"错误,原因有可能是/etc/hosts中没有将IP映射加进去,还有可能是关于打开文件数限制的问题,需要改vi /etc/security/limits.conf,详情请看:Hadoop常见问题及解决办法
如果hadoop启动时,slave机报连接拒绝错误,即连不上master9000端口,则namenode运行不起来时,可以先确保单机是不是可以正常运行伪分布式模式,可能是因为没有做ssh localhost,也可以查看是不是/etc/hosts文件IP映射有问题,一定注意该机的IP地址是不是唯一映射一个服务器名,不然可能也会出错
1.http://wiki.apache.org/hadoop/ConnectionRefused ;
2.http://ubuntuforums.org/showthread.php?t=1057604 ;
3.http://www.hadoopor.com/thread-1056-1-1.html ;
如果是一个master机和一个slave机,做wordcount测试,是不会报上述错误的,不知道为什么两台slave机后,就报上述错误,解决方案如下(将masters机和其中一台slaves机中的/etc/hosts中masters机的IP映射地址改成服务器的名字,而不是IP地址):
1.http://hi.baidu.com/daodaowuhen/blog/item/b299b486f6c8aea86c811996.html ;
2.http://blog.sina.com.cn/s/blog_6e7e94bc0100pcjw.html ;
如果需要在Eclipse上运行MapReduce程序,需要将hadoop目录下的eclipse插件(hadoop/contrib/eclipse-plugin)拷到eclipse安装目录下的plugins下。此时可以把hadoop的测试例子wordcount从src/examples中拷到eclipse工程中,在open run dialog的arguments中设置好输入和输出参数,然后run as->java application就可以了
如果要run as->run on hadoop,即要在集群上运行MapReduce程序,则需要设置hadoop location,设置好master的namenode和jobtracker的IP及端口号,能正确连到DFS Locations就表明可以分布式运行MapReduce程序了,本人在此过程中,先后遇到以下问题:
1.Connecting to DFS test has encountered a problem
这个原因是因为直接采用hadoop0.20.203.0和相应包下的eclipse插件,此时MapReduce viewer是出现了,但根本连不上DFS,查了很多资料,很多说是因为hadoop下的eclipse插件和eclipse版本不匹配
参考资料1:http://lucene.472066.n3.nabble.com/about-eclipse-plugin-td3047557.html ;
参考资料2:自己动手编译对应hadoop版本的eclipse plugin
按照上面两条解决方案,我选择了第一种,虽然前一种hadoop是0.20.2的版本,但已经有编译好的可以用的eclipse插件,还有o.20.203这个版本是今年5月份出来的,还比较新,问题暴露的还少,而第二种解决方案需要自己配置编译,好像还要用ant命令,这个工具还没用过,所以免得麻烦
2.error:call to failed on local exception:java.io.EOFException
原因如下:eclipse-plugin和Hadoop版本对不上(因为刚开始不想换hadoop版本,就直接把那个插件(hadoop-plugin-0.20.3-snapshot.jar)拷到0.20.203版本里跑了一下,结果报上面的错,后来将hadoop版本换成hadoop0.20.2就好了)
参考资料:http://lucene.472066.n3.nabble.com/Call-to-namenode-fails-with-java-io-EOFException-td2933149.html ;
3.Plug-in org.apache.hadoop.eclipse was unable to load class
org.apache.hadoop.eclipse.launch.HadoopApplicationLaunchShortcut.
可以尝试将终端切到eclipse目录下用./eclipse clean来将以前载过的hadoop插件清除掉,我遇到这个错误后,这样操作后就好了。
参考资料:http://www.cloudobjects.de/2010/11/running-hadoop-jobs-using-eclipse.html ;
上述三种错误,是我在这个过程中遇到的错误,如果遇到类似错误,可以试着用上述方法来排除一下,因为hadoop在搭建的过程中遇到的问题实在千奇百怪,稍微一步有差池,说不准后面运行时就报错,就算报相同错误提示的, 也可能是其它原因导致的,上述只提供其中一种解决方案
这个原因其实是因为在执行stop-all.sh时,找不到pid文件了。
在 HADOOP_HOME/conf/ hadoop-env.sh 里面,修改配置如下:
export HADOOP_PID_DIR=/home/hadoop/pids
pid文件默认在/tmp目录下,而/tmp是会被系统定期清理的,所以Pid文件被删除后就no namenode to stop”
本人在搭建hadoop集群时折腾了好几天,过程中先后遇到了以下问题,记录下来和大家分享,以免后面再碰到
(1).当在格式化namenode时出现cannot create directory /usr/local/hadoop/hdfs/name/current的时候,请将hadoop的目录权限设为当前用户可写sudo chmod -R a+w /usr/local/hadoop,授予hadoop目录的写权限
(2).当碰到
chown:changing ownership of 'usr/local/hadoop ../logs':operation not permitted
时,可用sudo chown -R grid /usr/local/hadoop来解决,即将hadoop主目录授权给当前grid用户
(3).如果slaves机上通过jps只有TaskTracker进程,没有datanode进程,请查看日志,是不是有“could only be replicated to 0 nodes,instedas of 1”有这样的提示错误,如果有,可能就是没有关闭防火墙所致,服务器和客户机都关闭(sudo ufw disable)后,所有进程启动正常,浏览器查看状态也正常了(ubuntu防火墙关闭)
(4).要在服务器机上把masters和slavs机的IP地址加到/etc/hosts,当然这个不影响start-all.sh启动,只是浏览器jobtacker上找不到节slaves节点
(5).ssh免密码登陆时,注意文件authorized_keys和.ssh目录权限,如果从masters机上scp authorized_keys到slaves机上出现拒绝问题,那就在salves机上也ssh-keygen,这样目录和文件就不会有权限问题了,就可以实现ssh免密码登陆了,或直接将.ssh目录拷过去,在slaves机上新建.ssh目录权限好像和masters机的目录权限不一样
运行正常后,可以用wordcount例子来做一下测试:
bin/hadoop dfs –put /home/test-in input //将本地文件系统上的 /home/test-in 目录拷到 HDFS 的根目录上,目录名改为 input
bin/hadoop jar hadoop-examples-0.20.203.0.jar wordcount input output
#查看执行结果:
# 将文件从 HDFS 拷到本地文件系统中再查看:
$ bin/hadoop dfs -get output output
$ cat output/*
# 也可以直接查看
$ bin/hadoop dfs -cat output/*
如果在reduce过程中出现"Shuffle Error:Exceeded MAX_FAILED_UNIQUE_FETCHES;bailing-out"错误,原因有可能是/etc/hosts中没有将IP映射加进去,还有可能是关于打开文件数限制的问题,需要改vi /etc/security/limits.conf,详情请看:Hadoop常见问题及解决办法
如果hadoop启动时,slave机报连接拒绝错误,即连不上master9000端口,则namenode运行不起来时,可以先确保单机是不是可以正常运行伪分布式模式,可能是因为没有做ssh localhost,也可以查看是不是/etc/hosts文件IP映射有问题,一定注意该机的IP地址是不是唯一映射一个服务器名,不然可能也会出错
1.http://wiki.apache.org/hadoop/ConnectionRefused ;
2.http://ubuntuforums.org/showthread.php?t=1057604 ;
3.http://www.hadoopor.com/thread-1056-1-1.html ;
如果是一个master机和一个slave机,做wordcount测试,是不会报上述错误的,不知道为什么两台slave机后,就报上述错误,解决方案如下(将masters机和其中一台slaves机中的/etc/hosts中masters机的IP映射地址改成服务器的名字,而不是IP地址):
1.http://hi.baidu.com/daodaowuhen/blog/item/b299b486f6c8aea86c811996.html ;
2.http://blog.sina.com.cn/s/blog_6e7e94bc0100pcjw.html ;
如果需要在Eclipse上运行MapReduce程序,需要将hadoop目录下的eclipse插件(hadoop/contrib/eclipse-plugin)拷到eclipse安装目录下的plugins下。此时可以把hadoop的测试例子wordcount从src/examples中拷到eclipse工程中,在open run dialog的arguments中设置好输入和输出参数,然后run as->java application就可以了
如果要run as->run on hadoop,即要在集群上运行MapReduce程序,则需要设置hadoop location,设置好master的namenode和jobtracker的IP及端口号,能正确连到DFS Locations就表明可以分布式运行MapReduce程序了,本人在此过程中,先后遇到以下问题:
1.Connecting to DFS test has encountered a problem
这个原因是因为直接采用hadoop0.20.203.0和相应包下的eclipse插件,此时MapReduce viewer是出现了,但根本连不上DFS,查了很多资料,很多说是因为hadoop下的eclipse插件和eclipse版本不匹配
参考资料1:http://lucene.472066.n3.nabble.com/about-eclipse-plugin-td3047557.html ;
参考资料2:自己动手编译对应hadoop版本的eclipse plugin
按照上面两条解决方案,我选择了第一种,虽然前一种hadoop是0.20.2的版本,但已经有编译好的可以用的eclipse插件,还有o.20.203这个版本是今年5月份出来的,还比较新,问题暴露的还少,而第二种解决方案需要自己配置编译,好像还要用ant命令,这个工具还没用过,所以免得麻烦
2.error:call to failed on local exception:java.io.EOFException
原因如下:eclipse-plugin和Hadoop版本对不上(因为刚开始不想换hadoop版本,就直接把那个插件(hadoop-plugin-0.20.3-snapshot.jar)拷到0.20.203版本里跑了一下,结果报上面的错,后来将hadoop版本换成hadoop0.20.2就好了)
参考资料:http://lucene.472066.n3.nabble.com/Call-to-namenode-fails-with-java-io-EOFException-td2933149.html ;
3.Plug-in org.apache.hadoop.eclipse was unable to load class
org.apache.hadoop.eclipse.launch.HadoopApplicationLaunchShortcut.
可以尝试将终端切到eclipse目录下用./eclipse clean来将以前载过的hadoop插件清除掉,我遇到这个错误后,这样操作后就好了。
参考资料:http://www.cloudobjects.de/2010/11/running-hadoop-jobs-using-eclipse.html ;
上述三种错误,是我在这个过程中遇到的错误,如果遇到类似错误,可以试着用上述方法来排除一下,因为hadoop在搭建的过程中遇到的问题实在千奇百怪,稍微一步有差池,说不准后面运行时就报错,就算报相同错误提示的, 也可能是其它原因导致的,上述只提供其中一种解决方案
相关文章推荐
- Hadoop学习之以伪分布模式部署Hadoop及常见问题
- Hadoop集群搭建过程中的常见问题(一)
- hadoop集群配置常见问题和解决方案
- Hadoop-2.2.0集群部署时live nodes数目不对的问题
- 基于centos7.2最小化环境, cdh manager 及 cdh 集群的部署过程常见问题整理
- jenkins集群测试环境原理、部署及常见问题解决
- jenkins集群测试环境原理、部署及常见问题解决
- hadoop集群安装、常见问题解决
- hadoop常见问题——通过集群外服务器控制HDFS出现的permission denied权限问题
- CentOS搭建Hadoop分布式集群详细步骤和常见问题解决
- Hadoop、Zookeeper、Hbase集群安装配置过程及常见问题(一)准备工作
- rocketmq集群安装部署过程(4.0.0版本)、安装中的常见问题举例
- jenkins-master-slave分布式搭建、使用和集群测试环境原理、部署及常见问题解决
- hadoop & hbase 集群安装&启动常见问题解决
- 基于centos7.2最小化环境, cdh manager 及 cdh 集群的部署过程常见问题整理
- hadoop集群部署注意问题
- hadoop集群部署后,遇到的问题记录
- hadoop部署常见问题
- Hadoop-2.2.0集群部署时live nodes数目不对的问题
- 集群配置虚拟主机及部署Hadoop集群碰到的问题