hadoop:如何将reduce的输出收集到java hashmap中

jogvjijk  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(510)

我正在使用hadoop计算单词之间的共现相似度。我有一个由共现单词对组成的文件,看起来像:

a b
a c
b c
b d

我使用的是一种基于图形的方法,将单词视为节点,同时出现的单词之间有一条边。我的算法需要计算所有节点的度。我成功地写了一本书 Map-Reduce 计算总学位的作业,输出以下内容:

a 2
b 3
c 2
d 1

目前,输出被写回一个文件,但我想要的是将结果捕获到一个 java.util.HashMap . i、 那么,你想用这个吗 HashMap 在另一个 Reduce 计算最终相似度的作业。
以下是我的问题:
是否可以在内存中捕获reduce job的结果( List , Map ). 如果是,怎么做?
这是最好的方法吗?如果没有,我该怎么处理?

fxnxkyjh

fxnxkyjh1#

有两种可能:或者从分布式文件系统读取map/reduce任务中的数据。或者直接将其添加到分布式缓存中。我刚在谷歌上搜索了分布式缓存的大小,它可以控制:
“local.cache.size参数控制distributedcache的大小。默认设置为10 gb。”
链接到cloudera博客
因此,如果您将第一个作业的输出添加到第二个作业的分布式缓存中,我认为应该可以。数以万计的条目远未达到千兆字节的范围。
将文件添加到分布式缓存的步骤如下:
要读入Map器:

Path[] uris = DistributedCache.getLocalCacheFiles(context.getConfiguration());
String patternsFile = uris[0].toString();
BufferedReader in = new BufferedReader(new FileReader(patternsFile));

要添加到dbcache:

DistributedCache.addCacheFile(new URI(file), job.getConfiguration());

当你准备第二份工作的时候。
让我知道这是否有用。

相关问题