一 背景
在执行MapReduce时,可能Mapper之间需要共享一些信息,如果信息量不大,可以将其从HDFS加载到内存中,这就是Hadoop分布式缓存机制。
二 分布式缓存的简单应用
例如,统计一个文本的单词在另外一个全量文本中是否存在,如果存在统计单词的数量,下面是Map阶段,将全量文本加载到分布式缓存中。
三 如何使用DistributedCathe
第1步:在main方法中加载共享文件的HDFS路径,路径可以是目录也可以是文件。可以在路径末尾追加“#”+别名,在Map阶段可以使用该别名。
编码如下:
第2步:在Mapper类或Reducer的setup方法中,用输入流获取分布式缓存中的文件。
编码如下:
四 补充
加载到内存发生在Job执行之前,每个从节点各自都缓存一份相同的共享数据。如果共享数据太大,可以将共享数据分批缓存,重复执行作业。