2017-07-25 19 views
2

我有猪脚本,当我从猪(地图减少模式)运行时给出正确的结果,但是当我从crontab计划不按照脚本存储输出。由crontab调度的猪脚本没有给出结果

猪脚本,

a1 = load '/user/training/abhijit_hdfs/id' using PigStorage('\t') as (id:int,name:chararray,desig:chararray); 
a2 = load '/user/training/abhijit_hdfs/trips' using PigStorage('\t') as (id:int,place:chararray,no_trips:int); 
j = join a1 by id,a2 by id; 
g = group j by(a1::id,a1::name,a1::desig);` 
`su = foreach g generate group,SUM(j.a2::no_trips) as tripsum; 
ord = order su by tripsum desc; 
f2 = foreach ord generate $0.$0,$0.$1,$0.$2,$1; 
store f2 into '/user/training/abhijit_hdfs/results/trip_output' using PigStorage(' '); 

crontab的是,

[[email protected] ~]$ crontab -l 
40 3 * * * /home/training/Abhijit_Local/trip_crontab.pig 

请指导。

回答

0

您的crontab正试图将Pig脚本视为可执行文件并直接运行它。相反,您可能需要明确地通过pig命令,如Apache Pig文档Batch Mode中所述。您还可能发现将stdout和stderr输出重定向到某个日志文件很有帮助,以防需要排除故障。

40 3 * * * pig /home/training/Abhijit_Local/trip_crontab.pig 2>&1 > /some/path/to/logfile 

根据PATH环境变量的设置,你可能会发现,有必要指定的pig命令的绝对路径。

40 3 * * * /full/path/pig /home/training/Abhijit_Local/trip_crontab.pig 2>&1 > /some/path/to/logfile 
+0

亲爱的克里斯感谢您的回答,但请详细说明什么是PATH设置,我会在哪里获得绝对路径。 – user8167344

+0

我指的是用于搜索可执行文件的'PATH'环境变量。如果拥有这个crontab的用户已经在'PATH'上拥有'pig'可执行文件,那么你将不需要绝对路径。如果用户在'PATH'上没有'pig',那么你需要将它添加到'PATH'或者使用绝对路径。顺便说一句,我也编辑了答案,添加了一些关于将输出重定向到日志文件的信息。 –

+0

亲爱的克里斯真的很感谢你的指导,我的crontab现在正在工作。 – user8167344