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

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

【问题讨论】:

    标签: hadoop replication


    【解决方案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 表是否在节点和磁盘之间很好地分布,以检查是否由于数据分布缺陷而发生数据处理偏差。

    【讨论】:

      猜你喜欢
      • 2018-07-13
      • 2012-09-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-11
      • 2012-06-22
      • 2018-06-22
      • 2012-04-29
      相关资源
      最近更新 更多