那些年,写hive sql时所踩过的坑

本文记述一些本人在用hive时,所遇到的一些大坑小坑,一是防止自己再次落坑,二是避免旁人也掉入进去。文章会不定时更新。

1 注释写在第一行时所报IO错误
-- 这是一段很长很长的hql注释,看看hive能不能运行通过,黄梅时节家家雨,青草池塘处处蛙,有约不来夜过半,闲敲棋子落灯花。
select 'Hello World' from dual

-- 继续写hql注释
union all
select 'Hello Hive' from dual

所报错误

java.io.IOException: Job status not available 
        at org.apache.hadoop.mapreduce.Job.updateStatus(Job.java:334)
        at org.apache.hadoop.mapreduce.Job.getJobState(Job.java:359)
        at org.apache.hadoop.mapred.JobClient$NetworkedJob.getJobState(JobClient.java:296)
        at org.apache.hadoop.hive.ql.exec.mr.HadoopJobExecHelper.progress(HadoopJobExecHelper.java:244)
        at org.apache.hadoop.hive.ql.exec.mr.HadoopJobExecHelper.progress(HadoopJobExecHelper.java:549)
        at org.apache.hadoop.hive.ql.exec.mr.ExecDriver.execute(ExecDriver.java:435)
        at org.apache.hadoop.hive.ql.exec.mr.MapRedTask.execute(MapRedTask.java:137)
        at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:160)
        at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:88)
        at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1645)
        at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1404)
        at org.apache.hadoop.hive.ql.Driver.runInternal(Driver.java:1190)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1055)
        at org.apache.hadoop.hive.ql.Driver.run(Driver.java:1045)
        at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:207)
        at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:159)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:370)
        at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:305)
        at org.apache.hadoop.hive.cli.CliDriver.executeDriver(CliDriver.java:702)
        at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:675)
        at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:615)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at org.apache.hadoop.util.RunJar.run(RunJar.java:221)
        at org.apache.hadoop.util.RunJar.main(RunJar.java:136)

报错原因(猜测):
hive在进行查询的时候,会先将查询结果存储到一个临时表中,临时表的名字是以第一行的来命名的。当第一行是中文注释,并且注释很长的时候,会超出临时表命名长度范围,导致出错。

避免方法:
在hql语句的第一行别写注释,也不能将注释添加到第一行的hql语句后面。

2 hive中 ctrl+C不能 kill job

在hive运行的过程中,采用 ctrl + C 的方法只是退出客户端,hive的job仍在后台运行。要真正kill掉job,需要执行指令 hadoop job -kill job_id 指令。例如:对于Job = job_1467707859270_1000260,可以

hadoop job -kill job_1467707859270_1000260
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值