执行选择查询时,“无法从空字符串创建路径”错误在hive外部表中

时间:2014-01-03 19:00:05

标签: hive

我在蜂巢中创建了一个外部表,让我们说员工。此员工表有3个分区,即国家,年龄和性别。我使用自己的自定义输入格式和serde实现此外部表。在对这个外部表执行select查询时,我得到以下异常。

java.lang.RuntimeException:java.lang.IllegalArgumentException:无法从空字符串创建路径         在org.apache.hadoop.hive.ql.exec.ExecMapper.map(ExecMapper.java:161)         在org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)         在org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:358)         在org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)         在org.apache.hadoop.mapred.Child.main(Child.java:170) 引发者:java.lang.IllegalArgumentException:无法从空字符串创建路径         在org.apache.hadoop.fs.Path.checkPathArg(Path.java:78)         在org.apache.hadoop.fs.Path。(Path.java:90)         在org.apache.hadoop.hive.ql.exec.MapOperator.cleanUpInputFileChangedOp(MapOperator.java:482)         在org.apache.hadoop.hive.ql.exec.Operator.cleanUpInputFileChanged(Operator.java:1372)         在org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:509)         在org.apache.hadoop.hive.ql.exec.ExecMapper.map(ExecMapper.java:143)

另外,检查了serde实现中的“反序列化”方法在执行select查询期间没有被调用,看起来甚至在调用deserialize方法之前就失败了。

你们这些人可以帮忙吗?提前谢谢。

-Sankar

1 个答案:

答案 0 :(得分:0)

这是create table hql。 CREATE EXTERNAL TABLE日志(id INT,类STRING,类型STRING,名称STRING,状态STRING,持续时间STRING,记录STRING,用户STRING,参考STRING,年龄STRING)PARTITIONED BY(loc STRING,env STRING,hour STRING,grp STRING)行格式SERDE'com.main.hive.TxnSerDe'存储为INPUTFORMAT'com.main.hive.TxnInputFormat'OUTPUTFORMAT'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'LOCATION'/ tmp / logs'; 创建表后,我已经更改了分区表,因为它是外部表。     ALTER TABLE日志ADD IF NOT NOT EXISTS PARTITION(loc ='hx',env ='prd',hour ='2014010220',grp ='vertical')LOCATION'hx / prd / 2014010220 / vertical';