使用Hive转换特征时遇到错误

4 投票
3 回答
10161 浏览
提问于 2025-04-17 17:17

出现了一个错误: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
;

撰写回答