Hadoop学习笔记--DistributedCache
mapreduce api的不同版本对于实现DistributedCache略有差异。
1.DistributedCache.addCacheFile(new URI("文件在HDFS中的位置"), conf);
这里需要注意:首先,conf指Configuration;其次,这句话必须写在Job job=new Job(conf,"作业名")之前!!
2.Path[] files=DistributedCache.getLocalCacheFiles(context.getConfiguration());
获得此Configuration的所有缓存文件本地地址,我们不需要管本地地址是什么,拿来用就行了。(最后解释原理)
这里有个大坑:getLocalCacheFiles返回的是本地副本的地址,而getCacheFiles返回的是HDFS文件地址,所以普通Java I/O是读不到的!
多说一句,旧版api使用JobConf获得缓存文件。
3.使用各个文件的地址读写文件即可,即基本java I/O
DistributedCache原理:
所谓缓存,就是将HDFS上的文件下载备份到各个节点供本地使用,也因此,修改本地文件是没有意义的(它只是一个副本)。