이야기박스
GCP. Dataproc 간단한 리뷰 본문
오늘은 Dataproc에 대해서 간단하게만 정리를 해보도록 하겠습니다.
예전부터 오랫동안 사용해왔었는데, 늘 미루다 이제야 짧게나마 적어두네요.
Dataproc이란?
GCP에서 제공하는 Managed Hadoop 서비스입니다.
Dataproc의 과금
vCPU 수와 실행시간에 따라 과금을 부과합니다.
지원 버전
Hadoop 3.2.2까지 지원이 되고, 기타 하둡 생태계는 3.1.2 버전으로 지원이 되고 있네요. (2022년 05월 기준)
클러스터 초기화 작업
클러스터 시작 시, 사용자 지정 스크립트를 이용하여 클러스터 설정을 구성할 수 있습니다.
Cluster Lifecycle
Dataproc에서는 유휴시간을 주고 이 시간 내에 어떠한 작업도 제출되지 않으면, 클러스터를 자동 삭제시킬 수 있습니다.
이를 이용하여 불필요한 컴퓨터 자원 비용을 절감할 수 있게 됩니다.
Cluster Autoscaling
Dataproc은 다수의 작업 처리를 위해 오토스케일링을 지원합니다. 하지만 GCP 문서에서는 아래의 항목들에 대해서는 오토스케일링 기능을 지양하라고 안내하고 있습니다.
- HDFS에 따른 확장
- Spark Structured Streaming
- 유휴 클러스터
- Yarn Node Label
위 내용은 아래 문서에서 확인할 수 있습니다.
Migration 지원. (On-premise Hadoop to Dataproc)
문서를 보면 데이터는 GCS(Google Cloud Storage)로, 작업은 Dataproc으로 이관을 권장하는 듯 합니다.
임시 클러스터 사용
작업이 실행되는 계산용 클러스터로 사용할 수 있다고 안내를 하고 있습니다. 작업이 종료되면 클러스터를 바로 삭제하여 필요한 시간에 리소스를 집중시킬 수 있게 됩니다.
Kerberos 지원
클러스터 생성시에 옵션으로 지정이 가능합니다. 사용 설정을 활성화하면 클러스터 내에 KDC가 생성이 됩니다.
- https://cloud.google.com/dataproc/docs/concepts/configuring-clusters/security?hl=ko&skip_cache=false
Alpha. Dataproc spark job on GKE
Dataproc을 Kubernetes에 올려서 서비스를 제공하려는 것 같습니다. 다만 아직 정식 버전 출시는 되지 않았고, alpha 버전 제공만 되고 있습니다.
IAM Role
다소 복잡하기에 참고할 수 있는 링크만 첨부해둡니다.
Quickstart
이번에는 콘솔이 아닌 CLI (gcloud) 명령어를 통한 사용 예제를 가볍게 살펴볼 예정입니다.
Dataproc은 gcloud 명령어 뿐만 아니라 REST API, Java, Python, Go 등의 라이브러리를 통하여 관리를 할 수 있습니다.
- gcloud dataproc commands: https://cloud.google.com/sdk/gcloud/reference/dataproc/clusters?hl=ko
gcloud 커맨드 사용
gcloud 커맨드는 아래 두 가지 방법을 이용하여 사용할 수 있습니다.
- Cloud SDK 설치 후, 인증
- GCP 콘솔에서 Cloud Shell 창을 활용
Dataproc Cluster 관리
# Create Cluster
gcloud dataproc clusters create story-test-cluster \
--region=us-central1 \
--num-masters=1 \
--num-workers=2 \
--master-machine-type=e2-standard-2 \
--worker-machine-type=e2-standard-2 \
--master-boot-disk-size=30 \
--worker-boot-disk-size=30 \
--master-boot-disk-type=pd-standard \
--worker-boot-disk-type=pd-standard
위 커맨드로 생성된 클러스터는 콘솔 화면에서 확인할 수 있습니다.
# Delete Cluster
gcloud dataproc clusters delete story-test-cluster --region=us-central1
Spark Job
Dataproc 클러스터의 관리와 마찬가지로 gcloud, REST, Java, Python, Go 등 다양한 방식으로 작업 관리가 가능합니다.
위와 마찬가지로 gcloud를 활용한 샘플을 아래 작성해두었습니다.
# Job Submit Example
Dataproc은 GC에 있는 Script / External Library를 읽을 수 있기 때문에 작업 파일은 모두 GCS에 업로드하였습니다.
$ gsutil cat gs://story-bucket/test-job.py
#!/usr/bin/python
import pyspark
sc = pyspark.SparkContext()
rdd = sc.parallelize(['Hello,', 'world!'])
words = sorted(rdd.collect())
이후 아래 명령어로 작업을 제출합니다.
gcloud dataproc jobs submit pyspark \
gs://story-bucket/test-job.py \
--cluster=story-test-cluster \
--region=us-central1
작업 산출물입니다.
Job [4dd91ed5e82e41e9a2c5a429ce420f67] submitted.
Waiting for job output...
21/08/02 06:05:33 INFO org.sparkproject.jetty.util.log: Logging initialized @5425ms to org.sparkproject.jetty.util.log.Slf4jLog
21/08/02 06:05:33 INFO org.sparkproject.jetty.server.Server: jetty-9.4.40.v20210413; built: 2021-04-13T20:42:42.668Z; git: b881a572662e1943a14ae12e7e1207989f218b74; jvm 1.8.0_292-b10
21/08/02 06:05:33 INFO org.sparkproject.jetty.server.Server: Started @5609ms
21/08/02 06:05:33 INFO org.sparkproject.jetty.server.AbstractConnector: Started ServerConnector@284db6d{HTTP/1.1, (http/1.1)}{0.0.0.0:43967}
21/08/02 06:05:35 INFO org.apache.hadoop.yarn.client.RMProxy: Connecting to ResourceManager at story-test-cluster-m/10.128.0.52:8032
21/08/02 06:05:35 INFO org.apache.hadoop.yarn.client.AHSProxy: Connecting to Application History server at story-test-cluster-m/10.128.0.52:10200
21/08/02 06:05:36 INFO org.apache.hadoop.conf.Configuration: resource-types.xml not found
21/08/02 06:05:36 INFO org.apache.hadoop.yarn.util.resource.ResourceUtils: Unable to find 'resource-types.xml'.
21/08/02 06:05:39 INFO org.apache.hadoop.yarn.client.api.impl.YarnClientImpl: Submitted application application_1627884164829_0001
21/08/02 06:05:40 INFO org.apache.hadoop.yarn.client.RMProxy: Connecting to ResourceManager at story-test-cluster-m/10.128.0.52:8030
21/08/02 06:05:43 INFO com.google.cloud.hadoop.repackaged.gcs.com.google.cloud.hadoop.gcsio.GoogleCloudStorageImpl: Ignoring exception of type GoogleJsonResponseException; verified object already exists with desired state.
['Hello,', 'world!']
21/08/02 06:05:53 INFO org.sparkproject.jetty.server.AbstractConnector: Stopped Spark@284db6d{HTTP/1.1, (http/1.1)}{0.0.0.0:0}
Job [4dd91ed5e82e41e9a2c5a429ce420f67] finished successfully.
done: true
driverControlFilesUri: gs://dataproc-staging-us-central1-322764224155-8yffxgeo/google-cloud-dataproc-metainfo/047ad27f-4778-4ea3-b4dc-f4eb19cf54ba/jobs/4dd91ed5e82e41e9a2c5a429ce420f67/
driverOutputResourceUri: gs://dataproc-staging-us-central1-322764224155-8yffxgeo/google-cloud-dataproc-metainfo/047ad27f-4778-4ea3-b4dc-f4eb19cf54ba/jobs/4dd91ed5e82e41e9a2c5a429ce420f67/driveroutput
jobUuid: e89fa37a-ec42-3566-ae32-18188fdbd164
placement:
clusterName: story-test-cluster
clusterUuid: 047ad27f-4778-4ea3-b4dc-f4eb19cf54ba
pysparkJob:
mainPythonFileUri: gs://story-bucket/test-job.py
reference:
jobId: 4dd91ed5e82e41e9a2c5a429ce420f67
projectId: cloudinfra-272106
status:
state: DONE
stateStartTime: '2021-08-02T06:05:58.729182Z'
statusHistory:
- state: PENDING
stateStartTime: '2021-08-02T06:05:25.534603Z'
- state: SETUP_DONE
stateStartTime: '2021-08-02T06:05:25.565755Z'
- details: Agent reported job success
state: RUNNING
stateStartTime: '2021-08-02T06:05:25.801461Z'
yarnApplications:
- name: test-job.py
progress: 1.0
state: FINISHED
trackingUrl: http://story-test-cluster-m:8088/proxy/application_1627884164829_0001/
그리고 작업 목록도 콘솔에서 함께 확인할 수 있습니다.
후기
정말 오랫동안 미루어왔던 숙제를 드디어 해결한 느낌입니다. 이런 숙제가 아직도 많은데, 조금씩 해두어야겠습니다.
'Computer & Data > Cloud Platform' 카테고리의 다른 글
gsutil ; change directory path (1) | 2020.06.11 |
---|---|
AWS SNS & AWS Athena (0) | 2019.08.14 |
AWS Glue 실전 (0) | 2019.08.13 |
GCP; App Engine (0) | 2019.05.30 |
GCP; Cloud Pub/Sub (0) | 2019.05.23 |