0

我是 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

以上问题有什么解决办法吗??谢谢!!

4

1 回答 1

0

我没有使用过这个特定的 InputFormat,但 Hive 假定记录由 \n 分隔。因此,您需要确保您的 XML 没有 \n。

于 2012-05-15T23:23:36.763 回答