正文

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 不一致。

解决方案

  1. 删除 DataNode 所有文件。
  2. 修改 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.xmldfs.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