복붙노트

[HADOOP] Cloudera에 serde로 JSON 파일로드하기

HADOOP

Cloudera에 serde로 JSON 파일로드하기

이 가방 구조로 JSON 파일을 사용하려고합니다.

{
   "user_id": "kim95",
   "type": "Book",
   "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.",
   "year": "1995",
   "publisher": "ACM Press and Addison-Wesley",
   "authors": [
      {
         "name": "null"
      }
   ],
   "source": "DBLP"
}
{
   "user_id": "marshallo79",
   "type": "Book",
   "title": "Inequalities: Theory of Majorization and Its Application.",
   "year": "1979",
   "publisher": "Academic Press",
   "authors": [
      {
         "name": "Albert W. Marshall" 
      },
      {
         "name": "Ingram Olkin"
      }
   ],
   "source": "DBLP"
}

하이브에 대한 JSON 데이터를로드하기 위해 serde를 사용하려고했습니다. 나는 여기에서 본 두 가지 방법을 따랐다 : http://blog.cloudera.com/blog/2012/12/how-to-use-a-serde-in-apache-hive/

이 코드로 :

CREATE EXTERNAL TABLE IF NOT EXISTS serd (
           user_id:string, 
           type:string, 
           title:string,
           year:string,
           publisher:string,
           authors:array<struct<name:string>>,
           source:string)       
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION '/user/hdfs/data/book-seded_workings-reduced.json';

나는이 오류가있어 :

error while compiling statement: failed: parseexception line 2:17 cannot recognize input near ':' 'string' ',' in column type

나는 alson이 버전을 시도 : https://github.com/rcongiu/Hive-JSON-Serde

다른 오류가 발생했습니다.

Error while processing statement: FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Cannot validate serde: org.openx.data.jsonserde.JsonSerde

어떤 생각?

또한 '저자'의 '이름'필드에 대한 쿼리를 만들기 위해 이와 같은 JSON을 사용하는 대안이 무엇인지 알고 싶습니다. 그것이 돼지이든 하이브이든간에?

이미 "tsv"파일로 변환했습니다. 그러나 필자 필자의 컬럼은 튜플이기 때문에이 파일에서 테이블을 만들면 Hive를 사용하여 'name'에 대한 요청을 만드는 방법을 알 수 없다. "tsv"변환 스크립트를 변경해야합니까? 또는 Hive 나 Pig에 어떤 대안이 있습니까?

해결법

  1. ==============================

    1.Hive는 JSON을 지원하지 않습니다. 따라서 하이브에서 JSON을 사용하려면 다음과 같은 세 번째 부분 항아리를 사용해야합니다. https://github.com/rcongiu/Hive-JSON-Serde

    Hive는 JSON을 지원하지 않습니다. 따라서 하이브에서 JSON을 사용하려면 다음과 같은 세 번째 부분 항아리를 사용해야합니다. https://github.com/rcongiu/Hive-JSON-Serde

    create table 문에 몇 가지 문제가 있습니다. 다음과 같이 보입니다.

    CREATE EXTERNAL TABLE IF NOT EXISTS serd ( 
    user_id string,type string,title string,year string,publisher string,authors array<string>,source:string)
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    LOCATION...
    

    사용중인 JSON 레코드는 다음과 같이 한 줄에 각 레코드를 유지합니다.

    {"user_id": "kim95", "type": "Book", "title": "Modern Database Systems: The Object Model, Interoperability, and Beyond.", "year": "1995", "publisher": "ACM Press and Addison-Wesley", "authors": [{"name":"null"}], "source": "DBLP"} 
    {"user_id": "marshallo79", "type": "Book", "title": "Inequalities: Theory of Majorization and Its Application.", "year": "1979", "publisher": "Academic Press","authors": [{"name":"Albert W. Marshall"},{"name":"Ingram Olkin"}], "source": "DBLP"}
    

    GIT에서 프로젝트를 다운로드 한 후에는 create table 문을 실행하기 전에 하이브 세션에이 jar를 추가해야하는 jar 파일을 생성 할 프로젝트를 컴파일해야합니다.

    희망은 도움이된다. ... !!! !!!

  2. ==============================

    2.jar를 추가하면 사용할 수없는 세션에만 추가되고 마지막으로 오류가 발생합니다. Hive 및 Map Reduce 경로에서 모든 노드에로드 된 JAR을 아래 위치와 같이 가져 와서 HIVE 및 Map Reduce 구성 요소가 호출 될 때마다이를 선택합니다.

    jar를 추가하면 사용할 수없는 세션에만 추가되고 마지막으로 오류가 발생합니다. Hive 및 Map Reduce 경로에서 모든 노드에로드 된 JAR을 아래 위치와 같이 가져 와서 HIVE 및 Map Reduce 구성 요소가 호출 될 때마다이를 선택합니다.

    참고 :이 경로는 클러스터에 따라 다릅니다.

  3. from https://stackoverflow.com/questions/25149700/loading-json-file-with-serde-in-cloudera by cc-by-sa and MIT license