由于某些数据在所有map()
函数之间共享,因此我无法在setup()中生成它们,因为每个setup()
对应于每个map()
函数,我想做的是预先生成一些数据并将其存储在可实现的地方,然后在每个map()
中使用它。
我怎么可能做到?假设我正在使用Mapreduce进行KNN,并且我想使用每个map()
的所有测试数据。我应该在哪里存储这些测试数据,然后在映射器中使用它们?
非常感谢。
您可以将预先计算的数据存储到 HDFS 中,然后将其包含在作业的 DitributedCache 中。
https://hadoop.apache.org/docs/r2.6.2/api/org/apache/hadoop/filecache/DistributedCache.html
分布式缓存中的所有文件(数据、库等)都将复制到每个节点,然后再在其上启动与作业相关的任务。
分布式缓存不仅限于HDFS中的文件,但数据需要从需要它的每个节点获得(就像HDFS一样)。