【问题标题】:Pig 0.12.0 won't execute shell commands with timezone change using backticksPig 0.12.0 不会使用反引号执行带有时区更改的 shell 命令
【发布时间】:2015-06-23 21:55:52
【问题描述】:

我在亚马逊 EMR 上将 Hue 用于 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. 这有效:输出文件夹 = `/bin/date +%Y%m%d`
  2. 这不起作用:输出文件夹 = `TZ=America/New_York /bin/date +%Y%m%d`

这两个命令都可以在 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] 错误 org.apache.pig.Main - 错误 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
  • 底层外壳: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

【问题讨论】:

  • 它可能不喜欢New_York/bin之间的空格
  • 日期和“+%Y%m%d”之间有一个空格,所以Pig似乎不太可能在shell命令中不使用空格。

标签: bash shell hadoop apache-pig hue


【解决方案1】:

如果我这样做:

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

例如

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

【讨论】:

  • 它在 bash shell 中给我一个错误:日期:非法选项 -- -
  • 我在 Pig 上通过 Hue 运行它。它给出了一个错误:[main] ERROR org.apache.pig.PigServer - 解析期间的异常:解析期间出错。 null 解析失败:null
  • 我是在 Ubuntu 12.04 上完成的,它可能取决于操作系统
  • 您可以查看“date --help”为您提供的内容
  • 您是否尝试添加一些引号和转义引号并使其与 basch -c 一起使用?顺便说一句,您可以在编辑中用 Pig 替换 Hue。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多