Hadoop常见错误之HDFS
1,Datanode启动失败错误
现象
在启动Datanode时, /var/log/hadoop-hdfs/hadoop-cmf-hdfs-DATANODE-hadoopserver06.log.out日志文件中有如下错误:
Initialization failed for Block pool <registering> (Datanode Uuid unassigned) service to hadoopserver02/192.168.22.150:8022. Exiting.
ExitCodeException exitCode=1: du: 无法访问"/data/dfs/dn/current/BP-15450043-192.168.22.158-1464844718994/current/finalized/subdir75/subdir189/blk_1078705451_5004348.meta": 输入/输出错误
du: 无法访问"/data/dfs/dn/current/BP-15450043-192.168.22.158-1464844718994/current/finalized/subdir75/subdir189/blk_1078705451": 输入/输出错误
du: 无法访问"/data/dfs/dn/current/BP-15450043-192.168.22.158-1464844718994/current/finalized/subdir75/subdir69/blk_1078674719": 输入/输出错误
at org.apache.hadoop.util.Shell.runCommand(Shell.java:543)
at org.apache.hadoop.util.Shell.run(Shell.java:460)
at org.apache.hadoop.fs.DU.run(DU.java:190)
at org.apache.hadoop.fs.DU.<init>(DU.java:70)
at org.apache.hadoop.fs.DU.<init>(DU.java:95)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.BlockPoolSlice.<init>(BlockPoolSlice.java:135)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeImpl.addBlockPool(FsVolumeImpl.java:818)
at org.apache.hadoop.hdfs.server.datanode.fsdataset.impl.FsVolumeList$2.run(FsVolumeList.java:405)
分析过程
用root用户登录Datanode节点,进入“/data/dfs/dn/current/BP-15450043-192.168.22.158-1464844718994/current/finalized/subdir15/subdir1”目录,
是文件系统损坏了。
解决方法
猜测可能是因为文件系统损坏了,而导致有些数据块不能正常访问。需要执行fsck命令修复文件系统。 由于执行fsck之前,需要先umount对应的挂载点,
而我这个Datanode节点损坏文件夹挂在根目录下,所以我这里先reboot Datanode节点。
在reboot后,有如下提示信息:
1直接卸载
[root@localhost /]# umount /data1/img
2 提示被占用,使用强制卸载
[root@localhost /]# umount -f /data1/img
3、使用umount -f,问题依旧。使用fuser命令,先确认有那些进程在占用该目录
[root@localhost /]# fuser -cu /data1/img
按照提示,输入root用户密码,并执行如下命令:
fsck -y /dev/mapper/vg_cdhnode12_lv_root
执行完之后,重新reboot机器,问题解决。但是/data/dfs/dn/current/BP-15450043-192.168.22.158-1464844718994/current/finalized/subdir15/subdir1
目录下的blk_1074725217和blk_1074725217_985023.meta文件被删除了,不知这个文件删除是否会影响数据的完整性。如果按照Datanode的复制原则,
我设置了3个复制因子,应该这个block的数据存储在另外两个Datanode节点中。