在Hadoop中,如何将数据位置用于除HDFS之外的文件系统?

Abh*_*ain 6 hadoop mapreduce amazon-s3 hdfs

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

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

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

即使底层文件系统不是HDFS,Hadoop也能够运行map-reduce作业(即,它可以在其他文件系统上运行,例如Amazon S3).现在,在这种情况下如何计算数据位置?在HDFS的情况下,namenode具有所有块位置信息,并使用该映射器尽可能接近数据生成.但是,在其他文件系统中,没有namenode的概念.然后,Hadoop MapReduce框架(JobTracker和TaskTracker)如何在运行作业时了解数据的位置以应用数据局部性原则?

Roh*_*non 5

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

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