我正在使用hive 0.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
答案 0 :(得分:4)
我已经解决了这个问题。
我查找了日志文件,在我的例子中,该表是一个外部表,指的是位于hdfs上的目录。该目录包含超过300000个文件。因此,在读取文件时,它会抛出一个内存不足的异常,可能是因为它得到一个空字符串并抛出“无法从空字符串创建路径”异常。
我尝试使用较小的文件子集,但它确实有效。
Bottomline,造成此异常的一个可能原因是内存不足。
答案 1 :(得分:1)
我是我的情况,有一个hive属性设置
此任务的诊断消息: 错误:java.lang.IllegalArgumentException:无法从空字符串创建路径 在org.apache.hadoop.fs.Path.checkPathArg(Path.java:131) 在org.apache.hadoop.fs.Path。(Path.java:139) at org.apache.hadoop.hive.ql.io.HiveInputFormat $ HiveInputSplit.getPath(HiveInputFormat.java:110) 在org.apache.hadoop.mapred.MapTask.updateJobWithSplit(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) at java.security.AccessController.doPrivileged(Native Method) 在javax.security.auth.Subject.doAs(Subject.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;
答案 2 :(得分:1)
我遇到了同样的错误。我的hive.log
文件显示了原因 - 请参阅下面代码段中的第一行,其中一个jar文件URI包含file://
,没有任何路径:
2018-05-03 04:37:43,706 INFO [main]: mr.ExecDriver (ExecDriver.java:execute(309)) - adding libjars: file://,file:///opt/cloudera/parcels/CDH/lib/hive/lib/hive-contrib.jar
2018-05-03 04:38:07,568 WARN [main]: mapreduce.JobResourceUploader (JobResourceUploader.java:uploadFiles(64)) - Hadoop command-line option parsing not performed. Implement the Tool interface and execute your application with ToolRunner to remedy this.
2018-05-03 04:38:07,599 ERROR [main]: exec.Task (SessionState.java:printError(937)) - Job Submission failed with exception 'java.lang.IllegalArgumentException(Can not create a Path from an empty string)'
就我而言,问题是由配置错误的$HIVE_HOME/conf/hive-env.sh
文件引起的,其中HIVE_AUX_JARS_PATH
包含对未设置的环境变量的引用。
例如:
export HIVE_AUX_JARS_PATH=$EMPTY_ENV_VARIABLE,/opt/cloudera/parcels/CDH/lib/hive/lib/hive-contrib.jar