溜达
发布于

hdfs使用过程中fsck、report等指令解读

在我们日常使用 hdfs 过程中,经常会用到 report 和 fsck 两个指令查看 hdfs 状态,下面分析下这两个指令究竟为我们展现了哪些信息。

report 命令
当输入 report 指令时对用的 namenode 和 datanode 相关信息输出如下:

NameNode
● Configured Capacity:配置容量,具体指 NameNode 节点的整体空间
● Present Capacity:可用容量,具体指 NameNode 节点的可用空间
● DFS Remaining:Hadoop 文件系统的剩余空间
● DFS Used:Hadoop 文件系统的已用空间
● DFS Used%:Hadoop 文件系统的已用空间百分比
● Replicated Blocks:复制副本的数据块情况,所属细项将详细介绍具体情况
● Under replicated blocks:正在复制副本的数据块数量
● Blocks with corrupt replicas:副本内损坏的数据块数量
● Missing blocks:丢失的数据块数量
● Missing blocks (with replication factor 1):丢失的数据块(带复制因子 1)数量
● Low redundancy blocks with highest priority to recover:最高优先级恢复的低冗余数据块
● Pending deletion blocks:挂起待删除的数据块
● Erasure Coded Block Groups:EC 编码的数据块集群情况,所属细项与复制副本的数据块情况一致


DataNode
● Name:DataNode 节点的具体 IP
● Hostname:DataNode 节点名称
● Rack:机架类型
● Decommission Status:节点运行情况。主要分为 5 类:
● NORMAL :节点正常
● DECOMMISSIONED:节点已停止服务
● DECOMMISSION_INPROGRESS:节点正转变为停止服务状态
● IN_MAINTENANCE :节点处于维护状态
● ENTERING_MAINTENANCE:节点正在转变为维护状态
● Configured Capacity:配置容量,具体指 DataNode 节点的整体空间
● DFS Used:Hadoop 文件系统的已用空间
● Non DFS Used:非 Hadoop 文件系统的已用空间,比如本地存放的数据
● DFS Remaining:Hadoop 文件系统的可用空间
● DFS Used%:Hadoop 文件系统的已用空间百分比
● DFS Remaining%:Hadoop 文件系统的剩余空间百分比
● Configured Cache Capacity:缓存配置容量,具体指 Hadoop 文件系统的缓存空间
● Cache Used:文件缓存已用空间
● Cache Remaining:文件缓存可用空间
● Cache Used%:文件缓存已用空间百分比
● Cache Remaining%:文件缓存可用空间百分比
● Xceivers:DataNode 用于传输数据的线程数
● Last contact:最后心跳连接时间
● Last Block Report:最后数据块汇报时间

总得来看,namenode 更侧重于节点空间使用情况和数据块统计,datanode 的报告则主要为节点文件使用情况及运行状态。

fsck 命令
fsck 指令也可以分为上下部分看。
上半部分:

对应内容已经标注在图示中,包含 blcok 相关属性以及副本数是否充足,此处如过发现大量 block 信息被列出来,则需要检查 repliacte 数量配置是否大于节点数,如果不然则需要进一步查看对应关系。虽然不会因此出现直接问题,但是增加无意义的副本冗余,可能会间接导致磁盘空间紧张等问题。
下半部分:

这里精确记录 block 状态信息。从翻译可以看出如超过副本数的 block、平均副本的 block、低于副本数等。这里状态对应 block 周期的信息,在之前 hdfs block 状态中进行过分析,感兴趣的可以去看下。
重点需要注意的是 miss block 和 corrupt block,分别对应丢失和损坏的块,一般来讲就是分别由程序、物理层面导致的数据损坏。一搬来说都是可以恢复的,前提是 miss block 数量没有达到默认副本数。

评论(2)
  • 溜达
    溜达 回复
    zdsg zdsg 2022-05-15 22:15:01

    您好,看完收益匪浅,解决了最近的一个疑惑,就是 datanode 的 Xceivers 这个属性,从上图得知,是表示 datanode 用于传输数据的线程数,那么这个值具体与什么有关呢,与系统的 core 还是什么相关,还是说是可配置的?

    dfs.datanode.max.transfer.threads 制约关系是这个参数

  • zdsg
    zdsg 回复

    您好,看完收益匪浅,解决了最近的一个疑惑,就是 datanode 的 Xceivers 这个属性,从上图得知,是表示 datanode 用于传输数据的线程数,那么这个值具体与什么有关呢,与系统的 core 还是什么相关,还是说是可配置的?

test