我正在使用Hive0.10,当我这样做
hive -e "show tables", hive -e "desc table_name" it works!
但是当我做类似的事情 hive -e "select count(*) table_name
我得到下面的例外。有什么方法可以调试这个吗?使用旧版本的配置单元在上一个集群中使用相同的代码,而新集群将抛出此错误。什么应该是正确的方式来调试这类问题,没有从谷歌找到任何可以解决问题的方法。
java.lang.IllegalArgumentException: Can not create a Path from an empty string
at org.apache.hadoop.fs.Path.checkPathArg(Path.java:91)
at org.apache.hadoop.fs.Path.<init>(Path.java:99)
at org.apache.hadoop.hive.ql.exec.Utilities.getHiveJobID(Utilities.java:382)
at org.apache.hadoop.hive.ql.exec.Utilities.clearMapRedWork(Utilities.java:195)
at org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:472)
at org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:138)
at org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:138)
at org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
at org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1352)
at org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1138)
at org.apache.hadoop.hive.ql.Driver.run(Driver.java:951)
at org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259)
at org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:412)
at org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:347)
at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:706)
at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:613)
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.main(RunJar.java:208)
失败:执行错误,从org.apache.hadoop.hive.ql.exec.mapredtask返回代码1
3条答案
按热度按时间ubby3x7f1#
我已经解决了这个问题。
我查找了日志文件,在我的例子中,这个表是一个外部表,引用了位于hdfs上的目录。此目录包含超过300000个文件。因此,在读取文件时,它抛出了一个内存不足的异常,可能是因为这个原因,它得到了一个空字符串,并抛出了“不能从空字符串创建路径”异常。
我尝试了一个较小的文件子集,它的工作。
总之,导致此异常的一个可能原因是内存不足。
nmpmafwu2#
在我的案例中,有一个配置单元属性
设置hive.input.format=org.apache.hadoop.hive.ql.io.hiveinputformat;在引发异常的.hiverc文件中。
此任务的诊断消息:错误:java.lang.illegalargumentexception:无法从org.apache.hadoop.fs.path.checkpatharg(path)中的空字符串创建路径。java:131)在org.apache.hadoop.fs.path。java:139)位于org.apache.hadoop.hive.ql.io.hiveinputformat$hiveinputsplit.getpath(hiveinputformat)。java:110)在org.apache.hadoop.mapred.maptask.updateJobWithPlit(maptask。java:463)在org.apache.hadoop.mapred.maptask.runoldmapper(maptask。java:411)在org.apache.hadoop.mapred.maptask.run(maptask。java:347)在org.apache.hadoop.mapred.yarnchild$2.run(yarnchild。java:168)位于java.security.accesscontroller.doprivileged(本机方法)javax.security.auth.subject.doas(主题。java:415)在org.apache.hadoop.security.usergroupinformation.doas(usergroupinformation。java:1566)在org.apache.hadoop.mapred.yarnchild.main(yarnchild。java:163)
将其更改为以下内容后,它可以工作:set hive.input.format=org.apache.hadoop.hive.ql.io.combinehiveinputformat;
7z5jn7bk3#
我也遇到了同样的错误。我的
hive.log
文件显示了原因-请参阅下面代码段的第一行,其中一个jar文件uri包含file://
没有任何路径:在我的例子中,问题是由配置不正确的
$HIVE_HOME/conf/hive-env.sh
文件,在哪里HIVE_AUX_JARS_PATH
包含对未设置的环境变量的引用。例如: