EMR 上 Hadoop 作业的 S3 文件的最佳文件大小?

DJE*_*bow 2 hadoop amazon-s3 amazon-web-services amazon-emr emr

我正在尝试确定存储在 S3 中的文件的理想大小,该文件将用于 EMR 上的 Hadoop 作业。

目前我有大约 5-10GB 的大文本文件。我担心将这些大文件复制到 HDFS 以运行 MapReduce 作业的延迟。我可以选择使这些文件更小。

我知道在 MapReduce 作业中使用 S3 作为输入目录时,S3 文件会并行复制到 HDFS。但是会使用单线程将单个大文件复制到 HDFS,还是会将该文件作为多个部分并行复制?另外,Gzip 压缩是否会影响将单个文件分成多个部分?

Joh*_*ein 5

有两个因素需要考虑:

  • 压缩文件不能在任务之间拆分。例如,如果您有一个单独的大型压缩输入文件,则只有一个 Mapper 可以读取它。
  • 使用更多、更小的文件使并行处理更容易,但在为每个文件启动 Map/Reduce 作业时会产生更多开销。因此,文件越少速度越快。

因此,在文件的大小和数量之间存在折衷。推荐的尺寸列在几个地方:

亚马逊EMR FAQ建议:

如果您使用 GZIP,请将文件大小保持在1-2 GB,因为 GZIP 文件无法拆分。

亚马逊EMR最佳实践白皮书建议:

这意味着单个映射器(单个线程)负责从 Amazon S3 获取数据。由于单个线程受限于它在任何给定时间(吞吐量)可以从 Amazon S3 提取多少数据,因此将整个文件从 Amazon S3 读入映射器的过程成为数据处理工作流的瓶颈。另一方面,如果您的数据文件可以拆分,则不止一个映射器可以处理您的文件。此类数据文件的合适大小介于 2 GB 和 4 GB 之间

主要目标是通过并行处理尽可能多的文件来保持所有节点忙碌,而不会引入太多开销。

哦,继续使用压缩。磁盘空间和数据传输时间的节省使其比启用拆分更具优势。