繁体   English   中英

Hive:每当它触发一个map时,它会给我这个错误“无法从一个空字符串创建一个路径”,我该怎么调试?

[英]Hive: Whenever it fires a map reduce it gives me this error “Can not create a Path from an empty string”, how do I debug?

我正在使用hive 0.10和我这样做

hive -e "show tables", hive -e "desc table_name" it works!

但是当我做hive -e "select count(*) table_name类的事情时hive -e "select count(*) table_name我得到了下面的例外。有没有办法我可以调试它?相同的代码在以前的集群中使用旧版本的hive和新集群抛出这个错误。什么应该是调试这类问题的正确方法,没有从谷歌找到解决问题的任何东西。

    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)

FAILED:执行错误,从org.apache.hadoop.hive.ql.exec.MapRedTask返回代码1

我已经解决了这个问题。

我查找了日志文件,在我的例子中,该表是一个外部表,指的是位于hdfs上的目录。 该目录包含超过300000个文件。 因此,在读取文件时,它会抛出一个内存不足的异常,可能是因为它得到一个空字符串并抛出“无法从空字符串创建路径”异常。

我尝试使用较小的文件子集并且有效。

底线,导致此异常的一个可能原因是内存不足。

我的情况是,有一个hive属性设置

set hive.input.format = org.apache.hadoop.hive.ql.io.HiveInputFormat; 在.hiverc文件中抛出异常。

此任务的诊断消息:错误:java.lang.IllegalArgumentException:无法在org.apache.hadoop.fs上的org.apache.hadoop.fs.Path.checkPathArg(Path.java:131)中从空字符串创建路径.Path。(Path.java:139)org.apache.hadoop.hive.ql.io.HiveInputFormat $ HiveInputSplit.getPath(HiveInputFormat.java:110)at 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)atg.apache.hadoop.mapred .yarnChild $ 2.run(YarnChild.java:168)位于org.apache.hadoop.security的javax.security.auth.Subject.doAs(Subject.java:415)的java.security.AccessController.doPrivileged(Native Method)。 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包含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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM