6

我们知道 Hadoop 使用数据局部性原则来生成 map-reduce 作业以节省网络带宽。以下是其工作原理的描述:

取自:http ://hadoop-gyan.blogspot.in/

Hadoop 尽最大努力在本地存在数据的节点上运行 map 任务,以优化网络和节点间通信延迟。由于输入数据被分割成块并馈送到不同的映射任务,因此希望将馈送到该映射任务的所有数据在单个节点上可用。由于 HDFS 仅保证大小等于其块大小 (64M) 的数据存在于一个节点上,建议/提倡拆分大小等于 HDFS 块大小,以便映射任务可以利用此数据本地化。

Hadoop 能够运行 map-reduce 作业,即使底层文件系统不是 HDFS(即它可以在其他文件系统上运行,例如 Amazon 的 S3)。现在,在这种情况下如何考虑数据局部性?在 HDFS 的情况下,namenode 具有所有块位置信息,并使用该映射器生成尽可能靠近数据的位置。但是,在其他文件系统中没有名称节点的概念。那么,Hadoop MapReduce 框架(JobTracker 和 TaskTracker)如何在运行作业时学习数据的位置以应用数据局部性原则?

4

1 回答 1

5

正如您所提到的,像 S3 这样的文件系统不需要 namenonde 来运行。在这种情况下,数据局部性优化不可用。

参考:http ://wiki.apache.org/hadoop/AmazonS3

于 2013-11-24T03:23:19.177 回答