Kudu 통합
Kudu 통합 (Kudu Integration)
Apache Kudu는 빠르고 변화하는 데이터에 대한 빠른 분석을 쉽게 만드는 오픈소스 데이터 저장 엔진이에요. Hive 4.0부터 Hive에서 Kudu 테이블에 접근할 수 있어요.
출처: 문서
본문
개요
Apache Kudu는 빠르고 변화하는 데이터에 대한 빠른 분석을 쉽게 만드는 오픈소스 데이터 저장 엔진입니다.
구현
초기 구현은 HIVE-12971에서 Hive 4.0에 추가되었으며 Kudu 1.2+와 함께 동작하도록 설계되었습니다.
구현을 구성하는 두 가지 주요 컴포넌트는 KuduStorageHandler와 KuduPredicateHandler입니다. KuduStorageHandler는 Hive StorageHandler 구현입니다. 이 클래스의 주요 역할은 Hive 테이블을 Kudu 테이블에 매핑하는 관리와 Hive 쿼리 설정입니다. KuduPredicateHandler는 필터 연산을 Kudu로 푸시다운해 더 효율적인 IO를 가능하게 하는 데 사용됩니다.
참고: 초기 구현은 구현을 더 구성 가능하고 성능 좋게 만들기 위한 sub-jiras가 남아 있어 실험적(experimental) 으로 간주됩니다. 현재 기존 Kudu 테이블을 가리키는 외부 테이블만 지원됩니다. 기저 Kudu 테이블의 생성·변경 지원은 HIVE-22021에서 추적됩니다. 또한 UPDATE, UPSERT, DELETE 문 지원 전체는 HIVE-22027에서 추적됩니다.
Hive 설정
Hive를 사용해 Kudu에 대한 쿼리를 실행하려면 Hive 설정에서 하나의 선택 매개변수를 제공할 수 있습니다:
| Hive 설정 | |
|---|---|
hive.kudu.master.addresses.default |
모든 Kudu 마스터 주소의 쉼표로 구분된 목록. 이 값은 주어진 테이블에 대해 kudu.master_addresses 테이블 속성이 설정되지 않은 경우에만 사용됩니다. |
Kudu에 익숙한 사람이라면, 마스터 주소 설정이 Kudu에 연결하는 데 필요한 일반적인 구성 값이라는 것을 알 것입니다. 이 값을 제공하는 가장 쉬운 방법은 hive 명령의 -hiveconf 옵션을 사용하는 것입니다.
hive -hiveconf hive.kudu.master.addresses.default=localhost:7051
테이블 생성
Kudu 테이블에 접근하려면 STORED BY 절과 함께 CREATE 명령을 사용해 Hive 테이블을 만들어야 합니다. HIVE-22021이 완료될 때까지 EXTERNAL 키워드가 필요하며, 이는 기존 Kudu 테이블을 참조하는 Hive 테이블을 만듭니다. 외부 Hive 테이블을 드롭해도 기저 Kudu 테이블은 제거되지 않습니다.
CREATE EXTERNAL TABLE kudu_table (foo INT, bar STRING, baz DOUBLE)
STORED BY 'org.apache.hadoop.hive.kudu.KuduStorageHandler'
TBLPROPERTIES (
"kudu.table_name"="default.kudu_table",
"kudu.master_addresses"="localhost:7051"
);
위 문에서 일반 create table 문과 마찬가지로 일반 Hive 컬럼 이름과 타입 쌍이 제공됩니다. 전체 KuduStorageHandler 클래스 이름을 제공해 Hive가 이 Hive 테이블을 Kudu가 뒷받침한다는 것을 알게 합니다. KuduStorageHandler를 구성하기 위해 여러 TBLPROPERTIES를 제공할 수 있습니다. 가장 중요한 속성은 kudu.table_name으로, Hive가 어떤 Kudu 테이블을 참조해야 하는지 알려줍니다. 또 다른 일반 속성은 kudu.master_addresses로, 이 테이블의 Kudu 마스터 주소를 구성합니다. kudu.master_addresses 속성이 제공되지 않으면 hive.kudu.master.addresses.default 구성이 사용됩니다.
Impala 테이블
Impala은 HiveMetastore에 동일한 스토리지 핸들러 메타데이터로 테이블을 만들기 때문에, Impala DDL로 생성·변경된 테이블은 Hive에서 접근할 수 있습니다. 이는 HIVE-22021이 완료되고 Hive를 통해 전체 DDL 지원이 제공될 때까지 특히 유용합니다. 자세한 내용은 Kudu 문서와 Impala 문서를 참고하세요.
데이터 수집(Ingest)
Apache NiFi나 Apache Spark 같은 도구로 Kudu 테이블에 데이터를 수집하고 Hive로 쿼리하는 것이 일반적인 관행이지만, Hive INSERT 문으로도 Kudu 테이블에 데이터를 삽입할 수 있습니다. 데이터가 삽입될 때 기본 키 제약 문제를 피하기 위해 실제로 Kudu UPSERT 연산이 사용된다는 점에 유의하는 것이 중요합니다. 이를 더 유연하게 만드는 것은 HIVE-22024에서 추적됩니다. 또한 UPDATE와 DELETE 연산은 지원되지 않습니다. 그 기능 활성화는 HIVE-22027에서 추적됩니다.
예제
INSERT INTO kudu_table SELECT * FROM other_table;
INSERT INTO TABLE kudu_table
VALUES (1, 'test 1', 1.1), (2, 'test 2', 2.2);
더 알아보기 (Learn more)
INSERT 등 Hive의 데이터 조작 문에 대한 자세한 내용은 LanguageManual DML 문서를 참고하세요. Kudu 자체에 대한 자세한 내용은 Kudu 공식 문서를 확인해 보세요.