2017-07-18 277 views
0

我使用XML SerDe從XML文件創建一個帶有HIVE(Hive 2.1.1-mapr-1703)的外部表。該文件是來自W3C聯盟的XML exampleHIVE XML SerDe:失敗,出現異常java.io.IOException:java.lang.NullPointerException

這是我的代碼來創建表:

add jar /mapr/localpath/hivexmlserde-1.0.5.3.jar; 
USE my_db; 
CREATE EXTERNAL TABLE frank_books (
category STRING, 
title STRING, 
language STRING, 
year BIGINT 
) 
ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe' 
WITH SERDEPROPERTIES (
"column.xpath.category" = "/book/@category", 
"column.xpath.title" = "/book/title/text()", 
"column.xpath.language" = "/book/title/@lang", 
"column.xpath.year"  = "/book/year/text()" 
) 
STORED AS 
INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat' 
OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' 
LOCATION '/mapr/localpath/database_files/xml_example' 
TBLPROPERTIES (
"xmlinput.start" = "<book category", 
"xmlinput.stop" = "</book>" 
) 

本身的存在是因爲描述語句不會導致錯誤的表:

describe frank_books; 

簡單的SELECT語句像下面的線索到NullPointerException

select * from my_db.frank_books; 

這是輸出:

OK 
Failed with exception java.io.IOException:java.lang.NullPointerException 
Time taken: 1.117 seconds 

任何人都可以幫忙,請給我解釋一下錯誤嗎?

謝謝,弗蘭克

回答

0

可能是MapR的具體?

hive> DROP TABLE IF EXISTS xml_45158949; 
OK 
Time taken: 0.977 seconds 
hive> 
    > CREATE TABLE xml_45158949(
    > category STRING, 
    > title STRING, 
    > language STRING, 
    > year BIGINT 
    >) 
    > ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe' 
    > WITH SERDEPROPERTIES(
    > "column.xpath.category" = "/book/@category", 
    > "column.xpath.title" = "/book/title/text()", 
    > "column.xpath.language" = "/book/title/@lang", 
    > "column.xpath.year"  = "/book/year/text()" 
    > ) 
    > STORED AS 
    > INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat' 
    > OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' 
    > TBLPROPERTIES (
    > "xmlinput.start"="<book category", 
    > "xmlinput.end"="</book>" 
    >); 
OK 
Time taken: 0.243 seconds 
hive> 
    > load data local inpath '/Users/dvasilen/Misc/XML/45158949.xml'  OVERWRITE into table xml_45158949; 
Loading data to table default.xml_45158949 
OK 
Time taken: 0.153 seconds 
hive> 
    > select * from xml_45158949; 
    OK 
cooking  Everyday Italian en 2005 
children Harry Potter en 2005 
web  XQuery Kick Start en 2003 
web  Learning XML en 2003 
Time taken: 0.08 seconds, Fetched: 4 row(s) 
hive> 

似乎爲我工作。

+0

我最初的例子描述了創建**外部表**。我還重現了_dvasilen_描述的內部表的創建。雖然_dvasilien_寫道它在他的設置中起作用,但我得到了同樣的錯誤。這意味着它可能是MapR特定的或與HIVE2有關的,而不是HIVE1.x。有人有** XML-serde和HIVE2 **的經驗嗎? – Frank

+0

FWIW,它在我的設置中是Hive 2 ... $ hive --version Hive 2.1.1 – dvasilen