복붙노트

[HADOOP] 복잡한 Json 데이터를 하이브로 가져 오기

HADOOP

복잡한 Json 데이터를 하이브로 가져 오기

작은 숟가락 먹이주기, 복잡한 json을 하이브로 가져 오는 법. {item-id ":"item-1 "}, {"item-id ":"item-2 "} 형식의 Json 파일 : {"some-headers ":" ...]}. 덤불 아래에 밭을 놓으려는 하이브. 현재 Json 파일 크기는 200MB를 초과하지 않지만 덤프 이후 곧 GB에 도달합니다. 다른 가능한 방법은 크게 감사하겠습니다.

해결법

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

    1.HiveSerDe를 구현하여 JSON을 하이브로 가져올 수 있습니다.

    HiveSerDe를 구현하여 JSON을 하이브로 가져올 수 있습니다.

    이 링크는 샘플 구현의 역할을합니다.

    https://github.com/rcongiu/Hive-JSON-Serde

    이 링크를 참조 할 수도 있습니다.

    JSON 데이터에서 HIVE 테이블을 어떻게 만들 수 있습니까?

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

    2.엔드 - 투 - 엔드 솔루션 게시. JSON을 하이브 테이블로 변환하는 단계별 절차 :

    엔드 - 투 - 엔드 솔루션 게시. JSON을 하이브 테이블로 변환하는 단계별 절차 :

    1 단계) 이미없는 경우 maven 설치

    > $ sudo apt-get install maven

    2 단계) 이미 설치하지 않았다면 git 설치

    > sudo git clone https://github.com/rcongiu/Hive-JSON-Serde.git

    3 단계) $ HOME / HIVE-JSON Serde 폴더로갑니다.

    4 단계) serde 패키지 만들기

    > sudo mvn -Pcdh5 클린 패키지

    5 단계) serde 파일은    $ HOME / Hive-JSON-Serde / json-serde / target / json-serde-1.3.7-SNAPSHOT-jar-with-dependencies.jar

    6 단계) 하이브에 종속 ​​항아리로 serde 추가

     hive> ADD JAR $HOME/Hive-JSON-Serde/json-serde/target/json-serde-1.3.7- SNAPSHOT-jar-with-dependencies.jar;
    

    7 단계) $ HOME / books.json에 json 파일 생성 (예)

    {"value": [{"id": "1","bookname": "A","properties": {"subscription": "1year","unit": "3"}},{"id": "2","bookname":"B","properties":{"subscription": "2years","unit": "5"}}]}
    

    8 단계) 하이브에 tmp1 테이블 만들기

     hive>CREATE TABLE tmp1 (
          value ARRAY<struct<id:string,bookname:string,properties:struct<subscription:string,unit:string>>>   
    )
    ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
    WITH SERDEPROPERTIES ( 
        'mapping.value' = 'value'   
    ) 
    STORED AS TEXTFILE;
    

    9 단계) json에서 tmp1 테이블로 데이터로드

    >LOAD DATA LOCAL INPATH '$HOME/books.json' INTO TABLE tmp1;
    

    10 단계), tmp1 분해 작업을 수행 할 tmp2 테이블을 생성합니다.이 중간 단계는 다중 레벨 json 구조를 여러 행으로 나누는 것입니다 참고 : JSON 구조가 단순하고 단일 레벨이면이 단계를 피하십시오.

    hive>create table tmp2 as 
     SELECT *
     FROM tmp1
     LATERAL VIEW explode(value) itemTable AS items;
    

    11 단계) 하이브 테이블을 만들고 tmp2 테이블에서 값을로드합니다.

    hive>create table books as 
    select value[0].id as id, value[0].bookname as name, value[0].properties.subscription as subscription, value[0].properties.unit as unit from tmp2;
    

    12 단계) 드롭 tmp 테이블

    hive>drop table tmp1;
    hive>drop table tmp2;
    

    13 단계) 하이브 테이블을 테스트합니다.

    hive>select * from books;
    

    산출:

    ID 이름 구독 단위

    1 B 1 년 3

    2 B 2 년 5

  3. from https://stackoverflow.com/questions/15051016/import-complex-json-data-to-hive by cc-by-sa and MIT license