【问题标题】:pig why it runs more than one mapreduce process?pig 为什么它运行多个mapreduce 进程?
【发布时间】:2016-11-18 01:23:00
【问题描述】:

我有一个复杂的猪脚本。从它的日志中,我可以看到它依次跨越 2 或 3 个 MR 进程,具体取决于数据量。 (假设是 A 和 B)

PS:只有A完成后才会触发B

这是预期的吗?有没有办法找出我的猪脚本的哪一部分触发了哪个地图减少过程? 我的最终目标是优化 pig 脚本以更快地运行。

我的任务的简单版本如下。这个 Pig 脚本会检查来自不同应用程序的大量日志文件。对于每个日志,它使用正则表达式解析数据并报告流量计数、每小时各种维度的平均响应时间等指标

代码真的很长,并且使用过滤器执行多个 for-each、一个联接和一个具有多个维度的大 GROUP BY。

【问题讨论】:

    标签: mapreduce apache-pig


    【解决方案1】:

    您可以将EXPLAINview Pig's execution plan 用于您的脚本。你会得到这样的输出:

    A = LOAD 'student' AS (name:chararray, age:int, gpa:float);
    
    B = GROUP A BY name;
    
    C = FOREACH B GENERATE COUNT(A.age);
    
    EXPLAIN C;
    -----------------------------------------------
    Logical Plan:
    -----------------------------------------------
    Store xxx-Fri Dec 05 19:42:29 UTC 2008-23 Schema: {long} Type: Unknown
    |
    |---ForEach xxx-Fri Dec 05 19:42:29 UTC 2008-15 Schema: {long} Type: bag
    etc ...  
    
    -----------------------------------------------
    Physical Plan:
    -----------------------------------------------
    Store(fakefile:org.apache.pig.builtin.PigStorage) - xxx-Fri Dec 05 19:42:29 UTC 2008-40
    |
    |---New For Each(false)[bag] - xxx-Fri Dec 05 19:42:29 UTC 2008-39
        |   |
        |   POUserFunc(org.apache.pig.builtin.COUNT)[long] - xxx-Fri Dec 05 
     etc ...  
    
    --------------------------------------------------
    | Map Reduce Plan                               
    -------------------------------------------------
    MapReduce node xxx-Fri Dec 05 19:42:29 UTC 2008-41
    Map Plan
    Local Rearrange[tuple]{chararray}(false) - xxx-Fri Dec 05 19:42:29 UTC 2008-34
    |   |
    |   Project[chararray][0] - xxx-Fri Dec 05 19:42:29 UTC 2008-35
     etc ...  
    

    然后,查看Optimization RulesPerformance Enhancers 寻找调整您的管道的机会。

    【讨论】:

      【解决方案2】:

      这种行为可能是可能的,因为您的纱线容器已满,正如您所说,您有大量数据集,因此猪会在内部触发映射减速器,并且每个减速任务可能正在谈论整个纱线容器,因此在成功执行 1 个任务后休息任务将被执行。您可以使用 ambari 控制台 (gui) 或使用命令检查您的 MR 作业统计信息

      hadoop job -list
      

      或者试试 yarn application -list(hadoop 2.3 及以上版本) 这将显示每个任务分配的所有作业列表和内存大小

      对于您的第二部分问题,即 Pig 脚本优化

      你可以设置mapreduce的并行属性,比如

      SET default_parallel XXX 
      

      xxx 是你的 reducer 数量

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-29
        • 2019-11-21
        • 2020-01-07
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        • 2017-07-25
        • 1970-01-01
        相关资源
        最近更新 更多