【问题标题】:Pig Script issues猪脚本问题
【发布时间】:2016-07-20 22:23:16
【问题描述】:

我正在使用带有 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:错误 1070: 无法使用导入解析 datafu.pig.bags.Enumerate:[, java.lang., org.apache.pig.builtin., org.apache.pig.impl.builtin.] 在 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 更多

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

【问题讨论】:

    标签: hadoop apache-pig


    【解决方案1】:

    您必须确保 jar 文件与您的 pigscript 位于同一文件夹中,或者在注册 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
    

    【讨论】:

    • 感谢我选择了第一个选项。
    【解决方案2】:
    pig -useHCatalog \
        -x local \
        -Dpig.additional.jars="/local/path/to/datafu.jar:/local/path//other.jar" \ 
        /path/to/pigFinal.pig;
    

    在您的猪脚本中使用完全限定路径

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 2015-07-23
      • 2011-07-25
      相关资源
      最近更新 更多