map-reduce 如何在 HDFS 与 S3 上工作?

Posted

技术标签:

【中文标题】map-reduce 如何在 HDFS 与 S3 上工作?【英文标题】:How map-reduce works on HDFS vs S3? 【发布时间】:2015-02-18 06:08:03 【问题描述】:

我一直试图了解在 HDFS 与 S3 上执行 map-reduce 作业的不同之处。有人可以解决我的问题吗:

通常 HDFS 集群不仅面向存储,而且还包含执行 MR 作业的马力;这就是为什么作业被映射到几个数据节点并减少到几个数据节点的原因。确切地说,映射(过滤等)是在本地对数据进行的,而归约(聚合)是在公共节点上进行的。

这种方法在 S3 上是否有效?据我了解,S3 只是一个数据存储。 hadoop 是否必须从 S3 复制整个数据,然后在本地运行 Map(过滤器)和 reduce(聚合)?或者它遵循与 HDFS 完全相同的方法。如果前一种情况成立,在 S3 上运行作业可能比在 HDFS 上运行作业慢(由于复制开销)。

请分享你的想法。

【问题讨论】:

【参考方案1】:

S3 的性能比 HDFS 慢,但它提供了其他功能,例如存储桶版本控制和弹性以及其他数据恢复方案(Netflix 使用使用 S3 的 Hadoop 集群)。

理论上,在拆分计算之前,需要确定输入文件的大小,因此 hadoop 本身在 S3 之上有一个文件系统实现,它允许更高层不知道数据源。 Map-Reduce 针对每个输入目录调用通用文件列表 API 以获取目录中所有文件的大小。

亚马逊 EMR 有一个特殊版本的 S3 文件系统,可以将数据直接流式传输到 S3,而不是缓冲到中间本地文件,这可以使其在 EMR 上更快。

【讨论】:

【参考方案2】:

如果您在 EC2 中有一个 Hadoop 集群,并且您在 S3 数据上运行 MapReduce 作业,是的,数据将被流式传输到集群中以运行该作业。正如您所说,S3 只是一个数据存储,因此您无法将计算带到数据中。这些非本地读取可能会导致处理大型作业的瓶颈,具体取决于数据的大小和集群的大小。

【讨论】:

正在检查我过去的个人资料,刚刚看到这个:p

以上是关于map-reduce 如何在 HDFS 与 S3 上工作?的主要内容,如果未能解决你的问题,请参考以下文章

AWS EMR 性能 HDFS 与 S3

AWS EMR性能HDFS与S3

Nutch 1.x:如何使用 s3a 代替 HDFS?

hadoop:深度剖析hdfs原理

如何在 spark scala 中重命名 S3 文件而不是 HDFS

如何将文件从 S3 复制到 Amazon EMR HDFS?