我在具有8个核心和8 GB RAM的Windows虚拟机上测试了我的UDF。我创建了约2 GB的5个文件,并在修改“mapred.tasktracker.map.tasks.maximum”后运行了Pig脚本。
以下运行时和统计信息:

mapred.tasktracker.map.tasks.maximum = 2
duration = 20 min 54 sec
mapred.tasktracker.map.tasks.maximum = 4
duration = 13 min 38 sec and about 30 sec for task35% better
mapred.tasktracker.map.tasks.maximum = 8
duration = 12 min 44 sec and about 1 min for taskonly 7% better
为什么更改设置时会有这么小的改进?有任何想法吗?约伯分为145个任务。

![4个插槽] [1]

![8个插槽] [2]

最佳答案

几个观察:

  • 我想您的Windows机器只有一个磁盘支持该VM-因此,您一次可以读取磁盘上的数据量(并写回以防溢出)是有限制的。通过增加任务插槽,您可以有效地提高对磁盘的读/写要求(以及更多的磁盘抖动问题)。如果您有多个磁盘来备份您的VM(而不是所有虚拟磁盘都在同一物理磁盘上,那是指由不同物理磁盘备份的虚拟磁盘),则性能可能会比已经看到的提高。
  • 通过添加更多的映射槽,您减少了Job Tracker需要执行的分配波的数量-每个波都有轮询开销(TT轮询作业,JT轮询TT并将新任务分配给空闲插槽)。 2插槽TT和8插槽TT意味着您有145/2 =〜73个分配波(如果所有任务都在相同的时间运行-显然不现实)与145/8 =〜19个波形-则您的分配增加了3倍需要完成的轮询量(所有这些加起来)。
  • 关于performance - Hadoop中的UDF优化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/20069848/

    10-16 01:17