Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 蜂巢:每当它触发地图reduce时,它都会给我这个错误;无法从空字符串创建路径";,如何调试?_Hadoop_Hive - Fatal编程技术网

Hadoop 蜂巢:每当它触发地图reduce时,它都会给我这个错误;无法从空字符串创建路径";,如何调试?

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 0.10,当我使用时

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中查询“视图”似乎还不受支持。它将引发“无法从空字符串创建路径”异常。