本文汇总了 HDFS 使用时的常见问题。
现象描述:在整体运行正常的HDFS集群中,重启了NameNode服务,发现NameNode重启时间特别久(大于10分钟),一直处于加载FsImage和EditsLog文件中,在此期间NameNode一直是“safeMode on ”状态。
原因剖析:因为NameNode启动过程中加载FsImage和EditsLog会消耗较多的内存,且NameNode只有加载完最新的FsImage和之后所有的EditLog文件之后,才会离开安全模式。
解决方案:建议在HDFS的配置文件中调大NameNode HeapSize,加速元数据文件的加载过程。
现象描述:使用fsck命令查看hdfs文件系统的健康状态时,提示Missing Blocks或Corrupted Blocks。
原因剖析:当有DataNode服务停止、磁盘损坏、或异常操作等情况下都会导致数据丢失。
解决方案:如果是有DataNode服务停止了,请将DataNode重新启动下。 如果是磁盘损坏或异常操作导致数据丢失,需要人工恢复,您可以通过hdfs fsck / -files
命令扫描损坏的文件,导出文件列表,删除后重新上传。
现象描述:NameNode节点数据目录占用磁盘空间大,发现有大量的Editslog文件。
原因剖析:查看Secondary NameNode的健康状态,发现Secondary NameNode服务不正常,导致了Editslog文件没有及时合并。服务不正常很可能是内存不够导致的。
解决方案:适当调节Secondary NameNode的HeapSize,使其正常启动。
现象描述:集群外无法读、写、删HDFS数据
原因剖析:HDFS客户端访问HDFS时候,从NameNode获取元数据信息中包含了DataNode地址,该地址默认是内网ip,集群外与内网ip无法通讯则无法读写删HDFS数据
解决方案:通过专线、VPN等方式将集群外客户端与集群内网的网络打通;或将HDFS DataNode绑定公网ip,并将dfs.client.use.datanode.hostname配置为true,此时返回的DataNode地址为主机名,配置HDFS客户端的/etc/hosts将主机名映射到公网ip即可。