【问题标题】:How to understand hadoop file size and locality optimization如何理解 hadoop 文件大小和局部性优化
【发布时间】:2015-05-09 15:18:43
【问题描述】:

默认情况下 Hadoop 块大小为 64MB。建议 Hadoop 中的每个文件小于 64MB,这样每个文件都在一个块中。当 map 函数启动时,它可以从一个块中读取文件中的所有数据,而无需额外的数据传输。这样就实现了局部优化。

我的问题是,这条规则是否适用于可以拆分的文件?例如。大多数文本文件,csv 文件。

每个map 函数只处理一个文件的分割。并且默认的文本文件拆分器确保每个拆分都属于一个块。所以我认为对于像 CSV 格式这样的文件,即使它超过 1 个块大小,仍然可以保证局部性优化。

【问题讨论】:

    标签: hadoop


    【解决方案1】:

    你是对的,默认情况下每个Map函数处理一个文件分割,其大小是一个块。

    但是局部优化不能得到保证,因为您可以在数据节点上拥有更多的文件块,然后是该节点上的 Map 槽。例如,您的集群节点存储文件的三个块,但只有两个 Map 槽。在这种情况下,将在本地节点上执行两个 Mapper 进程,在远程节点上执行一个。一个数据块将通过网络传输到远程节点。

    此外,如果您有大量小文件(小于块大小),您仍然可以使用 CombineFileInputFormat 在一次磁盘操作中读取完整的 HDFS 块 (example )。这种方法可以显着提高性能。

    【讨论】:

      【解决方案2】:

      几乎总是建议 HDFS 中的每个文件(远)大于块大小,以增加进程读取完整块的可能性,并减少 NameNode 内存争用。

      HDFS 的默认块大小为 128MB for a while now

      【讨论】:

        猜你喜欢
        • 2010-10-23
        • 1970-01-01
        • 1970-01-01
        • 2016-03-28
        • 1970-01-01
        • 2020-03-20
        • 2010-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多