Google Compute Engine 기반 Dataproc

1. 소개 - Google Dataproc

Dataproc은 Apache Spark, Apache Flink, Presto 및 기타 여러 오픈소스 도구와 프레임워크를 실행하기 위한 고도로 확장 가능한 완전 관리형 서비스입니다. Dataproc을 전 세계적 규모의 데이터 레이크 현대화, ETL / ELT, 안전한 데이터 과학에 사용하세요. 또한 Dataproc은 BigQuery, Cloud Storage, Vertex AI, Dataplex를 비롯한 여러 Google Cloud 서비스와 완전히 통합됩니다.

Dataproc은 다음 세 가지 버전으로 제공됩니다.

  • Dataproc Serverless를 사용하면 인프라 및 자동 확장을 구성하지 않고도 PySpark 작업을 실행할 수 있습니다. Dataproc Serverless는 PySpark 일괄 워크로드 및 세션 / 노트북을 지원합니다.
  • Google Compute Engine의 Dataproc을 사용하면 Flink 및 Presto와 같은 오픈소스 도구뿐 아니라 YARN 기반 Spark 워크로드를 위한 Hadoop YARN 클러스터를 관리할 수 있습니다. 자동 확장을 포함하여 수직 또는 수평 확장을 원하는 만큼 사용하여 클라우드 기반 클러스터를 맞춤설정할 수 있습니다.
  • Google Kubernetes Engine의 Dataproc을 사용하면 Spark, PySpark, SparkR 또는 Spark SQL 작업을 제출하기 위해 GKE 인프라에 Dataproc 가상 클러스터를 구성할 수 있습니다.

2. Google Cloud VPC에서 Dataproc 클러스터 만들기

이 단계에서는 Google Cloud 콘솔을 사용하여 Google Cloud에 Dataproc 클러스터를 만듭니다.

첫 번째 단계로 콘솔에서 Dataproc 서비스 API를 사용 설정합니다. 사용 설정되면 'Dataproc'을 검색합니다. 클러스터 만들기를 클릭합니다.

Dataproc 클러스터를 실행할 기본 인프라로 Google Compute Engine(GCE) VM을 사용하려면 Compute Engine의 클러스터를 선택합니다.

a961b2e8895e88da.jpeg

이제 클러스터 생성 페이지가 표시됩니다.

9583c91204a09c12.jpeg

이 페이지의 내용:

  • 클러스터의 고유한 이름을 제공합니다.
  • 특정 리전을 선택합니다. 영역을 선택할 수도 있지만 Dataproc에서 영역을 자동으로 선택하는 기능을 제공합니다. 이 Codelab에서는 'us-central1'을 선택합니다. 'us-central1-c'로 구성됩니다.
  • '표준'을 선택합니다. 클러스터 유형을 선택합니다 이렇게 하면 마스터 노드가 하나 있게 됩니다.
  • 노드 구성 탭에서 생성된 작업자 수가 2개인지 확인합니다.
  • 클러스터 맞춤설정 섹션에서 구성요소 게이트웨이 사용 설정 옆의 체크박스를 선택합니다. 이를 통해 Spark UI, Yarn 노드 관리자, Jupyter 노트북을 포함한 클러스터의 웹 인터페이스에 액세스할 수 있습니다.
  • 선택적 구성요소에서 Jupyter 노트북을 선택합니다. 이렇게 하면 Jupyter 노트북 서버로 클러스터가 구성됩니다.
  • 나머지는 모두 그대로 두고 클러스터 만들기를 클릭합니다.

이렇게 하면 Dataproc 클러스터가 가동됩니다.

3. 클러스터 실행 및 SSH 연결

클러스터 상태가 실행 중으로 변경되면 Dataproc 콘솔에서 클러스터 이름을 클릭합니다.

7332f1c2cb25807d.jpeg

VM 인스턴스 탭을 클릭하여 클러스터의 마스터 노드와 2개의 워커 노드를 확인합니다.

25be1578e00f669f.jpeg

마스터 노드 옆에 있는 SSH를 클릭하여 마스터 노드에 로그인합니다.

2810ffd97f315bdb.jpeg

hdfs 명령어를 실행하여 디렉터리 구조를 확인합니다.

hadoop_commands_example

sudo hadoop fs -ls /
sudo hadoop version
sudo hadoop fs -mkdir /test51 
sudo hadoop fs -ls /

4. 웹 인터페이스 및 구성요소 게이트웨이

Dataproc 클러스터 콘솔에서 클러스터 이름을 클릭한 다음 웹 인터페이스 탭을 클릭합니다.

6398f71d6293d6ff.jpeg

그러면 Jupyter를 비롯하여 사용 가능한 웹 인터페이스가 표시됩니다. Jupyter를 클릭하여 Jupyter 노트북을 엽니다. 이를 사용하여 GCS에 저장된 PySpark에 노트북을 만들 수 있습니다. 를 사용하여 노트북을 Google Cloud Storage에 저장하고 이 Codelab에서 사용할 PySpark 노트북을 엽니다.

5. Spark 작업 모니터링 및 관찰

Dataproc 클러스터를 준비하고 실행한 상태에서 PySpark 일괄 작업을 만들고 Dataproc 클러스터에 작업을 제출합니다.

PySpark 스크립트를 저장할 Google Cloud Storage (GCS) 버킷을 만듭니다. Dataproc 클러스터와 동일한 리전에 버킷을 만들어야 합니다.

679fd2f76806f4e2.jpeg

이제 GCS 버킷이 생성되었으므로 다음 파일을 이 버킷에 복사합니다.

https://raw.githubusercontent.com/diptimanr/spark-on-gce/main/test-spark-1.py

이 스크립트는 샘플 Spark DataFrame을 만들고 Hive 테이블로 작성합니다.

hive_job.py

from pyspark.sql import SparkSession
from datetime import datetime, date
from pyspark.sql import Row

spark = SparkSession.builder.master("local").enableHiveSupport().getOrCreate()

df = spark.createDataFrame([ (1, 2., 'string1', date(2000, 1, 1), datetime(2000, 1, 1, 12, 0)),
        (2, 3., 'string2', date(2000, 2, 1), datetime(2000, 1, 2, 12, 0)), (3, 4., 'string3', date(2000, 3, 1), datetime(2000, 1, 3, 12, 0))
    ], schema='a long, b double, c string, d date, e timestamp')
print("..... Writing data .....")
df.write.mode("overwrite").saveAsTable("test_table_1")
print("..... Complete .....")

이 스크립트를 Dataproc에서 Spark 일괄 작업으로 제출합니다. 왼쪽 탐색 메뉴에서 작업을 클릭한 다음 작업 제출을 클릭합니다.

5767fc7c50b706d3.jpeg

작업 ID리전을 입력합니다. 클러스터를 선택하고 복사한 Spark 스크립트의 GCS 위치를 제공합니다. 이 작업은 Dataproc에서 Spark 일괄 작업으로 실행됩니다.

속성에서 spark.submit.deployMode 키와 client 값을 추가하여 드라이버가 워커 노드가 아닌 Dataproc 마스터 노드에서 실행되도록 합니다. 제출을 클릭하여 일괄 작업을 Dataproc에 제출합니다.

a7ca90f5132faa31.jpeg

Spark 스크립트는 Dataframe을 만들고 Hive 테이블 test_table_1에 씁니다.

작업이 성공적으로 실행되면 모니터링 탭에서 콘솔 출력 문을 볼 수 있습니다.

bdec2f3ae1055f9.jpeg

이제 Hive 테이블이 생성되었으므로 다른 Hive 쿼리 작업을 제출하여 테이블의 콘텐츠를 선택하고 콘솔에 표시합니다.

다음 속성을 사용하여 다른 작업을 만듭니다.

c16f02d1b3afaa27.jpeg

Job Type(작업 유형)Hive로 설정되어 있고 쿼리 소스 유형은 Query Text(쿼리 텍스트)입니다. 즉, Query Text 텍스트 상자 내에 HiveQL 문 전체를 작성합니다.

나머지 매개변수를 기본값으로 유지한 채 작업을 제출합니다.

e242e50bc2519bf4.jpeg

HiveQL이 모든 레코드를 선택하고 콘솔에 어떻게 표시되는지 확인합니다.

6. 자동 확장

자동 확장은 원하는 상태를 워크로드용 클러스터 워커 노드 수

Dataproc autoscalingPolicies API는 클러스터 리소스 관리를 자동화하는 메커니즘을 제공하고 클러스터 작업자 VM 자동 확장을 사용 설정합니다. 자동 확장 정책은 자동 확장 정책을 사용하는 클러스터 작업자가 확장되어야 하는 방식을 설명하는 재사용 가능한 구성입니다. 확장 경계, 빈도, 강도를 정의하여 클러스터의 수명 동안 클러스터 리소스에 대한 세밀한 제어를 제공합니다.

Dataproc 자동 확장 정책은 YAML 파일을 사용하여 작성되며, 이러한 YAML 파일은 클러스터를 만들기 위해 CLI 명령어로 전달되거나, Cloud 콘솔에서 클러스터를 만들 때 GCS 버킷에서 선택됩니다.

다음은 Dataproc 자동 확장 정책의 예입니다.

policy.yaml

workerConfig:
  minInstances: 10
  maxInstances: 10
secondaryWorkerConfig:
  maxInstances: 50
basicAlgorithm:
  cooldownPeriod: 4m
  yarnConfig:
    scaleUpFactor: 0.05
    scaleDownFactor: 1.0
    gracefulDecommissionTimeout: 1h

7. Dataproc 선택적 구성요소 구성

이렇게 하면 Dataproc 클러스터가 가동됩니다.

Dataproc 클러스터를 만들면 표준 Apache Hadoop 생태계 구성요소가 클러스터에 자동으로 설치됩니다 (Dataproc 버전 목록 참조). 클러스터를 만들 때 선택적 구성요소라는 추가 구성요소를 클러스터에 설치할 수 있습니다.

e39cc34245af3f01.jpeg

콘솔에서 Dataproc 클러스터를 만드는 동안 선택적 구성요소를 사용 설정하고 Jupyter 노트북을 선택적 구성요소로 선택했습니다.

8. 리소스 삭제

클러스터를 삭제하려면 Dataproc 콘솔에서 클러스터를 선택한 후 중지를 클릭합니다. 클러스터가 중지되면 삭제를 클릭하여 클러스터를 삭제합니다.

Dataproc 클러스터가 삭제된 후 코드가 복사된 GCS 버킷을 삭제합니다.

리소스를 정리하고 원치 않는 청구를 중지하려면 Dataproc 클러스터를 먼저 중지한 다음 삭제해야 합니다.

클러스터를 중지하고 삭제하기 전에 HDFS 스토리지에 작성된 모든 데이터를 내구성 있는 스토리지용으로 GCS로 복사해야 합니다.

클러스터를 중지하려면 중지를 클릭합니다.

52065de928ab52e7.jpeg

클러스터가 중지되면 삭제를 클릭하여 클러스터를 삭제합니다.

확인 대화상자에서 삭제를 클릭하여 클러스터를 삭제합니다.

52065de928ab52e7.jpeg