SCBL008
개요
이 실습에서는 Dataflow와 Apache Beam을 사용하여 데이터를 Spanner로 마이그레이션합니다.
목표
이 실습에서는 다음을 수행하는 방법에 대해 알아봅니다.
- Apache Beam을 사용하여 ETL 파이프라인을 작성합니다.
- Google Cloud Dataflow를 사용하여 Apache Beam 파이프라인을 실행합니다.
설정 및 요구사항
실습 시작 버튼을 클릭하기 전에
다음 안내를 확인하세요. 실습에는 시간 제한이 있으며 일시중지할 수 없습니다. 실습 시작을 클릭하면 타이머가 시작됩니다. 이 타이머는 Google Cloud 리소스를 사용할 수 있는 시간이 얼마나 남았는지를 표시합니다.
실무형 실습을 통해 시뮬레이션이나 데모 환경이 아닌 실제 클라우드 환경에서 직접 실습 활동을 진행할 수 있습니다. 실습 시간 동안 Google Cloud에 로그인하고 액세스하는 데 사용할 수 있는 새로운 임시 사용자 인증 정보가 제공됩니다.
이 실습을 완료하려면 다음을 준비해야 합니다.
- 표준 인터넷 브라우저 액세스 권한(Chrome 브라우저 권장)
참고: 이 실습을 실행하려면 시크릿 모드 또는 시크릿 브라우저 창을 사용하세요. 개인 계정과 학습자 계정 간의 충돌로 개인 계정에 추가 요금이 발생하는 일을 방지해 줍니다.
- 실습을 완료하기에 충분한 시간. 실습을 시작하고 나면 일시중지할 수 없습니다.
참고: 계정에 추가 요금이 발생하지 않도록 하려면 개인용 Google Cloud 계정이나 프로젝트가 이미 있어도 이 실습에서는 사용하지 마세요.
Google Cloud Shell 활성화하기
Google Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉토리를 제공하며 Google Cloud에서 실행됩니다.
Google Cloud Shell을 사용하면 명령줄을 통해 GCP 리소스에 액세스할 수 있습니다.
-
GCP Console의 오른쪽 상단 툴바에서 Cloud Shell 열기 버튼을 클릭합니다.

-
( 계속) Continue을 클릭하십시오.

환경을 프로비저닝하고 연결하는 데 약간의 시간이 걸립니다. 연결되면 이미 인증되었으며 프로젝트는 PROJECT_ID 로 설정됩니다. 예를 들면 다음과 같습니다.

gcloud는 Google Cloud Platform의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 탭 자동 완성을 지원합니다.
다음 명령어로 사용 중인 계정 이름 목록을 표시할 수 있습니다.
gcloud auth list
출력:
Credentialed accounts:
- <myaccount>@<mydomain>.com (active)
출력 예:
Credentialed accounts:
- google1623327_student@qwiklabs.net
다음 명령어로 프로젝트 ID 목록을 표시할 수 있습니다.
gcloud config list project
출력:
[core]
project = <project_ID>
출력 예:
[core]
project = qwiklabs-gcp-44776a13dea667a6
작업 1. Apache Beam 파이프라인을 만들어 Spanner로 데이터 가져오기
-
Google Cloud 콘솔 제목 표시줄에서 Cloud Shell 활성화(
)를 클릭합니다. 메시지가 표시되면 계속을 클릭합니다.
-
다음 명령어를 실행하여 프로젝트 ID를 설정합니다.
gcloud config set project {{{project_0.project_id|placeholder_project_id}}}
- 다음 명령어를 실행하여 이 실습에 필요한 파일을 다운로드합니다.
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
cd training-data-analyst/courses/understanding_spanner/dataflow
- 다음 스크립트를 실행하여 Spanner 데이터베이스를 만듭니다.
bash ./create-spanner-pets-database.sh {{{project_0.default_region|placeholder_region}}}
- 다음 명령어를 실행하여 스키마를 확인합니다. 이 실습은 테이블이 하나뿐이며 PetID 및 OwnerID 필드는 모두 문자열이 아닌 정수입니다.
cat pets-db-schema.sql
- 다음 명령어를 실행하여 가져온 데이터를 확인합니다. 기본 키와 외래 키가 카운터를 사용한다는 점에 주목하세요. 앞서 과정 초반에서 다루었듯이 이는 Spanner를 사용할 때 피해야 할 패턴입니다.
이를 해결하기 위해 Apache Beam으로 작성된 Dataflow 파이프라인을 사용하여 데이터를 Spanner로 가져오기 전에 정수의 비트를 반전합니다.
이렇게 하면 관계를 유지하면서 정수 문제를 해결할 수 있습니다.
cat pets.csv
-
편집기 열기 버튼을 클릭하고 training-data-analyst/courses/understanding_spanner/dataflow/csv-to-spanner.py 코드 파일을 엽니다. 파이프라인이 기본 함수(53~68번째 줄)에서 생성되는 것을 확인합니다.
이 파이프라인은 CSV 파일에서 읽은 다음 PetID 및 OwnerID 필드의 비트를 반전시킨 후 Spanner에 데이터를 씁니다.
reverse_bits 함수는 21번째 줄부터 시작합니다.
-
터미널로 돌아갑니다. 이 파이프라인을 실행해 보겠습니다. 먼저 다음 명령어를 사용하여 Python 기본 요건을 설치해야 합니다.
pip install apache-beam[gcp]==2.42.0
pip install apache-beam[dataframe]
- 파이프라인을 실행합니다. (이 코드는 Cloud Shell에서 파이프라인을 로컬로 실행합니다. 따라서 Dataflow로 이동할 필요가 없습니다.)
python csv-to-spanner.py
- 파이프라인이 완료되면 다음 쿼리를 실행하여 결과를 확인합니다.
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='SELECT * FROM Pets'
- 다음 명령어를 실행하여 방금 추가한 데이터를 삭제합니다.
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='DELETE FROM Pets WHERE True'
- 다음으로 Dataflow 서비스를 사용하여 코드를 실행합니다.
작업 2. Dataflow 작업 실행
- Dataflow를 사용하여 작업을 실행하려면 입력, 스테이징, 출력을 위한 Cloud Storage 버킷이 필요합니다. 아래 명령어를 사용하여 프로젝트 ID(이를 통해 버킷의 고유한 이름이 보장됨)가 포함된 버킷을 만듭니다. 또한
pets.csv 파일을 버킷에 복사합니다. 각 단계를 동시에 진행하지 않고 개별적으로 실행해야 합니다.
gsutil mb -l {{{project_0.default_region|place_holder_text}}} gs://$DEVSHELL_PROJECT_ID-data-flow
gsutil cp ./pets.csv gs://$DEVSHELL_PROJECT_ID-data-flow
-
콘솔에서 Cloud Storage로 이동하여 버킷이 생성되고 파일이 복사되었는지 확인합니다.
-
다음 명령어를 실행하여 Dataflow API가 프로젝트에 확실하게 사용 설정되었는지 확인합니다.
gcloud services disable dataflow.googleapis.com
gcloud services enable dataflow.googleapis.com
- 다음 명령어를 사용하여 Dataflow로 파이프라인을 실행합니다.
python csv-to-spanner.py \
--region {{{project_0.default_region|place_holder_text}}} \
--worker_machine_type e2-standard-2 \
--input gs://$DEVSHELL_PROJECT_ID-data-flow/pets.csv \
--output gs://$DEVSHELL_PROJECT_ID-data-flow/results/outputs \
--runner DataflowRunner \
--project $DEVSHELL_PROJECT_ID \
--temp_location gs://$DEVSHELL_PROJECT_ID-data-flow/tmp/
-
탐색 메뉴를 사용하여 Dataflow 작업으로 이동합니다. 작업이 표시되는 데 잠시 시간이 걸릴 수 있으므로 새로고침 버튼을 클릭하여 확인합니다. 그런 다음 작업을 클릭하여 작업 세부정보를 확인하면 됩니다. 작업을 제출할 클러스터 또는 하나 이상의 VM이 생성되므로 Dataflow 서비스에서 작업을 실행하는 데 몇 분 정도 걸립니다.
-
이전 작업과 마찬가지로 데이터가 Spanner 데이터베이스에 추가되었는지 확인합니다. 다음 쿼리를 실행하여 로드된 데이터를 확인합니다.
gcloud spanner databases execute-sql pets-db --instance=test-spanner-instance --sql='SELECT * FROM Pets'
- 더 이상 요금이 청구되지 않도록 Spanner 인스턴스를 삭제합니다.
수고하셨습니다. 이 실습에서는 Dataflow 및 Apache Beam을 사용하여 데이터를 Spanner로 마이그레이션했습니다.
실습 종료
실습을 완료하면 실습 종료를 클릭합니다. Qwiklabs에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
- 별표 1개 = 매우 불만족
- 별표 2개 = 불만족
- 별표 3개 = 중간
- 별표 4개 = 만족
- 별표 5개 = 매우 만족
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.