2016-11-04 85 views
0

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

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

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

回答

3

有两个因素需要考虑:

  • 压缩文件无法在任务之间拆分。例如,如果您有单个大型压缩输入文件,则只有一个Mapper可以读取它。
  • 使用更多,更小的文件使并行处理更容易,但有更多的开销当启动每个文件的Map/Reduce作业。所以,更少的文件更快。

因此,有一个权衡文件的大小和数量之间。推荐大小列在几个地方:

Amazon EMR FAQ建议:

如果使用的是GZIP,让你的文件的大小1-2 GB因为GZIP文件无法拆分。

Best Practices for Amazon EMR whitepaper的建议:

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

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

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

+0

本白皮书非常完美。我的问题特别是关于从S3复制MapReduce作业。你可以从白皮书中添加这段文字,我会接受答案吗? '这意味着一个单一的映射器(单个线程)负责从亚马逊 S3中获取数据。由于单个线程限制在任何给定时间(吞吐量)可从Amazon S3获取多少数据,因此将整个文件从Amazon S3读入映射程序的过程将成为数据处理工作流程中的瓶颈。 – DJElbow