HCatalog 사용법(Usage)

HCatalog 사용법(Usage)

HCatalog는 Hadoop용 테이블 및 스토리지 관리 레이어예요. Pig, MapReduce 같은 서로 다른 데이터 처리 도구가 그리드 상의 데이터를 더 쉽게 읽고 쓸 수 있게 해 줍니다.

출처: 문서

본문

버전 정보(Version information)

HCatalog는 2013년 3월 26일 Apache incubator를 졸업하고 Hive 프로젝트에 합병됐어요. Hive 0.11.0이 HCatalog를 포함하는 첫 번째 릴리스입니다.

개요(Overview)

HCatalog는 Hadoop용 테이블 및 스토리지 관리 레이어로, 서로 다른 데이터 처리 도구(Pig, MapReduce)의 사용자들이 그리드 상의 데이터를 더 쉽게 읽고 쓸 수 있게 해줘요. HCatalog의 테이블 추상화는 HDFS의 데이터를 관계형 뷰로 보여주고, 사용자가 데이터가 어디에 어떤 형식(RCFile 형식, 텍스트 파일, SequenceFile, ORC 파일)으로 저장되어 있는지 걱정하지 않아도 되게 해줍니다.

HCatalog는 SerDe(직렬화-역직렬화)를 작성할 수 있는 모든 형식의 파일 읽기/쓰기를 지원해요. 기본적으로 HCatalog는 RCFile, CSV, JSON, SequenceFile, ORC 파일 형식을 지원합니다. 커스텀 형식을 쓰려면 InputFormat, OutputFormat, SerDe를 제공해야 해요.

HCatalog 아키텍처

HCatalog는 Hive metastore 위에 구축되고 Hive의 DDL을 통합해요. HCatalog는 Pig와 MapReduce용 읽기/쓰기 인터페이스를 제공하고, 데이터 정의 및 메타데이터 탐색 명령을 내리기 위해 Hive의 커맨드라인 인터페이스를 사용합니다.

인터페이스(Interfaces)

Pig용 HCatalog 인터페이스는 Pig의 load와 store 인터페이스를 각각 구현한 HCatLoader와 HCatStorer로 구성돼요. HCatLoader는 데이터를 읽을 테이블을 받고, load 문 바로 뒤에 파티션 필터 문을 붙여 어떤 파티션을 스캔할지 지정할 수 있어요. HCatStorer는 쓸 테이블을 받고, 선택적으로 새 파티션을 만들 파티션 키 명세를 받습니다. STORE 절에서 파티션 키와 값을 지정하면 단일 파티션에 쓸 수 있고, 파티션 키가 저장되는 데이터의 컬럼이면 여러 파티션에 쓸 수 있어요. HCatLoader는 HCatInputFormat 위에, HCatStorer는 HCatOutputFormat 위에 구현됩니다.

MapReduce용 HCatalog 인터페이스인 HCatInputFormat과 HCatOutputFormat은 Hadoop InputFormat과 OutputFormat의 구현이에요. HCatInputFormat은 데이터를 읽을 테이블을 받고 선택적으로 스캔할 파티션을 지정하는 선택 조건(predicate)을 받습니다. HCatOutputFormat은 쓸 테이블을 받고 선택적으로 새 파티션을 만들 파티션 키 명세를 받습니다. setOutput 메서드에서 파티션 키와 값을 지정하면 단일 파티션에 쓸 수 있고, 파티션 키가 저장되는 데이터의 컬럼이면 여러 파티션에 쓸 수 있어요.

참고(Note): Hive 전용 인터페이스는 없어요. HCatalog가 Hive의 metastore를 사용하므로 Hive는 HCatalog 데이터를 직접 읽을 수 있습니다.

데이터는 HCatalog의 CLI로 정의돼요. HCatalog CLI는 MapReduce 실행이 필요 없는 모든 Hive DDL을 지원하므로, 테이블 생성/변경/삭제 등을 할 수 있어요. CLI는 SHOW TABLES, DESCRIBE TABLE 같은 Hive 커맨드라인의 데이터 탐색 부분도 지원합니다. 지원되지 않는 Hive DDL로는 import/export, ALTER TABLEREBUILDCONCATENATE 옵션, CREATE TABLE AS SELECT, ANALYZE TABLE ... COMPUTE STATISTICS가 있어요.

데이터 모델(Data Model)

HCatalog는 데이터를 관계형 뷰로 제공해요. 데이터는 테이블에 저장되고 이 테이블들은 데이터베이스에 둘 수 있어요. 테이블은 하나 이상의 키로 해시 파티셔닝할 수 있는데, 특정 키(또는 키 집합) 값에 대해 그 값을 가진 모든 행을 담은 파티션이 하나씩 존재합니다. 예를 들어 테이블이 날짜로 파티셔닝되고 3일치 데이터가 있다면 테이블에는 파티션이 3개 있습니다. 새 파티션을 추가하거나 기존 파티션을 삭제할 수 있어요. 파티셔닝된 테이블은 생성 시 파티션이 없고, 파티셔닝되지 않은 테이블은 테이블 생성 시 만들어야 하는 기본 파티션이 사실상 하나 있습니다. 파티션을 삭제할 때 읽기 일관성(consistency)은 보장되지 않습니다.

파티션은 레코드를 담아요. 파티션이 생성되면 레코드를 추가, 제거, 갱신할 수 없습니다. 파티션은 다차원적이고 계층적이지 않아요. 레코드는 컬럼으로 나뉘고, 컬럼은 이름과 데이터타입을 가집니다. HCatalog는 Hive와 같은 데이터타입을 지원해요.

데이터 흐름 예시(Data Flow Example)

간단한 데이터 흐름 예시로 HCatalog가 그리드 사용자들이 데이터를 공유하고 접근하는 데 어떻게 도움을 주는지 보여줄게요.

1단계: 데이터를 그리드로 복사

데이터 수집 담당 Joe는 distcp로 데이터를 그리드에 올려요.

hadoop distcp file:///file.dat hdfs://data/rawevents/20100819/data

hcat "alter table rawevents add partition (ds='20100819') location 'hdfs://data/rawevents/20100819/data'"

2단계: 데이터 준비

데이터 처리 담당 Sally는 Pig로 데이터를 정제하고 준비해요.

HCatalog가 없으면 Sally는 데이터가 준비됐다는 걸 Joe에게 수동으로 통보받거나 HDFS를 폴링해야 해요.

A = load '/data/rawevents/20100819/data' as (alpha:int, beta:chararray, ...);
B = filter A by bot_finder(zeta) = 0;
...
store Z into 'data/processedevents/20100819/data';

HCatalog가 있으면 HCatalog가 데이터가 준비됐다는 JMS 메시지를 보내요. 그러면 Pig 잡을 시작할 수 있습니다.

A = load 'rawevents' using org.apache.hive.hcatalog.pig.HCatLoader();
B = filter A by date = '20100819' and by bot_finder(zeta) = 0;
...
store Z into 'processedevents' using org.apache.hive.hcatalog.pig.HCatStorer("date=20100819");

3단계: 데이터 분석

클라이언트 관리 담당 Robert는 Hive로 클라이언트 결과를 분석해요.

HCatalog가 없으면 Robert는 필요한 파티션을 추가하도록 테이블을 변경(alter)해야 해요.

alter table processedevents add partition 20100819 hdfs://data/processedevents/20100819/data

select advertiser_id, count(clicks)
from processedevents
where date = '20100819'
group by advertiser_id;

HCatalog가 있으면 Robert는 테이블 구조를 수정할 필요가 없습니다.

select advertiser_id, count(clicks)
from processedevents
where date = '20100819'
group by advertiser_id;

HCatalog 웹 API

WebHCat은 HCatalog용 REST API예요. (REST는 "representational state transfer"의 약자로, HTTP 동사에 기반한 API 스타일입니다.) WebHCat의 원래 이름은 Templeton이었어요. 자세한 내용은 WebHCat 매뉴얼을 참고하세요.

더 알아보기 (Learn more)

HCatalog는 하둡 생태계의 도구들이 같은 metastore를 공유하면서 데이터를 주고받을 수 있게 해줘요. REST API를 쓰고 싶다면 WebHCat 문서를, 설치 방법은 HCatalog 설치 문서를 참고하세요.