2014-09-15 2 views
3

Hadoop/Hive를 처음 사용했습니다. 나는 XML 입력으로 하이브 스크립트를 만들고 싶다. 그래서 serde를 얻으려면 this 링크가 있습니다. 패키지에는 항아리가 들어 있으며 Hive 스크립트에 사용됩니다.Hive XML Serde - NULLPOINTEREXCEPTION

이 내가 하이브 문을 실행하고있는 방법입니다 ..

[[email protected] xml]$ hive 

Logging initialized using configuration in jar:file:/home/biadmin/hive/lib/hive-common-0.13.1.jar!/hive-log4j.properties 

hive> add jar /home/biadmin/scripts/hivexmlserde-1.0.0.0.jar;        
Added /home/biadmin/scripts/hivexmlserde-1.0.0.0.jar to class path 
Added resource: /home/biadmin/scripts/hivexmlserde-1.0.0.0.jar 

hive> create external table if not exists xmltest (id varchar(50), name varchar(50), type varchar(50), dependency varchar(50), values varchar(50)) 
    > ROW FORMAT SERDE 'com.ibm.spss.hive.serde2.xml.XmlSerDe' 
    > WITH SERDEPROPERTIES (
    > "column.xpath.id"="/recs/rec/id/text()", 
    > "column.xpath.name"="/recs/rec/name/text()", 
    > "column.xpath.type"="/recs/rec/type/text()", 
    > "column.xpath.dependency"="/recs/rec/dependency/text()", 
    > "column.xpath.values"="/recs/rec/values/text()" 
    >) 
    > STORED AS 
    > INPUTFORMAT 'com.ibm.spss.hive.serde2.xml.XmlInputFormat' 
    > OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.IgnoreKeyTextOutputFormat' 
    > TBLPROPERTIES (
    > "xmlinput.start"="<Par as", 
    > "xmlinput.end"="</Par>" 
    >); 
OK 
Time taken: 0.126 seconds 

hive> load data local inpath '/home/biadmin/scripts/xml/playcontent.xml' into table xmltest; 
Copying data from file:/home/biadmin/scripts/xml/playcontent.xml 
Copying file: file:/home/biadmin/scripts/xml/playcontent.xml 
Loading data to table default.xmltest 
Table default.xmltest stats: [numFiles=3, numRows=0, totalSize=1842, rawDataSize=0] 
OK 
Time taken: 0.807 seconds 

hive> select * from xmltest; 
OK 
Failed with exception java.io.IOException:java.lang.NullPointerException 
Time taken: 0.305 seconds 

hive> 

I는 다음과 사용하려고 오전 XML ...

<Par as="val"> 
    <recs> 
     <rec> 
      <id>servicedescription</id> 
      <name>Description</name> 
      <type>textbox</type> 
      <dependency>1</dependency> 
      <values>1</values> 
     </rec> 
     <rec> 
      <id>contentlist</id> 
      <name>Content File/s</name> 
      <type>selectmul</type> 
      <dependency>1</dependency> 
      <values>1</values> 
     </rec> 
     <rec> 
      <id>seek</id> 
      <name>Seek</name> 
      <type>checkbox</type> 
      <dependency>1</dependency> 
      <values>1</values> 
     </rec> 
    </recs> 
</Par> 

는 사람이 어디 오전 말해 주시겠습니까 내가 잘못 가고있어? 어떤 도움을 주시면 감사하겠습니다.

+0

테이블 정의에 오타가 있습니까? a); 선택하기 전에 위치가 테이블 속성 전에 필요하다고 생각합니다 – shainnif

+0

아 ... 누락 된 ")"은 복사 붙여 넣기 실수였습니다. 죄송합니다. 나는 "위치"를 움직이려고 노력했다. 하지만, 예외가 발생했습니다 ... "실패 : ParseException 라인 6 : 0 'WITH'near/'/ home/biadmin/scripts/xml' '" " – StackAddict

+0

그 외에도 xmltest 테이블은 나는 하이브 껍질에 들어간다. 하지만 질의를하면 예외가 발생합니다 ... "실패 : RuntimeException MetaException (message : java.lang.ClassNotFoundException 클래스 com.ibm.spss.hive.serde2.xml.XmlSerDe not found)".. 하이브에 jar 파일을 추가했습니다. . 이 예외가 오는 이유는 무엇입니까 ?? 모든 아이디어 – StackAddict

답변

0

CREATE 문의 column.xpath.<your attribute-name> 속성 값으로 사용해보십시오.

"column.xpath.id"="Par/recs/rec/id/text()", 
"column.xpath.name"="Par/recs/rec/name/text()", 
"column.xpath.type"="Par/recs/rec/type/text()", 
"column.xpath.dependency"="Par/recs/rec/dependency/text()", 
"column.xpath.values"="Par/recs/rec/values/text()" 

본 수정은 귀하에게 도움이 될 것입니다.

관련 문제