主要类[org.apache.oozie.action.hadoop.HiveMain]的Hive操作失败,退出代码[40000]

时间:2015-01-30 19:27:34

标签: hadoop hive oozie

我是新手,所以我完全有可能错过一些基本的东西。

我正在尝试运行一个从协调员开始的Oozie工作流程。协调器等待文件显示在目录中。工作流包含运行此脚本的Hive操作:

CREATE external TABLE IF NOT EXISTS daily_dump (
        id bigint,
        creationdate timestamp,
        datelastupdated timestamp,
        data1 string,
        data2 string) LOCATION '/data/daily_dump';

FROM daily_dump d 
INSERT OVERWRITE TABLE mydata_orc 
PARTITION(id, datelastupdated) 
SELECT d.id, d.creationdate, d.datelastupdated, d.data1, d.data2;

DROP TABLE daily_dump;

如果我从hive CLI手动运行脚本,它可以正常工作。

当_SUCCESS文件出现时,工作流程正确启动。它 似乎脚本已经执行了一半,因为我可以从hive CLI看到 表“daily_dump”已创建。我可以在其中看到数据。我检查了hivemetastore.log并没有看到任何错误。

但之后的声明似乎在Oozie中因此错误而死:

2015-01-30 18:04:40,086  WARN HiveActionExecutor:542 - USER[me] GROUP[-]
TOKEN[] APP[guzzler] JOB[0000162-150114210350250-oozie-oozi-W]
ACTION[0000162-150114210350250-oozie-oozi-W@copy_to_mydata] Launcher
ERROR, reason: Main class [org.apache.oozie.action.hadoop.HiveMain], exit
code [40000]

错误40000是什么意思?

我的hive.log显示脚本中的最后一个命令(DROP TABLE),之后没有ERROR记录:

2015-01-30 15:25:05,001 INFO  ql.Driver (Driver.java:execute(1197)) - Starting command:

DROP TABLE daily_dump
2015-01-30 15:25:05,001 INFO  hooks.ATSHook (ATSHook.java:<init>(85)) - Created ATS Hook
2015-01-30 15:25:05,001 INFO  log.PerfLogger (PerfLogger.java:PerfLogBegin(108)) - <PERFLOG method=PreHook.org.apache.hadoop.hive.ql.hooks.ATSHook from=org.apache.hadoop.hive.ql.Driver>
2015-01-30 15:25:05,001 INFO  log.PerfLogger (PerfLogger.java:PerfLogEnd(135)) - </PERFLOG method=PreHook.org.apache.hadoop.hive.ql.hooks.ATSHook start=1422631505001 end=1422631505001 duration=0 from=org.apache.hadoop.hive.ql.Driver>
2015-01-30 15:25:05,001 INFO  log.PerfLogger (PerfLogger.java:PerfLogEnd(135)) - </PERFLOG method=TimeToSubmit start=1422631504958 end=1422631505001 duration=43 from=org.apache.hadoop.hive.ql.Driver>
2015-01-30 15:25:05,001 INFO  log.PerfLogger (PerfLogger.java:PerfLogBegin(108)) - <PERFLOG method=runTasks from=org.apache.hadoop.hive.ql.Driver>
2015-01-30 15:25:05,001 INFO  log.PerfLogger (PerfLogger.java:PerfLogBegin(108)) - <PERFLOG method=task.DDL.Stage-0 from=org.apache.hadoop.hive.ql.Driver>
2015-01-30 15:25:05,095 INFO  log.PerfLogger (PerfLogger.java:PerfLogEnd(135)) - </PERFLOG method=runTasks start=1422631505001 end=1422631505095 duration=94 from=org.apache.hadoop.hive.ql.Driver>

我正在运行oozie-4.0.0,hive-0.13。有人有什么想法吗?

2 个答案:

答案 0 :(得分:2)

我们解决了这个问题。事实证明,Hive运行我的蜂巢脚本很好,但它在/ tmp / hive-yarn中创建临时文件时遇到了麻烦。该目录由首先在此群集中运行其脚本的人拥有。我以我的用户身份运行它,并且没有权限在该目录中写入。

我们如何找到它是通过转到与Hive操作关联的实际Hadoop作业日志。实际错误未正确传播到Hive日志和Oozie日志。 : - (

答案 1 :(得分:0)

如果在创建或删除表时使用数据库名称和表名,则会解决此错误。例如,如果数据库名称是hivetempdb,则使用create语句as- create table hivetempdb.daily_dump(id int); ,并使用drop table use statement作为 DROP表hivetempdb.daily_dump;