我们知道Hadoop使用数据位置原则来生成map-reduce作业以节省网络带宽。以下是对其工作原理的说明:
取自:http://hadoop-gyan.blogspot.in/
Hadoop尽力在数据所在的节点上运行map任务 本地存在以优化网络和节点间 通信延迟。由于输入数据被分成多个部分并被馈送 对于不同的地图任务,希望将所有数据馈送到 该映射任务在单个节点上可用。由于HDFS仅保证 大小等于其块大小(64M)的数据将出现在一个上 建议/建议将分割大小等于HDFS 块大小,以便map任务可以利用此数据 定位。
即使底层文件系统不是HDFS,Hadoop也能运行map-reduce作业(即,它可以在其他文件系统上运行,例如亚马逊的S3)。现在,在这种情况下如何计算数据位置?在HDFS的情况下,namenode具有所有块位置信息,并使用该映射器尽可能接近数据生成。但是,在其他文件系统中,没有namenode的概念。然后,Hadoop MapReduce框架(JobTracker和TaskTracker)如何在运行作业时了解数据的位置以应用数据位置原理?
答案 0 :(得分:5)
正如您所提到的,像S3这样的文件系统不需要运行namenonde。在这种情况下,数据位置优化不可用。