HDFS 中的文件大小应该是多少才能获得最佳 MapReduce 作业性能

What should be the size of the file in HDFS for best MapReduce job performance

我想将文本文件从外部源复制到 HDFS。让我们假设我可以根据文件的大小合并和拆分文件,文本文件的大小应该是多少才能获得最佳的自定义 Map Reduce 作业性能。大小重要吗?

HDFS 旨在支持非常大的文件而不是小文件。与 HDFS 兼容的应用程序是那些处理大型数据集的应用程序。 这些应用程序只写入一次数据,但会读取一次或多次,并要求以流式传输速度满足这些读取。 HDFS 在 files.In HDFS 架构上支持一次写入多次读取语义,存在块的概念。 HDFS 使用的典型块大小为 64 MB。 当我们将一个大文件放入 HDFS 时,它被分成 64 MB 的块(基于块的默认配置),假设你有一个 1GB 的文件 并且你想将该文件放在 HDFS 中,那么将有 1GB/64MB = 16 split/blocks 这些块将分布在数据节点上 文件拆分的目的是数据的并行处理和故障转移。这些 blocks/chunk 将驻留在不同的 DataNode 上,具体取决于您的 集群配置。

如何分配映射器

映射器的数量取决于 MapReduce 作业中数据的拆分数量。 在典型的 InputFormat 中,它与文件数量和文件大小成正比。 假设您的 HDFS 块配置配置为 64MB(默认大小)并且您有一个 100MB 大小的文件 然后将有 2 个拆分,它将占用 2 个块,然后将根据块分配 2 个映射器,但假设 如果你有 2 个 30MB 大小的文件(每个文件),那么每个文件将占用一个块,映射器将根据该块分配。

所以你不需要分割大文件,但如果你处理的是非常小的文件,那么合并它们是值得的。

这个link将有助于理解

请参阅下文link以获取有关 HDFS 设计的更多详细信息。

http://hadoop.apache.org/docs/r1.2.1/hdfs_design.html