如何在hadoop中跟踪哪个数据块在哪个数据节点中?

Posted

技术标签:

【中文标题】如何在hadoop中跟踪哪个数据块在哪个数据节点中?【英文标题】:How to track which data block is in which data node in hadoop? 【发布时间】:2011-09-16 08:31:54 【问题描述】:

如果一个数据块被复制,它将被复制到哪个数据节点? 是否有任何工具可以显示复制块的位置?

【问题讨论】:

【参考方案1】:

如果您知道文件名,可以通过 DFS 浏览器查找。

进入你的namenode web界面,说“浏览文件系统”并导航到你感兴趣的文件。在页面底部,将有一个文件中所有块的列表,以及每个块的位置那些块的位置。

注意:当您单击 HDFS 文件系统中的实际文件时,它看起来像这样。

或者,您可以运行:

hadoop fsck / -files -blocks -locations

这将报告所有区块及其所有位置。

【讨论】:

谢谢。那非常有帮助。有什么工具可以做同样的事情吗?如果没有,我将使用 fsck 构建一个。 我不知道,但可能有人已经这样做了。另一方面,从 fsck 获取它并不难。经常运行它时要小心,因为我不知道它会给系统带来多少负载。如果您想跟踪哪些更改,您还可以从 fsck 加载初始状态,然后读取数据节点日志 - 但这需要更多编码。【参考方案2】:

CERN 开源了一个不错的工具 - 请参阅博客文章 https://db-blog.web.cern.ch/blog/daniel-lanza-garcia/2016-04-tool-visualise-block-distribution-hadoop-hdfs-cluster

它不仅会显示跨节点的块位置,还会显示这些节点上的磁盘(表格视图):

这个项目的代码可以在这里找到:https://github.com/cerndb/hdfs-metadata

在内部,这个 CERN 的工具使用对 Hadoop 的 API 调用 - 参见例如, https://github.com/cerndb/hdfs-metadata/blob/master/src/main/java/ch/cern/db/hdfs/DistributedFileSystemMetadata.java#L168

因此,如果您计划在多个文件上运行它然后查看综合结果,那么它比使用 cli 工具要快得多。

hdfs fsck / -files -blocks -locations 允许您一次只能查看一个文件。

我们使用这个工具来查看一个巨大的 parquet 表是否在节点和磁盘之间很好地分布,以检查是否由于数据分布缺陷而发生数据处理偏差。

【讨论】:

以上是关于如何在hadoop中跟踪哪个数据块在哪个数据节点中?的主要内容,如果未能解决你的问题,请参考以下文章

hadoop 中文件是怎么存储的

hdfs 查看 datanode 属于 哪个namenode

在哪个节点上编辑 hadoop .xml 文件?

搭建部署Hadoop 之 HDFS

Hadoop中的Namenode故障和恢复

hadoop中输入了多少数据?