ACID 시맨틱스를 사용하는 트랜잭션은 Dataproc Metastore의 Apache Hive Metastore에서 지원됩니다. 자세한 내용은 Hive 트랜잭션을 참조하세요. Hive 3에서는 기본적으로 이러한 트랜잭션이 사용 설정됩니다.
구성
트랜잭션 지원을 사용 설정하려면 서버 및 클라이언트 측 구성을 설정해야 합니다.
서버 측 구성
다음 서버 측 구성은 Dataproc Metastore에서 서비스를 만드는 동안 기본적으로 설정됩니다. 키 및 값 재정의를 Metastore 구성 재정의 아래에 입력하여 이를 재정의하도록 선택할 수 있습니다.
metastore.compactor.initiator.on
- Dataproc Metastore 서비스에서 개시자 및 클리너 스레드를 실행할지 여부입니다.개시자를 사용 설정하려면
true
로 설정합니다.metastore.compactor.worker.threads
- Dataproc Metastore에서 실행할 압축기 작업자 스레드 수입니다.압축기를 사용 설정할 양의 숫자로 설정합니다. 특히 개발자 등급의 경우 이 값을 높게 설정하면 서비스 성능에 영향을 줄 수 있습니다. 값을 조정해야 할 경우 8과 같이 낮은 값을 사용하는 것이 좋습니다.
hive.metastore.event.db.notification.api.auth
- Dataproc Metastore 서비스가 데이터베이스 알림 관련 API로 승인해야 하는지 여부입니다.false
로 설정합니다.true
로 설정하면 프록시 설정의 수퍼유저만 권한을 갖습니다. 수퍼유저 프록시 권한에 대한 자세한 내용은 Metastore 알림 API 보안을 참조하세요.
클라이언트 측 구성
클라이언트 측 구성은 트랜잭션 검증에 설명된 대로 Hive 클라이언트에 설정됩니다.
hive.support.concurrency
- 삽입, 업데이트, 삭제 트랜잭션을 지원하려면true
로 설정합니다.hive.exec.dynamic.partition.mode
- 엄격한 모드에서는 모든 파티션을 실수로 덮어쓸 경우에 대비해서 정적 파티션을 하나 이상 지정해야 합니다. 엄격하지 않은 모드에서는 모든 파티션을 동적으로 설정해도 됩니다.삽입, 업데이트, 삭제 트랜잭션을 지원하려면
nonstrict
로 설정합니다.hive.txn.manager
—org.apache.hadoop.hive.ql.lockmgr.DbTxnManager
로 설정합니다.
트랜잭션 검증
Hive 3에서 Dataproc Metastore 서비스를 사용하는 Dataproc 클러스터를 사용하여 Hive 트랜잭션을 검증할 수 있습니다.
Dataproc Metastore 서비스와 동일한 프로젝트에 Hive 3가 있는 Dataproc 클러스터를 만들어야 합니다. Dataproc 2.0 이미지, 2.0-ubuntu18, 2.0-debian10은 Hive 3 및 트랜잭션을 지원합니다. --image-version
플래그를 사용하여 2.0 이미지를 설정할 수 있습니다. 예를 들면 다음과 같습니다.
gcloud dataproc clusters create DATAPROC_CLUSTER_ID \
--dataproc-metastore=projects/PROJECT_ID/locations/LOCATION/services/SERVICE \
--region=REGION \
--image-version 2.0-debian10
다음 안내에서는 Dataproc 클러스터에서 사용되는 Dataproc Metastore 서비스에서 트랜잭션을 검증하는 방법을 설명합니다.
Dataproc 클러스터에 SSH로 연결합니다. 브라우저 또는 명령줄로 이를 수행할 수도 있습니다.
hive
명령어를 실행하여 Hive 클라이언트를 엽니다.$> hive
Hive 클라이언트 세션에서 트랜잭션에 대해 Hive ACID 지원을 사용 설정하도록 클라이언트 측 구성을 설정합니다.
SET hive.txn.manager=org.apache.hadoop.hive.ql.lockmgr.DbTxnManager; SET hive.support.concurrency=true; SET hive.exec.dynamic.partition.mode=nonstrict;
삽입 및 업데이트를 수행할 트랜잭션 테이블을 만듭니다. 예시는 다음과 같습니다.
트랜잭션 테이블을 만듭니다.
create table student (id int, name string, age int) STORED AS ORC TBLPROPERTIES ('transactional' = 'true');
트랜잭션 테이블인지 확인합니다.
describe formatted <tableName>;
테이블 속성 목록이 출력됩니다. 트랜잭션 테이블에는 해당 테이블 매개변수에
transactional=true
가 포함됩니다.데이터를 테이블에 삽입합니다.
INSERT INTO student VALUES (1, 'Alice', 10), (2, 'Bob', 10), (3, 'Charlie', 10);
- 서비스의 웨어하우스 디렉터리에서
student
디렉터리에 delta 폴더가 생성되는지 확인합니다. 삽입 또는 업데이트 문을 여러 번 실행하면 delta 폴더가 여러 개 생성됩니다.
- 서비스의 웨어하우스 디렉터리에서
실행 중인 압축 및 해당 상태를 확인합니다. Hive Metastore는 5분 간격으로 개시자라고 부르는 스레드를 실행하여 압축해야 할 테이블을 확인하고 해당 테이블에 대해 압축을 요청합니다.
show compactions;
수동 압축(주 압축 또는 부 압축)을 시작합니다.
ALTER TABLE student COMPACT 'minor'; ALTER TABLE student COMPACT 'major';