正文
Hadoop 由众多模块组成,哪一个出错,都会导致 Hadoop 整个系统出现异常。
下面介绍下常见的 Hadoop 异常处理(不定期更新)。
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:java.io.IOException:Incompatible namespaceIDs in /home/hadoop/tmp/dfs/data:namenode namespaceID 39895076;datanode namespaceID=1030326122
原因
NameNode 被重新格式化,DataNode 数据版本与 NameNode 不一致。
解决方案
- 删除 DataNode 所有文件。
- 修改 DataNode 的
dfs/data/current/VERSION
文件与 NameNode 相同。
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:org.apache.hadoop.util.DiskChecker$DiskError Exception:Invalid value for volsFailed:3,Volumes tolerated:0
原因
磁盘损坏。
解决方案
更换硬盘。
Hive 查询时的 FileNotFoundException
原因
文件确实不存在,或者是权限问题导致数据没有正确地写入Hiv的读取路径。
解决方案
设置 dfs.permissions=false
或设置 Hive 读取路径正确的可写权限。
INFO org.apache.hadoop.hdfs.server.datanode.DataNode:writeBlock blk_-8336485569098955809_2093928 received exception java.io.IOException:Permission denied
原因
之前用错误账户启动 Hadoop,导致 HDFS 存储所使用的本地目录被变更,导致目录不可写入,DataNode 无法启动。
解决方案
切换至高权限用户,变更为正确的权限,再重启 DataNode。
FAILED:RuntimeException org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.namenode.SafeModeException):Cannot create directory/tmp/hive-hadoop/hive 2022-02-1219-08-539243815707560010618162-1.Name node is in safe mode.
原因
NameNode 处于安全模式。
解决方案
当 Hadoop 的 NameNode 节点启动时,会进入安全模式阶段。
在此阶段,DataNode 会向 NameNode 上传它们数据块的列表,让 NameNode 得到块的位置信息,并对每个文件对应的数据块副本进行统计。
当最小副本条件满足时,即一定比例的数据块都达到最小副本数,系统就会退出安全模式,而这需要一定的延迟时间。
当最小副本条件未达到要求时,就会对副本数不足的数据块安排DataNode 进行复制,直至达到最小副本数。
而在安全模式下,系统会处于只读状态,NameNode 不会处理任何块的复制和删除命令。
当处于安全模式时,无论是 Hive 作业还是普通的 MapReduce 作业均不能正常启动,使用命令退出安全模式:
hadoop dfsadmin -safemode leave
java.lang.OutOfMemoryError:Java heap space
原因
内存溢出。
解决方案
可以通过增大内存和减少内存消耗两个方面进行调优。
ERROR:org.apache.hadoop.hdfs.server.namenode.LeaseExpiredException:No lease on mp/hive-hadoop /hive2022-03-07_03-00-164306468012546084389462/_tmp.-ext-10001/tmp.000053_1 File does not exist.Holder DFSClient_attempt_202203051238_0516_r_000053_1 does not have any open files.
原因
dfs.datanode.max.xcievers
参数到达上限。
解决方案
增大hdfs-site.xml
的dfs.datanode.max.xcievers
参数。
Error:JAVA HOME is not set.
原因
JAVA_HOME
环境变量缺失。
解决方案
在 $HADOOP_HOME/conf/hadoop-env.sh
文件中设置。
ERROR org.apache.hadoop.hdfs.server.datanode.DataNode:java.io.IOException:Call to…failed on local exception:java.net.NoRouteToHostException:No route to host
原因
有可能是防火墙导致 DataNode 连接不上 NameNode,导致 DataNode 无法启动。
解决方案
关闭防火墙,执行命令:
service iptables stop