Dataproc Serverless를 사용하면 자체 클러스터를 프로비저닝하고 관리할 필요 없이 Spark 배치 워크로드를 실행할 수 있게 해준다.
여기선 Dataproc Cluster에 Hive DB를 BigQuery로 마이그레이션 해볼 것이다.
기존에는 이를 위해선 Composer(Airflow)에서 지원하는 Dataproc Operator를 사용하는게 일반적인 방법이었다.
이 방법은 워크로드에 미치는 영향을 고려하여 Composer 환경을 직접 세팅하고 프로비저닝 해준 뒤 DAG 파일을 작성해줘야 하는 작업이 들어간다.
하지만 이제 Dataproc Serverless를 사용하여 원하는 Dataproc Template을 선택 후 옵션만 선택해주면 Spark 배치 job을 돌릴 수 있다.
하둡 에코시스템에서 데이터를 모델링하고 프로세싱하는 경우 가장 많이 사용하는 데이터 웨어하우징용 솔루션이다.
RDB의 데이터베이스, 테이블과 같은 형태로, HDFS에 저장된 데이터의 구조를 정의하는 방법을 제공하며, 이 데이터를 대상으로 SQL과 유사한 HiveQL 쿼리를 이용하여 데이터를 조회할 수 있다.
가장 큰 특징으로는 메타스토어라는 것이 존재하는데, 하이브는 기존의 RDB와는 다르게 미리 스키마를 정의하고 그 틀에 맞게 데이터를 입력하는 것이 아닌, 데이터를 저장하고 거기에 스키마를 입히는(메타스토어에 입력하는) 것이 가장 큰 특징이다.
Hive 구성요소
Hive 실행 순서
우선 사용할 프로젝트의 Private Google Access를 활성화해야 한다.
추가로 Serverless Spark job을 위한 버킷도 하나 생성해주자.
Dataproc Cluster 생성
Cloud Shell에서 아래 명령어 수행
gcloud dataproc clusters create <클러스터 이름> \
--region=<리전> \
--single-node \
--enable-component-gateway \
--properties=spark:spark.history.fs.logDirectory=gs://<버킷 이름>/phs/*/spark-job-history
Github에서 Dataproc Template 클론
git clone https://github.com/GoogleCloudPlatform/dataproc-templates.git
cd dataproc-templates/python
소스를 보면 아래와 같고 java, python 중 원하는 언어를 선택할 수 있다. 원하는 언어 폴더/dataproc-templates/로 들어가면 다양한 템플릿과 해당 템플릿 사용 가이드를 확인할 수 있다.
(여기선 python 사용)
(Cloud Shell이 아닌 경우 인증을 위해 아래 명령어를 통해 인증 작업을 수행)
gcloud auth application-default login
Hive 테이블 생성
이건 ChatGPT를 활용했다.
Dataproc에 샘플 Hive db, table 생성하고 데이터 넣는 쿼리문을 알려달라고 한 후 그대로 실행했다.
Dataproc 클러스터 인스턴스에 연결
ChatGPT가 알려준대로 쿼리문 실행
예시 쿼리
id, name, age에 내 정보를 넣어줬다.
BigQuery 테이블 생성
위에서 만들어준 테이블과 동일한 스키마를 가진 데이터세트 및 테이블을 만들어준다.
Hive To BigQuery 템플릿 실행
Hive To BigQuery에 있는 가이드대로 진행
export GCP_PROJECT=<프로젝트 ID>
export REGION=<리전>
export GCS_STAGING_LOCATION=<Staging 버킷 명>
export JARS="gs://spark-lib/bigquery/spark-bigquery-latest_2.12.jar"
./bin/start.sh \
--properties=spark.hadoop.hive.metastore.uris=thrift://<Dataproc 마스터 노드 내부 IP>:9083 \
-- --template=HIVETOBIGQUERY \
--hive.bigquery.input.database="<Hive 디비 이름>" \
--hive.bigquery.input.table="<Hive 테이블 이름>" \
--hive.bigquery.output.dataset="<BigQuery 데이터 세트 이름>" \
--hive.bigquery.output.table="<BigQuery 테이블 이름>" \
--hive.bigquery.output.mode="overwrite" \
--hive.bigquery.temp.bucket.name="<버킷 이름>"
작업 성공
BigQuery에서 확인
아래와 같이 BigQuery에 로드가 성공했다는 메시지가 뜰 것이다.
Dataproc Serverless 배치 job 확인
[Hive 참고]
[Hive 마이그레이션 참고]