我在具有8个内核和8 GB RAM的Windows虚拟机上测试我的UDF。我创建了5个2 GB左右的文件,并在修改“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 task
35% better
mapred.tasktracker.map.tasks.maximum = 8
duration = 12 min 44 sec and about 1 min for task
only 7% better
为什么在更改设置时会有这么小的改进?有任何想法吗?约伯分为145项任务。
![4个插槽] [1]
![8个插槽] [2]
答案 0 :(得分:0)
观察结果:
我想你的Windows机器只有一个支持这个VM的磁盘 - 所以你可以在任何时候从磁盘上读取多少数据(并回写溢出)是有限制的。通过增加任务槽,您可以有效地提高磁盘上的读/写需求(以及更多可能的磁盘颠簸)。如果您有多个磁盘备份您的VM(而不是所有虚拟磁盘都在同一个物理磁盘上,我的意思是由不同物理磁盘支持的虚拟磁盘),您可能会看到性能比您已经看到的要高。
通过添加更多地图位置,您减少了作业跟踪器需要执行的分配波的数量 - 并且每个波都有轮询开销(TT轮询作业,JT轮询TT并分配新任务免费插槽)。一个2槽TT对8槽TT意味着你有145/2 = 73个分配波(如果所有任务在相同的时间运行 - 显然不现实)vs 145/8 = ~19波 - 这是一个~3倍的增加需要进行的民意调查(这一切都加起来)。
答案 1 :(得分:0)
mapred.tasktracker.map.tasks.maximum
配置将由任务跟踪器同时运行的最大映射任务数。单个节点一次可以运行多少任务有一个实际的硬件限制。因此,当你不断增加这个数字时,收益就会减少。
例如,假设tasktracker节点有8个核心。假设除了tasktracker之外的进程正在使用4个核心。这为mapred任务留下了4个核心。因此,您的任务时间会从mapred.tasktracker.map.tasks.maximum
= 1
提升到4
,但之后,它会保持静态,因为其他任务只会等待。事实上,如果你增加太多,争用和上下文切换可能会使它变慢。此参数的recommended value为No. of CPU cores - 1