Hadoop的分布式缓存系统 Distributed Cache

我们在操作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

  1. DistributedCache.addCacheFile(new Path(args[0]).toUri(), conf);  
2.在每个mapper上使用DistributedCache.getLocalCacheFiles()来获取文件,之后再进行相应的操作:
[java]  view plain copy
  1. DistributedCache.getLocalCacheFiles();   


除了使用API外, 一个更加方便的方法是在命令行 里注明 -files 参数, 用逗号隔开所有要缓存的文件的路径(默认是本地路径).Hadoop会把所有-files 指定的文件放入缓存. 在代码中可以直接用 FileInputStream(new File("Filename.txt"))来读取.

在streaming模式中

hadoop jar hadoop-streaming.jar后加上 -files 参数, 多个文件用逗号分开

在Hive中命令行中:

add file 命令就是利用分布式缓存的.

posted @ 2018-03-05 18:02  爱知菜  阅读(16)  评论(0编辑  收藏  举报