5

XML データを Hive にロードしようとしていますが、エラーが発生します:

java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: 行 {"xmldata":""} の処理中に Hive ランタイム エラーが発生しました

私が使用したxmlファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book>
  <id>11</id>
  <genre>Computer</genre>
  <price>44</price>
</book>
<book>
  <id>44</id>
  <genre>Fantasy</genre>
  <price>5</price>
</book>
</catalog>

私が使用したハイブクエリは次のとおりです。

1) Create TABLE xmltable(xmldata string) STORED AS TEXTFILE;
LOAD DATA lOCAL INPATH '/home/user/xmlfile.xml' OVERWRITE INTO TABLE xmltable;

2) CREATE VIEW xmlview (id,genre,price)
AS SELECT
xpath(xmldata, '/catalog[1]/book[1]/id'),
xpath(xmldata, '/catalog[1]/book[1]/genre'),
xpath(xmldata, '/catalog[1]/book[1]/price')
FROM xmltable;

3) CREATE TABLE xmlfinal AS SELECT * FROM xmlview;

4) SELECT * FROM xmlfinal WHERE id ='11

2番目のクエリまではすべて問題ありませんが、3番目のクエリを実行するとエラーが発生します:

エラーは次のとおりです。

java.lang.RuntimeException: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error while processing row {"xmldata":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"}
    at org.apache.hadoop.hive.ql.exec.ExecMapper.map(ExecMapper.java:159)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:417)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:332)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:268)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1438)
    at org.apache.hadoop.mapred.Child.main(Child.java:262)
 Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Hive Runtime Error    while processing row {"xmldata":"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"}
    at org.apache.hadoop.hive.ql.exec.MapOperator.process(MapOperator.java:675)
    at org.apache.hadoop.hive.ql.exec

FAILED: Execution Error, return code 2 from org.apache.hadoop.hive.ql.exec.MapRedTask

では、どこが間違っているのでしょうか?また、適切なxmlファイルを使用しています。

ありがとう、シュリー

4

6 に答える 6

4

エラーの理由:

1) case-1 : (あなたのケース) - xml コンテンツは行ごとにハイブに供給されています。

入力 XML:

<?xml version="1.0" encoding="UTF-8"?>
<catalog>
<book>
  <id>11</id>
  <genre>Computer</genre>
  <price>44</price>
</book>
<book>
  <id>44</id>
  <genre>Fantasy</genre>
  <price>5</price>
</book>
</catalog>  

ハイブにチェックイン:

select count(*) from xmltable;  // return 13 rows - means each line in individual row with col xmldata  

エラーの理由:

XML は統一されていない 13 個のピース​​として読み取られています。とても無効な XML

2) case-2 : xml コンテンツは singleString としてハイブにフィードする必要があります - XpathUDFs 構文を参照します:すべての関数は形式に従います: xpath_ (xml_string, xpath_expression_string).* ソース

入力.xml

<?xml version="1.0" encoding="UTF-8"?><catalog><book><id>11</id><genre>Computer</genre><price>44</price></book><book><id>44</id><genre>Fantasy</genre><price>5</price></book></catalog>

ハイブにチェックイン:

select count(*) from xmltable; // returns 1 row - XML is properly read as complete XML.

意味 :

xmldata   = <?xml version="1.0" encoding="UTF-8"?><catalog><book> ...... </catalog>

次に、このように xpathUDF を適用します

select xpath(xmldata, 'xpath_expression_string' ) from xmltable
于 2014-07-08T13:09:50.570 に答える
0

Oracle XML Extensions for Hive を使用して、このように XML で Hive テーブルを作成できます。 https://docs.oracle.com/cd/E54130_01/doc.26/e54142/oxh_hive.htm#BDCUG691

于 2014-12-12T04:34:46.240 に答える
0

最初にファイルをロードして、ファイルへのパスを追加してみてください。これにより、問題が解決されるため、私の場合は解決されます

于 2014-10-14T11:18:10.313 に答える