使用Hive转换特征时遇到错误
出现了一个错误:java.lang.RuntimeException: Hive运行时错误,关闭操作时出错
。这个错误是在执行一些操作时发生的,具体是在关闭某个操作的时候出问题了。下面是错误的详细信息:
错误发生在以下几个地方:
- 在
org.apache.hadoop.hive.ql.exec.ExecMapper.close
的第226行 - 在
org.apache.hadoop.mapred.MapRunner.run
的第57行 - 在
org.apache.hadoop.mapred.MapTask.runOldMapper
的第436行 - 在
org.apache.hadoop.mapred.MapTask.run
的第372行 - 在
org.apache.hadoop.mapred.Child$4.run
的第255行 - 在
java.security.AccessController.doPrivileged
这个本地方法中 - 在
javax.security.auth.Subject.doAs
的第396行 - 在
org.apache.hadoop.security.UserGroupInformation.doAs
的第1136行 - 在
org.apache.hadoop.mapred.Child.main
的第249行
这个问题的根本原因是:org.apache.hadoop.hive.ql.metadata.HiveException: [错误 20003]: 尝试关闭运行你自定义脚本的操作时发生了错误。
具体出错的地方包括:
- 在
org.apache.hadoop.hive.ql.exec.ScriptOperator.close
的第486行 - 在
org.apache.hadoop.hive.ql.exec.Operator.close
的第567行(出现了多次) - 在
org.apache.hadoop.hive.ql.exec.ExecMapper.close
的第193行
接下来是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
请给我一些建议,这个问题让我很头疼,甚至无法入睡。非常感谢!
3 个回答
1
在使用的地方,你不需要写出脚本的完整路径。只需要写上你的 Python 脚本(.py 文件)的名字就可以了。
3
首先,运行这个命令:chmod +x test_data_mapper2.py。
然后,在 hiveCl1 上执行下面的命令:add file /home/daxingyu930/test_data_mapper2.py ;
9
在使用你自己写的脚本之前,你应该把这些脚本放到分布式缓存里。
比如:
add file /home/daxingyu930/test_data_mapper2.py;
SELECT
TRANSFORM (userid, movieid, rating)
USING 'python test_data_mapper2.py'
AS userid, movieid, rating
;