主题思想:
hadoop distributedcache的作用将文件分发到各个结点本地磁盘保存,并且用完后并不会被立即清理的,而是专门的一个线程根据文件大小限制(local.cache.size设定,默认是10G)
和文件/目录数目(mapreduce.tasktracker.local.cache.numberdirectories默认是是10000)上限周期性进行清理(默认60s,mapreduce.tasktracker.distributedcache.checkperiod控制)
保存到本地的使用对于public级别的文件(当权限设定最后一个其他用户可执行权限x的时候)
会被所有用户共享,只会下载一次,所有用户即可使用,如果最后一个其他用户无权限,则是private私有的,只有该用户的作业能重用.
public的时候,本地会保存在公共目录 ${mapred.local.dir}/taskTracker/distcache
private的时候,本地会保存在私有目录${mapred.local.dir}/taskTracker/${user}
有两点注意:
1、mapreduce.tasktracker.local.cache.numberdirectories,mapreduce.tasktracker.distributedcache.checkperiod参数并没有提供在相应的XML文件配置,而是在源码设置,对应的类TrackerDistributedCacheManager
2、老版本hadoop-0.20.2的distributedcache的清理机制较简单,每次下载缓存文件的时候发现大小超过10G,则进行清理工作,清理当前没有作业正使用的本地缓存文件,而且应该也是没有public,private机制的,在源代码没看到。
具体见代码:
public static Path getLocalCache(URI cache, Configur