我正在使用mongo-hadoop适配器来运行map / reduce作业。一切都很好,除了发布时间和工作所花费的时间。即使数据集非常小,地图时间也是13秒,减少时间是12秒。实际上我已经更改了mapred-site.xml和core-site.xml中的设置。但是map / reduce所花费的时间似乎是不变的。有什么方法可以减少它。 我还从hanborq探索了优化的hadoop分布。他们使用工作池来更快地启动/设置作业。由于hanborq分布不是非常活跃,所以在其他地方是否有任何等价物。它是在4个月前更新的,它基于旧版本的hadoop。
我的一些设置如下: 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>
非常感谢任何帮助。提前谢谢。
答案 0 :(得分:1)
由于心跳导致部分延迟。任务跟踪器心跳到工作跟踪器,让它知道他们还活着,但作为心跳的一部分,他们还宣布了他们有多少开放地图和减少插槽。作为回应,JT为TT执行工作。这意味着当你提交一份工作时,TT只会在心跳加快时完成任务(每2到4秒,给予或接受)。此外,JT(默认情况下)仅在每次心跳期间分配单个任务。这意味着如果您只有一个TT,即使TT有额外的容量,您也只能每2到4秒分配1个任务。
所以,你可以:
缩短两次心跳之间的持续时间。
从TaskTracker更改任务计划程序对每个心跳的工作方式。 mapred.fairscheduler.assignmultiple