【问题标题】:I met an error when i using hive transform features使用 hive 转换功能时遇到错误
【发布时间】:2013-02-12 21:47:36
【问题描述】:

java.lang.RuntimeException: Hive Runtime Error while closing operators at org.apache.hadoop.hive.ql.exec.ExecMapper.close(ExecMapper.java:226) at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57) at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:436) at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372) at org.apache.hadoop.mapred.Child$4.run(Child.java:255) at java.security.AccessController.doPrivileged(Native Method) at javax.security.auth.Subject.doAs(Subject.java:396) at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1136) at org.apache.hadoop.mapred.Child.main(Child.java:249) Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: [Error 20003]: An error occurred when trying to close the Operator running your custom script. at org.apache.hadoop.hive.ql.exec.ScriptOperator.close(ScriptOperator.java:486) at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:567) at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:567) at org.apache.hadoop.hive.ql.exec.Operator.close(Operator.java:567) at org.apache.hadoop.hive.ql.exec.ExecMapper.close(ExecMapper.java:193) ... 8 more HQL 脚本如下:

SELECT
  TRANSFORM (userid, movieid, rating)
  USING 'python /home/daxingyu930/test_data_mapper2.py'
  AS userid, movieid, rating
;

python脚本很简单,使用\t分割行。

我已经在 Linux 中使用以下 shell 脚本测试了 python 脚本:

cat test_data/u_data.txt | python test_data_mapper2.py

请给我一些关于这个问题的想法,它让我发疯,让我无法入睡。 非常感谢。

【问题讨论】:

    标签: python transform hive


    【解决方案1】:

    在使用您的自定义脚本之前,您应该将您的脚本添加到分布式缓存中。

    例如。

    add file  /home/daxingyu930/test_data_mapper2.py;
    
    SELECT
        TRANSFORM (userid, movieid, rating)
        USING 'python test_data_mapper2.py'
        AS userid, movieid, rating
    ;
    

    【讨论】:

    • 这完全解决了我的问题。我做的一切都是正确的,但由于某种原因,在我的 using 子句中:使用 'python /path/to/file/mapper.py' 我得到了元数据 HiveException。似乎归结为在 using 子句中您不能拥有完整路径。
    【解决方案2】:

    chmod +x test_data_mapper2.py.

    然后从 hiveCl1 运行以下命令 添加文件 /home/daxingyu930/test_data_mapper2.py ;

    【讨论】:

      【解决方案3】:

      您不应在 USING 子句中提供脚本的完整路径。只需使用 python 脚本 (.py) 名称即可。

      【讨论】:

        猜你喜欢
        • 2021-01-24
        • 2023-04-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多