我正在使用带有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?我想这就是问题所在。 请帮忙
答案 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;