optimization - 为 Hadoop 使用 GZip 输入文件时如何优化 S3 的读取性能

标签 optimization hadoop amazon-s3 hadoop-streaming

在我的 Hadoop 流作业的第一步,我的性能非常糟糕:在我看来,映射器从 S3 读取大约 40KB/s - 50KB/s。

从 S3 读取约 100MB 的数据需要一个多小时!

数据的存储方式:S3 存储桶中有数千个 ~5-10KB GZip 文件。

我最近解压了一个 100MB 样本数据集的所有文件,并将其作为单个 GZip 文件上传到同一个 S3 存储桶中,我的任务在 3 分钟内完成(对比之前的 1 小时运行)

受到鼓舞,我解压了一个 2GB 样本数据集的所有文件,并将其作为单个 GZip 文件上传到同一个 S3 存储桶中,我的任务再次花费了 1 个多小时:之后我终止了任务.

我还没有玩过 mapred.min.split.sizemapred.max.split.size,但我需要一些样本值来开始玩.

不过,从我在互联网上阅读的帖子来看,就从 S3 读取数据而言,使用 GZip 输入文件为 Hadoop 流任务处理数 GB 的数据似乎不会产生很多损失。

你能分享一下吗:

  1. 您存储在 S3 上的文件的“blob 大小”以及
  2. 您在每个任务中处理了多少个
  3. 处理这些需要多长时间?

我猜测调整 mapred.min.split.sizemapred.max.split.size 并保持以上 3 个值对 S3 的最佳考虑将使作业执行时间发生了很大变化。

最佳答案

无法并行读取 gzip 文件。通过将所有文件连接成一个巨大的文件并对其进行 gzip 压缩,您造成了瓶颈。通过以压缩文件大小大致相同、不小于 128Mb 且文件数量等于 Hadoop 集群上的缩减器数量的方式连接和单独 gzip 文件,您可以获得最佳性能。

关于optimization - 为 Hadoop 使用 GZip 输入文件时如何优化 S3 的读取性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11316389/

相关文章:

c++ - 使用 -O3 的两个等效函数的公平计时

mysql - 优化嵌套查询

database - HiveQL到HBase

amazon-web-services - 创建或部署新模板时 AWS CloudFormation 重用现有资源

php - 如何在 amazon s3 上获取文件的最后修改/上传时间?

oracle - 将 RDS 数据导出到 S3/Glacier

c++ - 优化从子位掩码生成父位掩码

algorithm - 单链表和双链表删除的时间复杂度是多少?

hadoop - 在 hadoop 容量调度程序中增加用户容量

java - 使用MultithreadMapper时出错