我正在使用mongo-hadoop适配器来运行map/reduce作业。一切都很好,除了发布时间和工作所花费的时间。即使数据集非常小,地图时间为13秒,缩短时间为12秒。实际上,我已经更改了mapred-site.xml和core-site.xml中的设置。但映射/缩小所花费的时间似乎是不变的。有什么办法可以减少它吗? 我还探索了从hanborq优化的hadoop分布。他们使用工作人员池来加快作业启动/设置。在其他地方有没有其他的等价物,因为hanborq分布不是很活跃。它是在4个月前更新的,它建立在hadoop的旧版本上。是Hadoop Map减少 - 如何加快作业启动/设置
我的一些设置如下: mapred-site.xml中:
<property>
<name>mapred.child.java.opts</name>
<value>-Xms1g</value>
</property>
<property>
<name>mapred.sort.avoidance</name>
<value>true</value>
</property>
<property>
<name>mapred.job.reuse.jvm.num.tasks</name>
<value>-1</value>
</property>
<property>
<name>mapreduce.tasktracker.outofband.heartbeat</name>
<value>true</value>
</property>
<property>
<name>mapred.compress.map.output</name>
<value>false</value>
</property>
核心的site.xml:
<property>
<name>io.sort.mb</name>
<value>300</value>
</property>
<property>
<name>io.sort.factor</name>
<value>100</value>
</property>
任何帮助将不胜感激。提前致谢。
为什么不使用mongodbs内部mapreduce? Hadoop实际上不适用于这种实时的东西。 –
我也认为没有办法减少hadoop工作延迟 –
我读了很多关于mongodbs内部m/r的低效率,例如:“Mongo M/R只有在你需要简单分组和过滤时才有用,在map和reduce之间进行混洗Hadoop的M/R能够利用所有核心,而MongoDB是单线程的“等等。另外,我的代码需要处理非常大的数据集,而这些数据集大部分将通过hadoops M/R离线处理。然而,在运行时,每当有新用户登录时,我都需要在几秒钟内将他的数据与数百万其他用户的数据进行匹配。 (用例与约会网站类似)。任何关于解决方案的想法都会受到欢迎。 –