본문 바로가기 메뉴 바로가기

티스토리 뷰

개발 노트/Hive

hive json 형태 사용하기

오리지날초이 2014. 9. 15. 09:43

원본출처

http://hochul.net/blog/hive_json_serde/



Hive에서 JSON 형식 데이터 처리 (Json SerDe)Email, RSS Follow

데이터를 주고 받는 형식으로 요즘은 JSON이 거의 대세이다. 따라서, 로그파일 등에 내용도 JSON 형식으로 저장되는 케이스가 많다.

Hadoop에 저장된 JSON 형식의 데이터를 읽고, 쓰야할 경우가 생기며, 이를 위한 모듈 Json Serde 가 많이 공개되어 있다.

그 중에, 아래 github 공개된 소스를 활용한 예제를 공유하고자 한다.

JsonSerde – a read/write SerDe for JSON Data (Serialization/Deserialization module for Apache Hadoop Hive)
https://github.com/rcongiu/Hive-JSON-Serde

 

라이브러리 설치/사용

위 Github에서 가져와서 컴파일 하거나, 컴파일된 JAR(json-serde-1.1.4.jar)  파일을 hive가 설치된 서버에 저장($HIVE_HOME/lib)

해당 라이브러리를 사용하기 위해서는 2가지 방법이 있다.

1. hive에 접속시 jar를 add

hive> ADD JAR /home/daisy/hadoop/hive/lib/json-serde-1.1.4.jar;

2. $HIVE_HOME/conf/hive-site.xml 내 jar 설정

1
2
3
4
<property>
    <name>hive.aux.jars.path</name>
    <value>file:////home/daisy/hadoop/hive/lib/json-serde-1.1.4.jar</value>
</property>

위와 같이 설정후 hive server 재시작하면, 항상 로딩되어 add jar 할 필요가 없음.

 

HIVE Table/Data 생성

1. json 파일 형식

1
2
3
4
5
6
7
8
{
   "statTime":"20130710180059",
   "bizCode":"BOOK",
   "saleInfo":{
      "bookName":"book61",
      "saleCount":749
   }
}

위 형식과 같은 json 파일의 샘플 파일 (sampledata.txt)

2. hive 테이블 생성

1
2
3
4
5
6
7
8
9
10
CREATE TABLE IF NOT EXISTS bookStat
(
    statTime STRING,
    bizCode STRING,
    saleInfo STRUCT <
        bookName:STRING,
        saleCount:INT
    >
)ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
STORED AS TEXTFILE

3. 데이터 로딩

  • 우선 HDFS에 샘플데이터 put

[daisy@daisy]$ hadoop fs -put sampledata.txt  /user/daisy/testdata/sampledata.txt

  • 생성한 테이블에 데이터 로딩
1
2
3
hive> LOAD DATA INPATH '/user/daisy/testdata/sampledata.txt' OVERWRITE INTO TABLE bookStat;
Table default.bookstat stats: [num_partitions: 0, num_files: 1, num_rows: 0, total_size: 1401, raw_data_size: 0]
OK

테이블 생성과 json 포맷의 데이터도 입력이 완료, HIVE 통해 필요한 분석을 하면 된다.

 

HiveQL로 Query 해보기

  • 제대로 로딩 되었다면 전체 카운트가 3360건
1
2
3
4
5
6
hive> SELECT COUNT(*) FROM bookStat;
Total MapReduce CPU Time Spent: 3 seconds 80 msec
OK
3360
Time taken: 34.116 seconds, Fetched: 1 row(s)
hive>
  • JSON 포맷에서 bookName 읽어오기
1
2
3
4
5
6
7
8
9
10
11
12
13
hive> SELECT saleInfo.bookName FROM bookStat WHERE statTime LIKE "2013071018%";  
OK
book1
book59
book92
... 중략 ...
book72
book48
book56
book58
book32
Time taken: 19.687 seconds, Fetched: 60 row(s)
hive>
  • 집계함수 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
hive> SELECT SUM(saleInfo.saleCount) FROM bookStat WHERE saleInfo.bookName="book1";
OK
12568
Time taken: 31.928 seconds, Fetched: 1 row(s)
hive>
hive> SELECT saleInfo.bookName as bn, SUM(saleInfo.saleCount) FROM bookStat GROUP BY saleInfo.bookName ORDER BY bn;
OK
book1   12568
book10  15725
book100 26414
book11  11281
book12  16848
book13  22085
... 중략 ...
book97  18610
book98  18732
book99  11041
Fetched: 100 row(s)
hive>

 


728x90
반응형

'개발 노트 > Hive' 카테고리의 다른 글

hive seq 파일 생성하기  (0) 2014.09.15
Hive CLI 옵션 사용 팁  (0) 2013.07.15
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함