我们在操作hadoop时会写很多jar文件, 或者使用streaming的时候会写很多python脚本, 当集群开始运行任务时需要把这些jar文件和python脚本分发到具体执行的每个节点上去, 这个过程中用的是什么框架呢?
就是Hadoop的 Distributed Cache系统
Distributed Cache系统还可以用于map端的join, 两个结果集join, 如果其中一个结果集size很小, 就可以把该结果集直接缓存到每个datanode的内存里去, 使hadoop集群任务运行效率大大提高.
以下小字为转载部分:
Hadoop有一个叫做分布式缓存(distributed cache)的机制来将数据分发到集群上的所有节点上。它通常用来分发所有mapper需要的包含“background”数据的文件。例如你使用Hadoop来分类文档,你可能会有一个关键字的列表,你将使用distributed cache来保证所有mapper能够获得这些keywords("background data")。
操作步骤:
1.将数据分发到每个节点上:
[java] view plaincopy
- DistributedCache.addCacheFile(new Path(args[0]).toUri(), conf);
[java] view plain copy
- DistributedCache.getLocalCacheFiles();
除了使用API外, 一个更加方便的方法是在命令行 里注明 -files 参数, 用逗号隔开所有要缓存的文件的路径(默认是本地路径).Hadoop会把所有-files 指定的文件放入缓存. 在代码中可以直接用 FileInputStream(new File("Filename.txt"))来读取.
在streaming模式中
hadoop jar hadoop-streaming.jar后加上 -files 参数, 多个文件用逗号分开
在Hive中命令行中:
add file 命令就是利用分布式缓存的.