0

Hadoop/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 に答える