在YARN源码解析(5)-MapReduce中,在数据本地节点分配Task是如何做到的?中,我们介绍了MapReduce如何在block所在的Host上分配Mapper的。
而了解了HDFS Centrailzed Cache以后,我们就有一个疑问了,Mapper的分配,会考虑HDFS Centrailized Cache么?
很遗憾,并没有。具体的Mapper分配流程请看上面提到的那篇文章。
那HDFS Centralized Cache怎么会提升性能呢?
这是因为,在Task运行的时候,会通过DFSClient来读取数据,而DFSClient中会检查,当前Task所在的主机是否存在这个block的Cache,如果有的话,直接从Cache读。
代码很简单,顺着Mapper的InputFormat往下看就找到了。时间关系,这里不在介绍。