performance - Hadoop中的UDF优化

标签 performance optimization hadoop apache-pig

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

    相关文章:

    sql - 内连接与何处连接

    algorithm - 您如何称呼描述列表包含重复项程度的列表的属性?

    java - 改变单纯形算法以最小化目标函数而不是最大化

    hadoop - 长期运行的 yarn 应用程序的设计问题

    python - 在python中有效读取没有分隔符的数字矩阵

    c# - 访问 Microsoft.Office.Core.DocumentProperties 的性能问题

    algorithm - 位排列的通用算法

    hadoop - Kryos/Java 序列化程序的 Spark-shell --conf 选项

    java - Hadoop WordCount 示例问题,我需要进行一些性能调整吗?

    c++ - C++ std::unordered_map 与 Kotlin/Java HashMap 的性能对比