Pig 0.12.0不会使用反引号执行时区更改的shell命令

时间:2015-06-23 21:55:52

标签: bash shell hadoop apache-pig hue

我正在亚马逊EMR上使用Hue for PIG脚本。我想进行一个shell调用,将特定时区的日期转换为一个变量,我将用它来定义一个输出文件夹路径,用于将输出写入。最终我想使用if else fi循环来获取一周中的特定日期,因此将在命令的不同位置提及时区。

示例脚本

ts = LOAD 's3://testbucket1/input/testdata-00000.gz' USING PigStorage('\t');
STORE ts INTO 's3://testbucket1/$OUTPUT_FOLDER' USING PigStorage('\t');

Hue中的Pig参数定义:

  1. 这有效:OUTPUT FOLDER =`/ bin / date +%Y%m%d`
  2. 这不起作用:OUTPUT FOLDER =`TZ = America / New_York / bin / date +%Y%m%d`
  3. 这两个命令在bash shell中完美执行。但是第二个命令给出了以下错误:

      

    2015-06-23 21:43:42,901 [main] INFO org.apache.pig.tools.parameters.PreprocessorContext - 执行命令:TZ = America / Phoenix / bin / date +%Y%m%d   2015-06-23 21:43:42,913 [main] ERROR org.apache.pig.Main - ERROR 2999:意外的内部错误。执行shell命令时出错:TZ = America / Phoenix / bin / date +%Y%m%d。命令退出,退出代码为126

    From the GNU manual:如果找到命令但不可执行,则返回状态为126。

    如何解决此问题?

    配置详情:

    • AMI版本:3.7.0
    • Hadoop发行版:Amazon 2.4.0
    • 应用:Hive 0.13.1,Pig 0.12.0,Impala 1.2.4,Hue
    • 底层shell:bash
    • 用户:hadoop(使用Pig时使用Bash)

    如果您需要任何澄清,请对此问题发表评论。我会根据需要更新它。

    EDIT: Under the hood, Pig calculates the value by executing "bash -c exec (command)" and assigning it to the variable, where (command) is whatever we put as a value for the variable in Hue

1 个答案:

答案 0 :(得分:1)

如果我这样做:

date --date='TZ="America/Los_Angeles"' '+%Y%m%d'
20150624

e.g。

%default date_dir `date --date='TZ="America/Los_Angeles"' '+%Y%m%d'`;