Hadoop中的UDF优化

时间:2013-11-19 11:08:03

标签: performance optimization hadoop apache-pig

我在具有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]

2 个答案:

答案 0 :(得分:0)

观察结果:

  1. 我想你的Windows机器只有一个支持这个VM的磁盘 - 所以你可以在任何时候从磁盘上读取多少数据(并回写溢出)是有限制的。通过增加任务槽,您可以有效地提高磁盘上的读/写需求(以及更多可能的磁盘颠簸)。如果您有多个磁盘备份您的VM(而不是所有虚拟磁盘都在同一个物理磁盘上,我的意思是由不同物理磁盘支持的虚拟磁盘),您可能会看到性能比您已经看到的要高。

  2. 通过添加更多地图位置,您减少了作业跟踪器需要执行的分配波的数量 - 并且每个波都有轮询开销(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 valueNo. of CPU cores - 1