我是新手,所以我完全有可能错过一些基本的东西。
我正在尝试运行一个从协调员开始的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。有人有什么想法吗?
答案 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;