没有合适的资源?快使用搜索试试~ 我知道了~
在hadoop系统运行过程中常见问题解决方法
资源推荐
资源详情
资源评论
手搞 hadoop 最头疼各种各样的问题了,我把自己遇到的问题以及解决办法大致整理一下先,
希望对你们有所帮助。
一、hadoop 集群在 namenode 格式化(bin/hadoop namenode -format)后重启集群会出现如
下
Incompatible namespaceIDS in … :namenode namespaceID = … ,datanode namespaceID=…
错误,原因是格式化 namenode 后会重新创建一个新的 namespaceID,以至于和 datanode 上原
有的不一致。
解决方法:
1.删除 datanode dfs.data.dir 目录(默认为 tmp/dfs/data)下的数据文件
2.修改 dfs.data.dir/current/VERSION 文件,把 namespaceID 修成与 namenode 上相同即可
(log 错误里会有提示)
3.重新指定新的 dfs.data.dir 目录
二、hadoop 集群启动 start-all.sh 的时候,slave 总是无法启动 datanode,并会报错:
… could only be replicated to 0 nodes, instead of 1 …
就是有节点的标识可能重复(个人认为这个错误的原因)。也可能有其他原因,一下解决
方法请依次尝试,我是解决了。
解决方法:
1.删除所有节点 dfs.data.dir 和 dfs.tmp.dir 目录(默认为 tmp/dfs/data 和 tmp/dfs/tmp)下的数
据文件;然后重新 hadoop namenode -format 格式化节点;然后启动。
2. 如 果 是 端 口 访 问 的 问 题 , 你 应 该 确 保 所 用 的 端 口 都 打 开 , 比 如 hdfs://
machine1:9000/ 、 50030 、 50070 之 类 的 。 执 行 #iptables -I INPUT -p tcp –dport 9000 -j
ACCEPT 命 令 。 如 果 还 有 报 错 : hdfs.DFSClient: Exception in createBlockOutputStream
java.net.ConnectException: Connection refused ; 应 该 是 datanode 上 的 端 口 不能访 问 , 到
datanode 上修改 iptables:#iptables -I INPUT -s machine1 -p tcp -j ACCEPT
3.还有可能是防火墙的限制集群间的互相通信。尝试关闭防火墙。/etc/init.d/iptables stop
4.最后还有可能磁盘空间不够了,请查看 df -al
5.我在解决这个问题的时候还有人说:先后启动 namenode、datanode 可以解决这个问题
(本人尝试发现 没用 ,大 家可 以试 试) $hadoop-daemon.sh start namenode ; $hadoop-
daemon.sh start datanode
三、程序执行出现 Error: java.lang.NullPointerException
空指针异常,确保 java 程序的正确。变量什么的使用前先实例化声明,不要有数组越界之
类的现象。检查程序。
四、执行自己的程序的时候,(各种)报错,请确保一下情况:
1.前提都是你的程序是正确通过编译的
2.集群模式下,请把要处理的数据写到 HDFS 里,并且确保 HDFS 路径正确
3.指定执行的 jar 包的入口类名(我不知道为什么有时候不指定也是可以运行的)
正确的写法类似:
$ hadoop jar myCount.jar myCount input output
五、ssh 无法正常通信的问题,这个问题我在搭建篇里有详细提到过。
六、程序编译问题,各种包没有的情况,请确保你把 hadoop 目录下 和 hadoop/lib 目录下的
jar 包都有引入。详细情况也是看搭建篇里的操作。
七 、Hadoop 启 动 datanode 时 出现 Unrecognized option: -jvm 和 Could not create the Java
virtual machine.
在 hadoop 安装目录/bin/hadoop 中有如下一段 shell:
View Code SHELL
1
2
3
4
5
6
CLASS='org.apache.hadoop.hdfs.server.datanode.DataNode'
if [[ $EUID -eq 0 ]]; then
HADOOP_OPTS="$HADOOP_OPTS -jvm server $HADOOP_DATANODE_OPTS"
else
HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS"
fi
$EUID 这里的用户标识,如果是 root 的话,这个标识会是 0,所以尽量不要使用 root 用户
来操作 hadoop 就好了。这也是我在配置篇里提到不要使用 root 用户的原因。
八、如果出现终端的错误信息是:
ERROR hdfs.DFSClient: Exception closing file /user/hadoop/musicdata.txt : java.io.IOException:
All datanodes 10.210.70.82:50010 are bad. Aborting…
还有 jobtracker log 的报错信息
Error register getProtocolVersion
java.lang.IllegalArgumentException: Duplicate metricsName:getProtocolVersion
和可能的一些警告信息:
WARN hdfs.DFSClient: DataStreamer Exception: java.io.IOException: Broken pipe
WARN hdfs.DFSClient: DFSOutputStream ResponseProcessor exception for block
blk_3136320110992216802_1063java.io.IOException: Connection reset by peer
WARN hdfs.DFSClient: Error Recovery for block blk_3136320110992216802_1063 bad
datanode[0] 10.210.70.82:50010 put: All datanodes 10.210.70.82:50010 are bad. Aborting…
解决办法:
1.查看 dfs.data.dir 属性所指的路径是否磁盘已经满了,如果满了则进行处理后再次尝试
hadoop fs -put 数据。
2.如果相关磁盘没有满,则需要排查相关磁盘没有坏扇区,需要检测。
九、如果在执行 hadoop 的 jar 程序时得到报错信息:
java.io.IOException:Type mismatch in key from map: expected
org.apache.hadoop.io.NullWritable, recieved org.apache.hadoop.io.LongWritable
或者类似:
Status : FAILED java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be
cast to org.apache.hadoop.io.Text
那么你需要学习 hadoop 数据类型和 map/reduce 模型的基本知识。我的这篇读书笔记里边中
间部分有介绍 hadoop 定义的数据类型和自定义数据类型的方法(主要是对 writable 类的学习
和了解);和这篇里边说的 MapReduce 的类型和格式。也就是《hadoop 权威指南》这本书
的第四章 Hadoop I/O 和第七章 MapReduce 的类型和格式。如果你急于解决这个问题,我现
在也可以告诉你迅速的解决之道,但这势必影响你以后开发:
确保一下数据的一致:
… extends Mapper…
public void map(k1 k, v1 v, OutputCollector output)…
…
…extends Reducer…
public void reduce(k2 k,v2 v,OutputCollector output)…
…
剩余11页未读,继续阅读
资源评论
稻草人一命
- 粉丝: 2
- 资源: 38
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功