map-reduce如何在HDFS和S3上运行?

时间:2015-02-18 06:08:03

标签: amazon-s3 mapreduce hdfs bigdata emr

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

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

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

请分享您的想法。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

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