我是Hadoop / Hive的新手。我正在尝试使用hive处理xml文件。经过谷歌搜索一段时间后,我遇到了可用于此目的的xml文件的自定义FileFormat代码。
(以下是自定义xmlinputformat类的源代码:XmlInputFormat.class
我为xmlinputformat类添加了jar,并创建了一个示例表:
create table person (
name string
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\t'
STORED AS INPUTFORMAT 'com.hadoop.xmlparser.XmlInputFormat'
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat';
我尝试从上表中检索数据并收到以下错误:
执行错误,从org.apache.hadoop.hive.ql.exec.MapRedTask返回代码2
以下是jobtracker日志中发现的错误:
java.lang.RuntimeException: java.lang.reflect.InvocationTargetException
at org.apache.hadoop.hive.shims.Hadoop20SShims$CombineFileRecordReader.initNextRecordReader(Hadoop20SShims.java:306)
at org.apache.hadoop.hive.shims.Hadoop20SShims$CombineFileRecordReader.<init>(Hadoop20SShims.java:269)
at org.apache.hadoop.hive.shims.Hadoop20SShims$CombineFileInputFormatShim.getRecordReader(Hadoop20SShims.java:366)
at org.apache.hadoop.hive.ql.io.CombineHiveInputFormat.getRecordReader(CombineHiveInputFormat.java:413)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:371)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)
at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1127)
at org.apache.hadoop.mapred.Child.main(Child.java:264)
Caused by: java.lang.reflect.InvocationTargetException
at sun
针对上述问题的任何解决方案?谢谢!
答案 0 :(得分:0)
我没有使用过这个特殊的InputFormat,但是Hive假设记录是由\ n分隔的。因此,您需要确保您的XML没有\ n。