编写猪作业的自定义输出时遇到问题
我基本上想把pig作业执行时间的统计信息写入文件中 我的猪工作准备就绪,正在工作。
我现在如何编写执行时间的统计信息 格式:开始时间,结束时间,(结束开始时间)执行时间
请指导我,如果我尝试用猪或写一个shell脚本,调用java代码方法为我做某事。 提前致谢.. 此致
答案 0 :(得分:0)
执行MR作业时,日志中将显示作业的开始时间,结束时间和已用时间。我不认为使用PIG这样做的方法。但是,如果您了解hadoop计数器,则可以根据需要创建自己的自定义计数器,并将输出实际写入您创建的文件。
https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapred/Counters.html
答案 1 :(得分:0)
如果您使用的是Pig version 0.14
,那么pig脚本所用的时间将被转储到console log
的最后一行,类似这样的
"Pig script completed in 48 seconds and 454 milliseconds (48454 ms)"
但同一时间完成日志将无法在<=0.13 releases
一个选项可能是,您可以在shell脚本中调用您的pig脚本并计算执行时间。这种方法不会给出100%的确切结果,但它会非常接近原始执行时间。
<强> myshell.sh 强>
#!/bin/bash
START_TIME=$(($(date +%s%N)/1000000))
pig -x local mypigscript.pig
END_TIME=$(($(date +%s%N)/1000000))
TOTALMILLSECS=$((($END_TIME-$START_TIME)-1200))
SECS=$((TOTALMILLSECS/1000))
MILLSECS=$((TOTALMILLSECS%1000))
cat > MYOUTPUT.txt <<EOF
STARTTIME:$START_TIME, ENDTIME:$END_TIME, TIMETAKEN:$SECS seconds and $MILLSECS millseconds ($TOTALMILLSECS ms)
EOF
为了交叉验证shell脚本结果,我只是使用下面的pig脚本并在0.14和上面的shell脚本中执行。我没有看到执行时间有太大差异。
<强>输入强>
1,2,3
4,5,6
7,8,8
<强> mypigscript.pig 强>
A = LOAD 'input' USING PigStorage(',') AS (f1,f2,f3);
B = GROUP A BY f1;
C = FOREACH B GENERATE group, COUNT(A);
DUMP C;
上述猪的执行时间为0.14
org.apache.pig.Main - Pig script completed in 48 seconds and 460 milliseconds (48460 ms)
使用shellscript的上述pigcript的执行时间:(输出将存储在MYOUTPUT.txt中)
STARTTIME:1427606934083, ENDTIME:1427606983729, TIMETAKEN:48 seconds and 446 millseconds (48446 ms)
注意:强>
我刚刚提供了一种获取执行时间的方法,您可以根据需要自定义或修改。