2013-02-27 31 views
2

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分割線。

我與後續的shell腳本測試的Python腳本在Linux中:

cat test_data/u_data.txt | python test_data_mapper2.py 

普萊斯給我關於這個問題的一些想法,它讓我瘋狂,讓我睡不着。 非常感謝。

回答

5

在使用您的自定義腳本之前,您應該將腳本添加到分佈式緩存中。

例如。

add file /home/daxingyu930/test_data_mapper2.py; 

SELECT 
    TRANSFORM (userid, movieid, rating) 
    USING 'python test_data_mapper2.py' 
    AS userid, movieid, rating 
; 
+0

這就很好地解決了我的問題。我一切正常,但由於某種原因,我使用了使用條款:使用'python /path/to/file/mapper.py'我得到元數據HiveException。看來,它歸結爲在使用條款中,你不能有完整的路徑。 – Paul 2013-12-10 18:28:00

0

chmod + x test_data_mapper2.py。

然後從hiveCl1運行下面的命令 添加文件/home/daxingyu930/test_data_mapper2.py;

0

您不應在USING子句中給出腳本的完整路徑。只需使用python腳本(.py)名稱即可。