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上的文件下载备份到各个节点供本地使用,也因此,修改本地文件是没有意义的(它只是一个副本)。

猜你喜欢

转载自blog.csdn.net/xqz583722585/article/details/80481149