Managed Service for Apache Spark

1. 소개 - Managed Service for Apache Spark

Managed Service for Apache Spark는 Apache Spark, Apache Flink, Presto, 기타 많은 오픈소스 도구 및 프레임워크를 실행하기 위한 확장성이 뛰어난 완전 관리형 서비스입니다. Managed Service for Apache Spark를 전 세계에서 데이터 레이크 현대화, ETL / ELT, 안전한 데이터 과학에 사용할 수 있습니다. Managed Service for Apache Spark는 BigQuery, Cloud Storage, Gemini Enterprise Agent Engine, Knowledge Catalog를 비롯한 여러 Google Cloud 서비스와도 완전히 통합됩니다.

Managed Service for Apache Spark는 두 가지 배포 모드로 제공됩니다.

  • Managed Apache Spark 서버리스를 사용하면 인프라 및 자동 확장을 구성하지 않고도 PySpark 작업을 실행할 수 있습니다. Managed Apache Spark는 PySpark 일괄 워크로드 및 세션 / 노트북을 지원합니다.
  • Managed Apache Spark 클러스터를 사용하면 Flink 및 Presto와 같은 오픈소스 도구 외에도 YARN 기반 Spark 워크로드의 Hadoop YARN 클러스터를 관리할 수 있습니다. 자동 확장을 비롯하여 원하는 만큼 수직 또는 수평 확장을 사용하여 클라우드 기반 클러스터를 맞춤설정할 수 있습니다.

2. Google Cloud VPC에서 Managed Apache Spark 클러스터 만들기

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

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

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

a961b2e8895e88da.jpeg

이제 클러스터 만들기 페이지가 표시됩니다.

9583c91204a09c12.jpeg

이 페이지의 내용:

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

이렇게 하면 Managed Apache Spark 클러스터가 가동됩니다.

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

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

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. 웹 인터페이스 및 구성요소 게이트웨이

Managed Apache Spark 클러스터 콘솔에서 클러스터 이름을 클릭한 후 웹 인터페이스 탭을 클릭합니다.

6398f71d6293d6ff.jpeg

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

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

Managed Apache Spark 클러스터가 실행 중인 상태에서 PySpark 일괄 작업을 만들고 작업을 Managed Apache Spark 클러스터에 제출합니다.

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

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 .....")

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

5767fc7c50b706d3.jpeg

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

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

a7ca90f5132faa31.jpeg

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

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

bdec2f3ae1055f9.jpeg

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

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

c16f02d1b3afaa27.jpeg

작업 유형 이 Hive 로 설정되고 쿼리 소스 유형이 쿼리 텍스트 인 것을 확인할 수 있습니다. 즉, 쿼리 텍스트 텍스트 상자 내에 전체 HiveQL 문을 작성합니다.

나머지 매개변수는 기본값으로 유지하고 작업을 제출합니다.

e242e50bc2519bf4.jpeg

HiveQL이 모든 레코드를 선택하고 콘솔에 표시하는 방법을 확인합니다.

6. 자동 확장

자동 확장은 워크로드에 대해 "적절한" 클러스터 작업자 노드 수를 추정하는 작업입니다.

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

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

다음은 Managed Apache Spark 자동 확장 정책의 예입니다.

policy.yaml

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

7. Managed Apache Spark 선택적 구성요소 구성

이렇게 하면 Managed Apache Spark 클러스터가 가동됩니다.

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

e39cc34245af3f01.jpeg

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

8. 리소스 정리

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

Managed Apache Spark 클러스터가 삭제되면 코드가 복사된 GCS 버킷을 삭제합니다.

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

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

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

52065de928ab52e7.jpeg

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

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

52065de928ab52e7.jpeg