如何在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中跟踪哪个数据块在哪个数据节点中?的主要内容,如果未能解决你的问题,请参考以下文章