猪脚本问题

时间:2016-07-20 11:06:28

标签: hadoop apache-pig

我正在使用带有Hcatalog的pig从hive外部表加载数据 我使用pig -useHCatalog输入grunt并执行以下操作:

register 'datafu'

define Enumerate datafu.pig.bags.Enumerate('1');

imported_data  = load 'hive external table' using org.apache.hive.hcatalog.pig.HCatLoader() ;


converted_data = foreach imported_data generate name,ip,domain,ToUnixTime(ToDate(dateandtime,'MM/dd/yyyy hh:mm:ss.SSS aa'))as unix_DateTime,date;


grouped = group converted_data by (name,ip,domain);

result = FOREACH grouped {
             sorted = ORDER converted_data BY unix_DateTime;
             sorted2 = Enumerate(sorted);
             GENERATE FLATTEN(sorted2);
};

所有命令都会运行并提供所需的结果。

问题: 我使用名为pigFinal.pig的上述命令创建了一个pig脚本,并在本地文件系统中的本地模式coz脚本中执行了以下命令。

pig -useHCatalog -x local '/path/to/pigFinal.pig';

异常

  

无法生成逻辑计划。嵌套异常:   org.apache.pig.backend.executionengine.ExecException:ERROR 1070:   无法解决datafu.pig.bags.Enumerate使用导入:[,   java.lang。,org.apache.pig.builtin。,org.apache.pig.impl.builtin。] at   org.apache.pig.parser.LogicalPlanBuilder.buildUDF(LogicalPlanBuilder.java:1507)     在   org.apache.pig.parser.LogicalPlanGenerator.func_eval(LogicalPlanGenerator.java:9372)     在   org.apache.pig.parser.LogicalPlanGenerator.projectable_expr(LogicalPlanGenerator.java:11051)     在   org.apache.pig.parser.LogicalPlanGenerator.var_expr(LogicalPlanGenerator.java:10810)     在   org.apache.pig.parser.LogicalPlanGenerator.expr(LogicalPlanGenerator.java:10159)     在   org.apache.pig.parser.LogicalPlanGenerator.nested_command(LogicalPlanGenerator.java:16315)     在   org.apache.pig.parser.LogicalPlanGenerator.nested_blk(LogicalPlanGenerator.java:16116)     在   org.apache.pig.parser.LogicalPlanGenerator.foreach_plan(LogicalPlanGenerator.java:16024)     在   org.apache.pig.parser.LogicalPlanGenerator.foreach_clause(LogicalPlanGenerator.java:15849)     在   org.apache.pig.parser.LogicalPlanGenerator.op_clause(LogicalPlanGenerator.java:1933)     在   org.apache.pig.parser.LogicalPlanGenerator.general_statement(LogicalPlanGenerator.java:1102)     在   org.apache.pig.parser.LogicalPlanGenerator.statement(LogicalPlanGenerator.java:560)     在   org.apache.pig.parser.LogicalPlanGenerator.query(LogicalPlanGenerator.java:421)     在   org.apache.pig.parser.QueryParserDriver.parse(QueryParserDriver.java:188)     ......还有17个

我在哪里需要为pig脚本注册datafu jar?我想这就是问题所在。 请帮忙

2 个答案:

答案 0 :(得分:0)

您必须确保jar文件与您的pigcript位于同一文件夹中,或者确保在注册jar文件时在pigscript中提供了正确的路径。所以在你的情况下

修改此

register 'datafu'

-- If,lets say datafu-1.2.0.jar is your jar file and is located in the same folder as your pigscript then in your pigscript at the top have this
REGISTER datafu-1.2.0.jar 

-- Else,lets say datafu-1.2.0.jar is your jar file and is located in the folder /usr/hadoop/lib then in your pigscript at the top have this
REGISTER /usr/hadoop/lib/datafu-1.2.0.jar

答案 1 :(得分:0)

pig -useHCatalog \
    -x local \
    -Dpig.additional.jars="/local/path/to/datafu.jar:/local/path//other.jar" \ 
    /path/to/pigFinal.pig;

OR

您的猪脚本中的

使用完全限定的路径

register /local/path/to/datafu.jar;