Dataflow를 사용한 서버리스 데이터 분석: 간단한 Dataflow 파이프라인(자바)
실습
1시간 30분
universal_currency_alt
크레딧 5개
show_chart
고급
info
이 실습에는 학습을 지원하는 AI 도구가 통합되어 있을 수 있습니다.
개요
이 실습에서는 Dataflow 프로젝트를 열고, 파이프라인 필터링을 사용하며, 로컬과 클라우드에서 파이프라인을 실행해봅니다.
목표
이 실습에서는 간단한 Dataflow 파이프라인을 작성하여 로컬과 클라우드 모두에서 실행하는 방법을 학습합니다.
- Maven을 사용하여 자바 Dataflow 프로젝트 설정하기
- 자바로 간단한 파이프라인 작성하기
- 로컬 컴퓨터에서 쿼리 실행하기
- 클라우드에서 쿼리 실행하기
설정 및 요건
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
-
시크릿 창을 사용하여 Qwiklabs에 로그인합니다.
-
실습 사용 가능 시간(예: 1:15:00
)을 참고하여 해당 시간 내에 완료합니다.
일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.
-
준비가 되면 실습 시작을 클릭합니다.
-
실습 사용자 인증 정보(사용자 이름 및 비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.
-
Google Console 열기를 클릭합니다.
-
다른 계정 사용을 클릭한 다음, 안내 메시지에 이 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.
-
약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
Google Cloud Shell 활성화하기
Google Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다.
Google Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.
-
Cloud 콘솔의 오른쪽 상단 툴바에서 'Cloud Shell 열기' 버튼을 클릭합니다.

-
계속을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 연결되면 사용자가 미리 인증되어 프로젝트가 PROJECT_ID로 설정됩니다. 예:

gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.
- 다음 명령어를 사용하여 사용 중인 계정 이름을 나열할 수 있습니다.
gcloud auth list
출력:
Credentialed accounts:
- @.com (active)
출력 예시:
Credentialed accounts:
- google1623327_student@qwiklabs.net
- 다음 명령어를 사용하여 프로젝트 ID를 나열할 수 있습니다.
gcloud config list project
출력:
[core]
project =
출력 예시:
[core]
project = qwiklabs-gcp-44776a13dea667a6
참고:
gcloud 전체 문서는 gcloud CLI 개요 가이드를 참조하세요.
Google Cloud Shell 코드 편집기 실행
Google Cloud Shell 코드 편집기를 사용하면 Cloud Shell 인스턴스에서 디렉터리와 파일을 쉽게 만들고 편집할 수 있습니다.
- Google Cloud Shell을 활성화한 후 편집기 열기를 클릭하여 Cloud Shell 코드 편집기를 엽니다.

이제 다음 세 가지 인터페이스를 사용할 수 있습니다.
- Cloud Shell 코드 편집기
- 콘솔(탭을 클릭) 탭을 클릭하면 콘솔과 Cloud Shell 사이를 전환할 수 있습니다.
- Cloud Shell 명령줄(콘솔에서 터미널 열기 클릭)

프로젝트 권한 확인
Google Cloud에서 작업을 시작하기 전에 프로젝트가 Identity and Access Management(IAM) 내에서 올바른 권한을 보유하고 있는지 확인해야 합니다.
-
Google Cloud 콘솔의 탐색 메뉴(
)에서 IAM 및 관리자 > IAM을 선택합니다.
-
기본 컴퓨팅 서비스 계정 {project-number}-compute@developer.gserviceaccount.com
이 있고 editor
역할이 할당되어 있는지 확인하세요. 계정 프리픽스는 프로젝트 번호이며, 이 번호는 탐색 메뉴 > Cloud 개요 > 대시보드에서 확인할 수 있습니다.

참고: 계정이 IAM에 없거나 editor
역할이 없는 경우 다음 단계에 따라 필요한 역할을 할당합니다.
- Google Cloud 콘솔의 탐색 메뉴에서 Cloud 개요 > 대시보드를 클릭합니다.
- 프로젝트 번호(예:
729328892908
)를 복사합니다.
-
탐색 메뉴에서 IAM 및 관리자 > IAM을 선택합니다.
- 역할 테이블 상단에서 주 구성원별로 보기 아래에 있는 액세스 권한 부여를 클릭합니다.
-
새 주 구성원 필드에 다음을 입력합니다.
{project-number}-compute@developer.gserviceaccount.com
-
{project-number}
는 프로젝트 번호로 바꿉니다.
-
역할 필드에서 프로젝트(또는 기본) > 편집자를 선택합니다.
-
저장을 클릭합니다.
작업 1. 준비
버킷 확인 및 실습 코드 다운로드하기
이 실습을 성공적으로 실행하려면 특정 단계를 반드시 완료해야 합니다.
-
Cloud Storage 버킷이 있는지 확인합니다(한 개는 실습 환경이 시작되었을 때 자동으로 생성되었음).
-
Google Cloud 콘솔 제목 표시줄에서 Cloud Shell 활성화를 클릭합니다. 메시지가 표시되면 계속을 클릭합니다. 다음 명령을 사용하여 실습 코드 github 저장소를 복제합니다.
git clone https://github.com/GoogleCloudPlatform/training-data-analyst
- Cloud Shell에서 다음을 입력하여 2개의 환경 변수를 생성합니다. 하나는 이름을 'BUCKET'으로 하고 다른 하나는 이름을 'REGION'으로 지정합니다. 각 변수가 echo 명령어와 함께 있는지 확인합니다.
BUCKET="{{{project_0.project_id|Project ID}}}-bucket"
echo $BUCKET
REGION="{{{project_0.default_region|Region}}}"
echo $REGION
Dataflow API가 제대로 사용 설정되어 있는지 확인하기
- Cloud Shell에서 다음 명령어를 실행하여 Dataflow API가 프로젝트에 확실하게 사용 설정되었는지 확인합니다.
gcloud services disable dataflow.googleapis.com --force
gcloud services enable dataflow.googleapis.com
작업 2. 새 Dataflow 프로젝트 만들기
이 실습의 목표는 Dataflow 프로젝트의 구조를 익히고 Dataflow 파이프라인을 실행하는 방법을 학습하는 것입니다. Maven이라는 강력한 빌드 도구를 사용하여 새 Dataflow 프로젝트를 만들어 보겠습니다.
- Cloud Shell이 포함된 브라우저 탭으로 돌아갑니다. Cloud Shell에서 이 실습의 디렉터리로 이동합니다.
cd ~/training-data-analyst/courses/data_analysis/lab2
- 다음 Maven 명령어를 복사하여 붙여넣습니다.
mvn archetype:generate \
-DarchetypeArtifactId=google-cloud-dataflow-java-archetypes-starter \
-DarchetypeGroupId=com.google.cloud.dataflow \
-DgroupId=com.example.pipelinesrus.newidea \
-DartifactId=newidea \
-Dversion="[1.0.0,2.0.0]" \
-DinteractiveMode=false
- 어떤 디렉터리가 생성되었나요?
- src 디렉터리 안에 어떤 패키지가 생성되었나요?
- 실습 코드를 만드는 데 사용된 Maven 명령어를 검토합니다.
cat ~/training-data-analyst/courses/data_analysis/lab2/create_mvn.sh
- 어떤 디렉터리가 생성될까요?
- src 디렉터리 안에 어떤 패키지가 생성될까요?
작업 3. 파이프라인 필터링
-
Cloud Shell 코드 편집기에서 디렉터리
/training-data-analyst/courses/data_analysis/lab2
로 이동합니다.
-
그런 다음 경로 javahelp/src/main/java/com/google/cloud/training/dataanalyst/javahelp/
를 선택하고 파일 Grep.java를 봅니다.
또는 nano
편집기를 사용하여 파일을 볼 수 있습니다. 다음 코드를 변경하지 마세요.
cd ~/training-data-analyst/courses/data_analysis/lab2/javahelp/src/main/java/com/google/cloud/training/dataanalyst/javahelp/
nano Grep.java
Grep.java
파일에 대한 다음 질문에 답해보세요.
- 어떤 파일을 읽고 있나요?
- 검색어는 무엇인가요?
- 어디에 출력되나요?
파이프라인에 세 개의 apply 구문이 있습니다.
- 첫 번째 apply()는 어떤 역할을 하나요?
- 두 번째 apply()는 어떤 역할을 하나요?
- 입력을 어디에서 가져오나요?
- 이 입력으로 무엇을 하나요?
- 출력에 무엇을 쓰나요?
- 어디에 출력되나요?
- 세 번째 apply()는 어떤 역할을 하나요?
작업 4. 로컬에서 파이프라인 실행하기
- Cloud Shell에서 다음 Maven 명령어를 붙여넣습니다.
cd ~/training-data-analyst/courses/data_analysis/lab2
export PATH=/usr/lib/jvm/java-8-openjdk-amd64/bin/:$PATH
cd ~/training-data-analyst/courses/data_analysis/lab2/javahelp
mvn compile -e exec:java \
-Dexec.mainClass=com.google.cloud.training.dataanalyst.javahelp.Grep
- 출력 파일은
output.txt
입니다. 출력 크기가 일정 이상이면 output-00000-of-00001
과 같은 이름이 지정된 개별 부분으로 샤딩됩니다. 필요한 경우 파일 시간을 검토하여 올바른 파일을 찾을 수 있습니다.
ls -al /tmp
- 출력 파일을 검토합니다.
cat /tmp/output*
출력이 논리적인가요?
작업 5. 클라우드에서 파이프라인 실행하기
- 일부 Java 파일을 클라우드로 복사합니다.
gcloud storage cp ../javahelp/src/main/java/com/google/cloud/training/dataanalyst/javahelp/*.java gs://$BUCKET/javahelp
-
Cloud Shell 코드 편집기에서 디렉터리 /training-data-analyst/courses/data_analysis/lab2/javahelp/src/main/java/com/google/cloud/training/dataanalyst/javahelp
로 이동합니다.
-
파일 Grep.java에서 Dataflow 파이프라인을 편집합니다.
cd ~/training-data-analyst/courses/data_analysis/lab2/javahelp/src/main/java/com/google/cloud/training/dataanalyst/javahelp
- Input 및 Output 변수를 버킷 이름으로 바꿉니다. 변수를 다음과 같이 바꿉니다.
String input = "gs://{{{project_0.project_id|Project ID}}}-bucket/javahelp/*.java";
String outputPrefix = "gs://{{{project_0.project_id|Project ID}}}-bucket/javahelp/output";
참고: 소스 코드에 이미 있는 input 및 outputPrefix 문자열을 변경했는지 확인합니다. 초기 문자열을 제거하지 않고 위의 전체 줄을 복사하여 붙여넣으면 동일한 변수가 두 개가 되므로 주의하세요.
편집 전의 예시 줄:
String input = "src/main/java/com/google/cloud/training/dataanalyst/javahelp/*.java";
String outputPrefix = "/tmp/output";
</ql-code-block output>
Example lines after editing containing your project's bucket name:
String input = "gs://qwiklabs-gcp-your-value-bucket/javahelp/*.java";
</ql-code-block output>
String outputPrefix = "gs://qwiklabs-gcp-your-value-bucket/javahelp/output";
</ql-code-block output>
5. 스크립트를 검토하여 Dataflow를 클라우드에 제출:
cd ~/training-data-analyst/courses/data_analysis/lab2/javahelp
cat run_oncloud1.sh
이 Maven 명령어와 로컬에서 실행되는 명령어의 차이점은 무엇인가요?
- 클라우드에 Dataflow 작업을 제출합니다.
bash run_oncloud1.sh $DEVSHELL_PROJECT_ID $BUCKET Grep $REGION
매우 간단한 작업이기 때문에 클라우드에서 실행하는 것이 로컬에서 실행하는 것보다 훨씬 더 오래 걸립니다(약 2~3분).
완성된 명령줄의 예:
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 01:50 min
[INFO] Finished at: 2018-02-06T15:11:23-05:00
[INFO] Final Memory: 39M/206M
[INFO] ------------------------------------------------------------------------
- 콘솔의 브라우저 탭으로 돌아갑니다. 탐색 메뉴(
)에서 Dataflow를 클릭하고 진행 상태를 모니터링할 작업을 클릭합니다.
예:

-
작업 상태가 성공으로 바뀔 때까지 기다립니다. 이 시점에서 Cloud Shell에 명령줄 프롬프트가 표시됩니다.
참고: Dataflow 작업이 처음에 실패하면 이전 명령을 재실행하여 새 Dataflow job
을 클라우드에 제출하세요.
-
Cloud Storage 버킷에서 출력을 검토합니다. 탐색 메뉴(
)에서 Cloud Storage > 버킷을 클릭하고 버킷을 클릭합니다.
-
javahelp 디렉터리를 클릭합니다. 이 작업으로 output.txt
파일이 생성됩니다. 파일이 일정 크기 이상이면 output-0000x-of-000y
와 같은 이름이 지정된 여러 부분으로 샤딩됩니다. 이름 또는 최종 수정 시간 필드를 보고 가장 최근 파일을 식별할 수 있습니다. 보려는 파일을 클릭합니다.
또는 Cloud Shell에서 파일을 다운로드하여 볼 수 있습니다.
gcloud storage cp gs://$BUCKET/javahelp/output* .
cat output*
실습 종료하기
실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
- 별표 1개 = 매우 불만족
- 별표 2개 = 불만족
- 별표 3개 = 중간
- 별표 4개 = 만족
- 별표 5개 = 매우 만족
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.