如何在所有映射器上使用相同的数据?

问题描述:

正如我们所知道的那样,映射器的数量是由数据拆分定义的,那么问题就来了,如果我想用MapReduce实现随机森林算法,其中每个映射器都需要所有的数据。在这种情况下我该怎么做?我们可以“重复使用”不同映射器的数据吗?如何在所有映射器上使用相同的数据?

setNumMapTasks可以工作吗?我对这个功能非常困惑,而且我几乎无法找到任何关于它如何对由数据拆分数量决定的自然映射器数量起作用的信息。

非常感谢。

+0

如果你建立一个随机森林,为什么每个映射器都需要所有的数据?您将首先将数据包装到不同的文件中,然后让每个映射器为森林构建一个决策树。 –

Side data是所有映射器共享的数据。您将要作为Job设置的一部分将数据广播到映射器。

这是通过DistributedCachehttps://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/filecache/DistributedCache.html完成的。

这里有一些代码的起点。首先你要共享的文件DistributedCache内通过Job类:

 job.addCacheFile(new URI("<your file location>")); 

在映射器/减速您通过正常的文件系统API访问文件:

File file = new File("<my file name>");