Object Storage에 보관한 CSV 데이터를 CloudHadoop의 Hive External Table로 연동하여 사용하기

Daehyun Park
NAVER CLOUD PLATFORM
5 min readOct 27, 2021

--

본 포스팅에서는 Object Storage에 보관한 CSV 데이타를 Cloud Hadoop에서 제공하는 Hive의 External 테이블로 연동하여 사용하는 방법을 설명합니다.

Cloud Hadoop 클러스터를 이미 생성하였다고 가정하고 진행하도록 하겠습니다.

Hive External 테이블이란?

Hive에서 테이블 생성시, External 키워드로 생성하는 테이블을 가리킵니다. hive External 테이블(‘외부 테이블’) 은 hive.metastore.warehouse.dir 속성이 가리키는 디렉토리에 데이터를 저장하지 않으며, 테이블 생성시 설정한 경로에 데이터를 저장합니다.

외부 테이블은 이미 하둡에 데이터가 있는 데이타를 기반으로 테이블을 만들기 때문에, 스키마만 정해주면 생성할 수 있습니다.

샘플 데이터 구하기

Hive External 테이블 테스트를 진행하기에 앞서 기상청 기상자료개방포털(https://data.kma.go.kr)에서 제공하는 기온 데이타를 샘플 데이타로 이용하고자 합니다.

조건별 통계 검색 조건은 아래와 같이 수행하였습니다.

  • 분류 : 지상
  • 지역/지점 : 서울 또는 부산
  • 요소 : 기온
  • 기간 : “일” 선택 후, “2011년 ~ 2021년”
  • 조건 : “월”과 “일”의 체크박스 체크

그래프 우측 하단의 “csv” 또는 “Excel” 버튼 중에서 “csv” 버튼을 클릭하시면 csv 파일 다운로드가 진행됩니다. “서울” 지역과 “부산” 지역으로 변경하여 서울과 부산의 각각의 기온 데이터를 다운로드 합니다.

다운받은 csv 파일 내용을 확인해 보시면 맨 위에서 부터 헤더 내용이 12줄, 기온 데이타는 13번째 줄부터 시작함을 알 수 있습니다. 참고로, 한글 문자 깨짐 현상은 뒤에서 처리하도록 하겠습니다.

먼저, 불필요한 헤더 부분을 제거합니다.

$ sed 1,12d extremum_20211021101126.csv > data1.csv
$ sed 1,12d extremum_20211020212220.csv > data2.csv

Obeject Storage에 데이타 업로드

테스트를 위해 Object Storage에 “live-test-bucket” 버킷을 생성하였으며, “hivedata” 디렉토리를 생성하여 csv 파일을 업로드하였습니다.

hive External 테이블 생성

Cloud Hadoop클러스터의 edge 서버에 ssh 로그인합니다.

hive 클라이언트 명령어를 이용하여 External 테이블을 생성합니다.

hive External 테이블 생성

weather 테이블이 생성되었으며, SELECT Query를 수행하여 데이타를 확인할 수 있습니다.

한글 문자 깨짐 현상은 기상청에서 제공되는 데이타가 “utf-8”이 아닌 “euc-kr”로 제공되어 발생한 현상입니다. 아래와 같이 Hive External 테이블의 인코딩을 “euc-kr”로 변경하시면 문자 깨짐 현상없이 올바르게 표시됩니다.

인코딩 변경: ‘utf-8’ -> ‘euc-kr’

hive External 테이블 삭제

앞에서 생성한 hive External 테이블(‘weather’)를 삭제해 보겠습니다.

테이블 삭제 수행

삭제된 테이블에 SELECT Query 를 수행하면 에러가 발생하여, 정상적으로 테이블이 삭제되었음을 알 수 있습니다.

혹여 그럴 일이 생기면 안되겠지만, 누군가가 실수로 hive External 테이블을 지우더라도 데이터는 안전합니다.

hive External 테이블을 삭제하더라도 Object Storage의 csv 파일은 삭제되지 않고 보관되어 있음을 확인하실 수 있습니다.

마치며

이번 페이지에서는 Object Storage의 csv 파일을 이용하여 Hive External 테이블을 연동해 보았습니다.

Hive External 테이블을 사용하시는데 도움이 되었으면 좋겠습니다.

# Written by NAVER Cloud, Data Platform 박대현

--

--