
시작하기 전에
- 실습에서는 정해진 기간 동안 Google Cloud 프로젝트와 리소스를 만듭니다.
- 실습에는 시간 제한이 있으며 일시중지 기능이 없습니다. 실습을 종료하면 처음부터 다시 시작해야 합니다.
- 화면 왼쪽 상단에서 실습 시작을 클릭하여 시작합니다.
이 실습에서는 Apache Spark 코드를 Cloud Dataproc으로 마이그레이션하는 방법을 알아봅니다. 작업 구성요소를 순차적으로 Google Cloud 서비스로 옮겨가는 단계를 다음과 같이 순서대로 따라가 보겠습니다.
이 실습에서는 다음 작업을 수행하는 방법을 학습합니다.
각 실습에서는 정해진 기간 동안 새 Google Cloud 프로젝트와 리소스 집합이 무료로 제공됩니다.
시크릿 창을 사용하여 Qwiklabs에 로그인합니다.
실습 사용 가능 시간(예: 1:15:00
)을 참고하여 해당 시간 내에 완료합니다.
일시중지 기능은 없습니다. 필요한 경우 다시 시작할 수 있지만 처음부터 시작해야 합니다.
준비가 되면 실습 시작을 클릭합니다.
실습 사용자 인증 정보(사용자 이름 및 비밀번호)를 기록해 두세요. Google Cloud Console에 로그인합니다.
Google Console 열기를 클릭합니다.
다른 계정 사용을 클릭한 다음, 안내 메시지에 이 실습에 대한 사용자 인증 정보를 복사하여 붙여넣습니다.
다른 사용자 인증 정보를 사용하는 경우 오류가 발생하거나 요금이 부과됩니다.
약관에 동의하고 리소스 복구 페이지를 건너뜁니다.
Google Cloud Shell은 다양한 개발 도구가 탑재된 가상 머신으로, 5GB의 영구 홈 디렉터리를 제공하며 Google Cloud에서 실행됩니다.
Google Cloud Shell을 사용하면 명령줄을 통해 Google Cloud 리소스에 액세스할 수 있습니다.
Cloud 콘솔의 오른쪽 상단 툴바에서 'Cloud Shell 열기' 버튼을 클릭합니다.
계속을 클릭합니다.
환경을 프로비저닝하고 연결하는 데 몇 분 정도 소요됩니다. 연결되면 사용자가 미리 인증되어 프로젝트가 PROJECT_ID로 설정됩니다. 예:
gcloud는 Google Cloud의 명령줄 도구입니다. Cloud Shell에 사전 설치되어 있으며 명령줄 자동 완성을 지원합니다.
출력:
출력 예시:
출력:
출력 예시:
Google Cloud에서 작업을 시작하기 전에 프로젝트가 Identity and Access Management(IAM) 내에서 올바른 권한을 보유하고 있는지 확인해야 합니다.
Google Cloud 콘솔의 탐색 메뉴()에서 IAM 및 관리자 > IAM을 선택합니다.
기본 컴퓨팅 서비스 계정 {project-number}-compute@developer.gserviceaccount.com
이 있고 editor
역할이 할당되어 있는지 확인하세요. 계정 프리픽스는 프로젝트 번호이며, 이 번호는 탐색 메뉴 > Cloud 개요 > 대시보드에서 확인할 수 있습니다.
editor
역할이 없는 경우 다음 단계에 따라 필요한 역할을 할당합니다.729328892908
)를 복사합니다.{project-number}
는 프로젝트 번호로 바꿉니다.기존 Spark 워크로드를 Cloud Dataproc으로 마이그레이션한 후 Google Cloud 네이티브 기능과 서비스를 활용할 수 있도록 Spark 코드를 순차적으로 수정하려고 합니다.
새로운 Cloud Dataproc 클러스터를 만든 다음 가져온 Jupyter 노트북을 실행합니다. 이 노트북은 클러스터의 기본 로컬 Hadoop 분산 파일 시스템(HDFS)을 사용하여 소스 데이터를 저장한 후 Spark를 사용하는 Hadoop 클러스터에서와 마찬가지로 데이터를 처리합니다. Cloud Dataproc 환경으로 마이그레이션될 때 Spark 코드를 포함한 Jupyter 노트북을 비롯해 얼마나 많은 기존 분석 워크로드를 변경 없이 실행할 수 있는지 볼 수 있습니다.
Google Cloud 콘솔의 탐색 메뉴에서 애널리틱스 섹션의 Dataproc을 클릭합니다.
클러스터 만들기를 클릭합니다.
Compute Engine의 클러스터에서 만들기를 클릭합니다.
클러스터 이름으로 sparktodp
를 입력합니다.
리전을
버전 관리 섹션에서 변경을 클릭하고 2.1(Debian 11, Hadoop 3.3, Spark 3.3)을 선택합니다.
이 실습에 사용되는 샘플 코드에 필요한 Python3가 이 버전에 포함되어 있기 때문입니다.
선택을 클릭합니다.
구성요소 > 구성요소 게이트웨이 섹션에서 구성요소 게이트웨이 사용 설정을 선택합니다.
선택적 구성요소에서 Jupyter 노트북을 선택합니다.
왼쪽 목록의 클러스터 설정 아래에서 노드 구성(선택사항)을 클릭합니다.
관리자 노드에서 시리즈를 E2로, 머신 유형을 e2-standard-2(vCPU 2개, 메모리 8GB)로 변경하고 기본 디스크 크기를 30으로 설정합니다.
워커 노드에서 시리즈를 E2로, 머신 유형을 e2-standard-2(vCPU 2개, 메모리 8GB)로 변경하고 기본 디스크 크기를 30으로 설정합니다.
만들기를 클릭합니다.
잠시 후 클러스터가 시작됩니다. Cloud Dataproc 클러스터가 완전히 배포될 때까지 기다렸다가 다음 단계를 진행하세요.
Cloud Shell에서 실습용 Git 저장소를 클론하고 Cloud Dataproc이 Jupyter 노트북의 홈 디렉터리로 사용하는 Cloud Storage 버킷으로 필요한 노트북 파일을 복사합니다.
클러스터가 완전히 시작되는 즉시 웹 인터페이스에 연결할 수 있습니다. 이 단계까지 왔다면 클러스터가 완전히 배포되었을 수 있으므로 새로고침 버튼을 클릭하세요.
Dataproc 클러스터 페이지에서 클러스터가 완전히 시작될 때까지 기다린 후 클러스터 이름을 클릭하여 클러스터 세부정보 페이지를 엽니다.
웹 인터페이스를 클릭합니다.
Jupyter 링크를 클릭하면 브라우저에 새 Jupyter 탭이 열립니다.
Jupyter 홈페이지가 이 탭에 열립니다. 여기에서 Cloud Storage의 /notebooks/jupyter
디렉터리 내용을 볼 수 있는데 이 실습에서 사용되는 샘플 Jupyter 노트북도 포함되어 있습니다.
Files(파일) 탭에서 GCS 폴더를 클릭한 다음 01_spark.ipynb 노트북을 클릭하여 엽니다.
Cell(셀)과 Run All(모두 실행)을 차례로 클릭하여 노트북에 있는 모든 셀을 실행합니다.
노트북 상단으로 페이지를 다시 올려 노트북이 각 셀의 실행을 완료해 셀 아래에 결과를 출력하는 동안 살펴봅니다.
이제 처리 중인 셀을 차례로 확인해 코드를 검토하면서 노트북이 수행 중인 작업을 확인할 수 있습니다. 특히 데이터가 저장되고 처리되는 위치를 주의해 살펴보세요.
데이터는 gzip으로 압축된 CSV 파일입니다. Spark에서는 textFile 메서드를 사용해 이 파일을 바로 읽은 다음 각 행을 쉼표 단위로 분할해 파싱할 수 있습니다.
Python Spark 코드는 In [4]
셀에서 시작합니다.
In [5]
셀에서는 각 행이 쉼표(,
) 구분 기호 단위로 분할되고 코드에 준비된 인라인 스키마를 사용해 파싱됩니다.In [6]
셀에서는 Spark SQL 컨텍스트가 생성되며 이 컨텍스트를 사용하는 Spark 데이터프레임이 이전 단계에서 파싱된 입력 데이터를 사용해 생성됩니다.
.show()
메서드를 사용해 행 데이터를 선택하고 표시하면 선택한 필드 수가 요약된 뷰를 출력할 수 있습니다.이 .show()
메서드는 다음과 유사한 출력 테이블을 생성합니다.
또한 SparkSQL은 Dataframe에 저장된 파싱된 데이터를 쿼리할 때 사용할 수 있습니다.
In [7]
셀에서는 임시 테이블(connections
)을 등록하며, 이어지는 SparkSQL SQL 쿼리문에서 이 테이블을 참조합니다.쿼리가 완료되면 여기 나온 예시(일부 잘림)와 유사한 출력이 표시됩니다.
이제 막대 그래프를 통해 이 데이터를 시각적으로 표시할 수 있습니다.
In [8]
은 변수에 단순히 데이터를 덤프하는 대신 %matplotlib inline
Jupyter 매직 함수를 통해 Matplotlib을 리디렉션하여 그래픽 수치를 인라인으로 노트북에 렌더링합니다. 이 셀은 이전 단계의 attack_stats
쿼리를 사용해 막대 그래프를 표시합니다.노트북의 모든 셀이 성공적으로 실행되고 나면 출력의 첫 번째 부분이 다음 차트와 같이 표시됩니다. 노트북을 아래로 스크롤하면 전체 출력 차트를 볼 수 있습니다.
이 단계에서는 원본 '리프트 앤 시프트' 샘플 노트북을 활용하여 컴퓨팅 요구사항에서 작업용 스토리지 요구사항을 분리하기 위한 사본을 만들겠습니다. 이 경우에는 코드에서 hdfs://
스토리지 참조를 gs://
참조로 교체한 후 필요에 따라 폴더 이름을 조정하는 방법으로 Hadoop 파일 시스템 호출을 Cloud Storage 호출로 교체하기만 하면 됩니다.
Cloud Shell을 사용하여 소스 데이터의 사본을 새로운 Cloud Storage 버킷에 배치하는 방법으로 시작하세요.
마지막 명령어가 완료되고 파일이 새 스토리지 버킷에 복사되었는지 확인합니다.
브라우저에서 01_spark
Jupyter 노트북 탭으로 다시 전환합니다.
File(파일)을 클릭하고 Make a Copy(사본 만들기)를 선택합니다.
사본이 열리면 01_spark-Copy1 제목을 클릭하고 De-couple-storage
로 이름을 변경합니다.
Jupyter에서 01_spark
탭을 엽니다.
File(파일)과 Save and checkpoint(저장 및 체크포인트)를 차례로 클릭하여 노트북을 저장합니다.
노트북을 종료하려면 File(파일)과 Close and Halt(닫기 및 중지)를 차례로 클릭합니다.
De-couple-storage
Jupyter 노트북 탭으로 다시 돌아갑니다.클러스터의 내부 HDFS 파일 시스템에 데이터를 다운로드하고 복사하는 셀은 더 이상 필요 없으므로 먼저 삭제합니다.
셀을 삭제하려면 셀을 클릭하여 선택한 다음 노트북 툴바에서 선택한 셀 잘라내기 아이콘(가위)을 클릭하면 됩니다.
In [1]
, In [2]
, In [3]
)을 삭제합니다.이제 첫 번째 셀(노트북을 재실행하지 않았다면 아직 In [4]
로 유지됨)의 코드를 변경합니다. 이 셀은 데이터 파일 소스 위치를 정의하고 소스 데이터에서 읽는 역할을 합니다. 셀에는 현재 다음과 같은 코드가 포함되어 있습니다.
In [4]
셀의 내용을 다음 코드로 교체하세요. 이 코드에서 유일하게 변경된 내용은 변수를 만들어 Cloud Storage 버킷 이름을 저장한 것과 Cloud Storage에서 소스 데이터를 저장하는 데 사용한 버킷으로 data_file
을 지정한 것입니다.코드를 교체하고 나면 첫 번째 셀이 다음과 유사하게 표시되며, 여기에는 실습 프로젝트 ID가 버킷 이름으로 지정되어 있습니다.
방금 업데이트한 셀에서 [Your-Bucket-Name]
자리표시자를 이 섹션의 첫 번째 단계에서 만든 스토리지 버킷 이름으로 교체합니다. 이 버킷을 만들 때 버킷 이름으로 프로젝트 ID를 사용했으므로 이 화면 왼쪽의 Qwiklabs 실습 로그인 정보 패널에서 프로젝트 ID를 복사해 여기에 가져올 수 있습니다. 대괄호([]
)가 포함된 모든 자리표시자 텍스트를 교체합니다.
Cell(셀)과 Run All(모두 실행)을 차례로 클릭하여 노트북에 있는 모든 셀을 실행합니다.
파일이 내부 클러스터 스토리지에서 로드되어 실행되었을 때와 정확히 동일한 출력이 표시됩니다. 소스 데이터 파일을 Cloud Storage로 이전하려면 hdfs://
의 스토리지 소스 참조를 gs://
로 재지정하면 됩니다.
이번에는 Cloud Dataproc 작업으로 배포할 수 있도록 이 노트북과 동일한 기능을 수행하는 독립 실행형 Python 파일을 만들겠습니다. 이를 위해서는 이 노트북의 사본에서 Python 셀에 매직 명령어를 추가하여 파일에 셀 내용을 작성해야 합니다. 또한 이 코드의 이동성을 높이기 위해 Python 스크립트가 호출될 때 스토리지 버킷 위치를 설정하는 입력 매개변수 핸들러를 추가하겠습니다.
De-couple-storage
Jupyter 노트북 메뉴에서 File(파일)을 클릭하고 Make a Copy(사본 만들기)를 선택합니다.
사본이 열리면 De-couple-storage-Copy1을 클릭하고 PySpark-analysis-file
로 이름을 변경합니다.
Jupyter에서 De-couple-storage
탭을 엽니다.
File(파일)과 Save and checkpoint(저장 및 체크포인트)를 차례로 클릭하여 노트북을 저장합니다.
노트북을 종료하려면 File(파일)과 Close and Halt(닫기 및 중지)를 차례로 클릭합니다.
필요한 경우 브라우저에서 PySpark-analysis-file
Jupyter 노트북 탭으로 다시 돌아갑니다.
노트북 상단에서 첫 번째 셀을 클릭합니다.
Insert(삽입)를 클릭하고 Insert Cell Above(위에 셀 삽입)를 선택합니다.
새로 생긴 이 첫 번째 코드 셀에 다음의 라이브러리 가져오기 및 매개변수 처리 코드를 붙여넣습니다.
%%writefile spark_analysis.py
Jupyter 매직 명령어는 독립 실행형 Python 스크립트를 포함하는 새로운 출력 파일을 만듭니다. 나머지 셀에도 이 명령어의 변형을 추가하여 각 셀 내용을 독립 실행형 스크립트 파일에 추가합니다.
이 코드는 matplotlib.use('agg')
를 통해 Matplotlib
모듈도 가져오고 기본 표시 백엔드도 명시적으로 설정하므로 플롯팅 코드가 Jupyter 노트북 외부에서 실행됩니다.
%%writefile -a spark_analysis.py
를 삽입합니다. 이 5개의 셀에는 In [x]란 라벨이 지정되어 있습니다.예를 들어 그 다음 셀은 다음과 같이 표시됩니다.
마지막 셀에 이르기까지 이 단계를 반복하며 각 코드 셀의 시작부에 %%writefile -a spark_analysis.py
를 삽입합니다.
Pandas 막대 그래프가 표시되는 마지막 셀에서 %matplotlib inline
매직 명령어를 삭제합니다.
노트북에서 마지막 코드 셀을 선택했다면 메뉴 바에서 삽입을 클릭한 다음 아래에 셀 삽입을 선택합니다.
새로 생성된 셀에 다음 코드를 붙여넣습니다.
이제 노트북 안에서 로컬 사본을 호출하고 이 작업의 입력 데이터를 저장하는 이전에 만든 스토리지 버킷을 식별하는 매개변수를 전달하여 PySpark 코드가 파일로서 성공적으로 실행되는지 테스트합니다. 스크립트가 생성하는 보고서 데이터 파일은 동일한 버킷에 저장됩니다.
PySpark-analysis-file
노트북에서 맨 끝에 새로운 셀을 추가하고 다음 코드를 붙여넣습니다.이 코드는 앞에 나온 안내에 따라 실습 프로젝트 ID를 스토리지 버킷 이름으로 사용해 Cloud Storage 버킷을 생성했다고 가정한 것입니다. 다른 이름을 사용했다면 이 코드를 수정해 BUCKET
변수를 직접 지정한 이름으로 설정하세요.
이 코드는 Cloud Storage 버킷에 저장된 스크립트 출력 파일을 나열합니다.
노트북이 Python 파일을 성공적으로 생성하고 실행하면 마지막 2개의 셀에 다음과 유사한 출력이 표시됩니다. 이는 스크립트가 끝까지 실행되어 실습 앞부분에서 만든 Cloud Storage 버킷에 출력을 저장함을 나타냅니다.
CTRL+X
를 누른 다음 Y
와 Enter
키를 눌러 종료하고 저장합니다.
스크립트를 실행 가능하게 만듭니다.
클러스터 페이지가 열려 있지 않다면 Cloud 콘솔 탭에서 Dataproc > 클러스터 페이지로 이동해 엽니다.
작업을 클릭합니다.
목록에서 작업 이름을 클릭합니다. Cloud Shell에서는 물론 여기서도 진행 상태를 모니터링할 수 있습니다. 작업이 완료될 때까지 기다립니다.
스토리지 버킷으로 이동해 출력 보고서인 /sparktodp/report.png
에 독립 실행형 작업이 완료되었음을 알려주는 타임스탬프가 업데이트되었는지 확인합니다.
이 작업에서 입력 및 출력 데이터 스토리지에 사용하는 스토리지 버킷은 이름이 프로젝트 ID로만 되어 있는 버킷입니다.
Dataproc > 클러스터 페이지로 다시 이동합니다.
sparktodp 클러스터를 선택하고 삭제를 클릭합니다. 이 클러스터가 더 이상 필요하지 않기 때문입니다.
확인을 클릭합니다.
브라우저에서 Jupyter 탭을 닫습니다.
실습을 완료하면 실습 종료를 클릭합니다. Google Cloud Skills Boost에서 사용된 리소스를 자동으로 삭제하고 계정을 지웁니다.
실습 경험을 평가할 수 있습니다. 해당하는 별표 수를 선택하고 의견을 입력한 후 제출을 클릭합니다.
별점의 의미는 다음과 같습니다.
의견을 제공하고 싶지 않다면 대화상자를 닫으면 됩니다.
의견이나 제안 또는 수정할 사항이 있다면 지원 탭을 사용하세요.
Copyright 2020 Google LLC All rights reserved. Google 및 Google 로고는 Google LLC의 상표입니다. 기타 모든 회사명 및 제품명은 해당 업체의 상표일 수 있습니다.
현재 이 콘텐츠를 이용할 수 없습니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
감사합니다
이용할 수 있게 되면 이메일로 알려드리겠습니다.
한 번에 실습 1개만 가능
모든 기존 실습을 종료하고 이 실습을 시작할지 확인하세요.