我一直试图了解在HDFS与S3上执行map-reduce作业的不同之处。有人可以解答我的问题:
HDFS集群通常不仅面向存储,还包含执行MR作业的功能;这就是为什么作业被映射到几个数据节点上并且减少了几个。确切地说,映射(过滤器等)是在本地对数据进行的,而减少(聚合)是在公共节点上完成的。
这种方法是否与S3相同?据我了解,S3只是一个数据存储。 hadoop是否必须从S3复制整数数据然后在本地运行Map(过滤器)和减少(聚合)?或者它遵循与HDFS完全相同的方法。如果前一种情况属实,则在S3上运行作业可能比在HDFS上运行作业慢(由于复制开销)。
请分享您的想法。
答案 0 :(得分:1)
如果您在EC2中有一个Hadoop集群,并且您在S3数据上运行MapReduce作业,那么数据将被流式传输到集群中以运行该作业。正如您所说,S3只是一个数据存储,因此您无法将计算带入数据。这些非本地读取可能会导致处理大型作业的瓶颈,具体取决于数据大小和群集大小。
答案 1 :(得分:1)
S3的性能比HDFS慢,但它提供了其他功能,如存储桶版本控制和弹性以及其他数据恢复方案(Netflix使用S3使用Hadoop集群)。
理论上,在拆分计算之前,需要确定输入文件的大小,因此hadoop本身在S3之上具有文件系统实现,这允许更高层不依赖于数据源。 Map-Reduce针对每个输入目录调用通用文件列表API,以获取目录中所有文件的大小。
Amazons EMR有一个特殊版本的S3文件系统,它可以直接将数据流式传输到S3,而不是缓冲到中间本地文件,这可以使它在EMR上更快。