Hadoop 蜂巢:每当它触发地图reduce时,它都会给我这个错误;无法从空字符串创建路径";,如何调试?
我正在使用hive 0.10,当我使用时Hadoop 蜂巢:每当它触发地图reduce时,它都会给我这个错误;无法从空字符串创建路径";,如何调试?,hadoop,hive,Hadoop,Hive,我正在使用hive 0.10,当我使用时 hive -e "show tables", hive -e "desc table_name" it works! 但是当我执行类似于hive-e“选择计数(*)的操作时table_name我遇到了下面的异常情况。有什么方法可以调试此问题吗?以前的集群中使用的代码与旧版本的hive相同,而新集群正在抛出此错误。调试此类问题的正确方法是什么,google没有找到任何解决此问题的方法 java.lang.IllegalArgumentExcept
hive -e "show tables", hive -e "desc table_name" it works!
但是当我执行类似于hive-e“选择计数(*)的操作时table_name
我遇到了下面的异常情况。有什么方法可以调试此问题吗?以前的集群中使用的代码与旧版本的hive相同,而新集群正在抛出此错误。调试此类问题的正确方法是什么,google没有找到任何解决此问题的方法
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)
java.lang.IllegalArgumentException:无法从空字符串创建路径
位于org.apache.hadoop.fs.Path.checkPathArg(Path.java:91)
位于org.apache.hadoop.fs.Path.(Path.java:99)
位于org.apache.hadoop.hive.ql.exec.Utilities.getHiveJobID(Utilities.java:382)
位于org.apache.hadoop.hive.ql.exec.Utilities.clearMapRedWork(Utilities.java:195)
位于org.apache.hadoop.hive.ql.exec.ExecDriver.execute(ExecDriver.java:472)
位于org.apache.hadoop.hive.ql.exec.MapRedTask.execute(MapRedTask.java:138)
位于org.apache.hadoop.hive.ql.exec.Task.executeTask(Task.java:138)
位于org.apache.hadoop.hive.ql.exec.TaskRunner.runSequential(TaskRunner.java:57)
位于org.apache.hadoop.hive.ql.Driver.launchTask(Driver.java:1352)
位于org.apache.hadoop.hive.ql.Driver.execute(Driver.java:1138)
位于org.apache.hadoop.hive.ql.Driver.run(Driver.java:951)
位于org.apache.hadoop.hive.cli.CliDriver.processLocalCmd(CliDriver.java:259)
位于org.apache.hadoop.hive.cli.CliDriver.processCmd(CliDriver.java:216)
位于org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:412)
位于org.apache.hadoop.hive.cli.CliDriver.processLine(CliDriver.java:347)
位于org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:706)
位于org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:613)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
在sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)中
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:606)
位于org.apache.hadoop.util.RunJar.main(RunJar.java:208)
失败:执行错误,从org.apache.hadoop.hive.ql.exec.MapRedTask返回代码1我已解决该问题 我查找了日志文件,在我的例子中,该表是一个外部表,引用了位于hdfs上的目录。该目录包含超过300000个文件。因此,在读取文件时,它引发了内存不足异常,可能是因为这个原因,它获取了一个空字符串,并引发了“无法从空字符串创建路径”例外 我尝试使用较小的文件子集,结果成功了
总之,此异常的一个可能原因是内存不足。在我的情况下,设置了一个配置单元属性 在引发异常的.hiverc文件中设置hive.input.format=org.apache.hadoop.hive.ql.io.HiveInputFormat。 此任务的诊断消息: 错误:java.lang.IllegalArgumentException:无法从空字符串创建路径 位于org.apache.hadoop.fs.Path.checkPathArg(Path.java:131) 位于org.apache.hadoop.fs.Path(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(Subject.java:415) 位于org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1566) 位于org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:163)
把它改成下面,它工作了
设置hive.input.format=org.apache.hadoop.hive.ql.io.CombineHiveInputFormat;我遇到了相同的错误。我的
hive.log
文件显示了原因-请参阅下面代码段的第一行,其中一个jar文件URI包含文件://
,没有任何路径:
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\u HOME/conf/HIVE env.sh
文件引起的,其中HIVE\u AUX\u JARS\u PATH
包含对未设置的环境变量的引用
例如:
export HIVE_AUX_JARS_PATH=$EMPTY_ENV_VARIABLE,/opt/cloudera/parcels/CDH/lib/hive/lib/hive-contrib.jar
我遇到了相同的错误。原因对我来说非常不同。使用Spark在Athena中查询“视图”似乎还不受支持。它将引发“无法从空字符串创建路径”异常。