猪为什么它运行多个mapreduce进程?

时间:2016-11-18 01:23:01

标签: mapreduce apache-pig

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

PS:B仅在A完成后触发

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

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

代码真的很长,每个都有多个过滤器,一个连接和一个一个具有多个维度的大型GROUP BY。

2 个答案:

答案 0 :(得分:0)

这种行为可能是因为您的纱线容器已满,正如您所说的那样,您拥有大量数据集,因此猪在内部触发地图缩减器,每个reduce任务可能正在谈论整个纱线容器,因此在成功执行1个任务休息任务之后得到执行。您可以使用ambari控制台(gui)或使用命令

检查您的MR工作统计数据
hadoop job -list

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

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

您可以设置mapreduce并行属性,如

SET default_parallel XXX 

其中xxx是您的减速器数量

答案 1 :(得分:0)

您可以将EXPLAIN用于http://localhost:3000作为脚本。您将获得如下输出:

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 ...  

然后,查看view Pig's execution planOptimization Rules,了解调整管道的机会。