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'을 검색하고 클러스터 만들기를 클릭합니다.

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

a961b2e8895e88da.jpeg

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

9583c91204a09c12.jpeg

이 페이지의 내용:

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

그러면 Dataproc 클러스터가 실행됩니다.

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

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

7332f1c2cb25807d.jpeg

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

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

작업 유형Hive로 설정되어 있고 쿼리 소스 유형이 쿼리 텍스트로 설정되어 있습니다. 즉, 쿼리 텍스트 텍스트 상자 내에 전체 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 Notebook을 선택적 구성요소로 선택했습니다.

8. 리소스 삭제

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

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

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

클러스터를 중지하고 삭제하기 전에 HDFS 스토리지에 기록된 모든 데이터가 내구성이 있는 스토리지를 위해 GCS에 복사되었는지 확인합니다.

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

52065de928ab52e7.jpeg

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

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

52065de928ab52e7.jpeg