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

How map-reduce works on HDFS vs S3?

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

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

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

请分享您的想法。

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

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

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

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