我有 30 多个映射器,每个映射器都使用内存映射的公共(public)查找数据。 在每个映射器中,我必须在设置函数中加载此查找数据。我通过查询和计算 Hbase 表和/或某些 rdbms 数据库来计算此查找数据。由于我在每个映射器中做同样的事情,因此上述常见任务在每个映射器中执行了 30 次。
我是否可以在提交 mapReduce 作业之前计算查找数据并设置某个位置,以便我可以直接从 mappes 获取该值(在内存结构中)。存储在配置等中的某个地方......查找生成是一项繁重的任务,这需要很多时间。
如果它是一个查找文件,我会使用分布式缓存,但它是动态计算的,而不是存储在文件中。
请就此常见问题提出任何解决方案?
最佳答案
你不能生成数据然后存储在 HDFS 中,与分布式缓存链接吗?
您可以使用的另一个技巧(如果您正在使用 JVM 重用和小型集群)是在您的映射器中使查找映射静态化,然后在您的集合中执行非空检查,因此仅计算该任务跟踪器的第一个 map 实例中的数据。
关于hadoop - 跨映射器共享内存数据中的公共(public)查找 : Hadoop,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11034227/