- AWS Spark 클러스터 론치
- AWS Spark 클러스터 상에서 PySpark 잡 실행
- 요약
AWS Spark 클러스터 론치
AWS EMR을 통해 Spark 클러스터를 론치해보자
AWS에서 Spark을 실행하려면
- EMR (Elastic MapReduce == Yarn == Hadoop) 위에서 실행하는 것이 일반적
- EMR이란?
- AWS의 Hadoop 서비스 (On-demand Hadoop)
- Hadoop (YARN), Spark, Hive, Notebook 등등이 설치되어 제공되는 서비스
- EC2 서버들을 worker node로 사용하고 S3를 HDFS로 사용
- AWS 내의 다른 서비스들과 연동이 쉬움 (Kinesis, DynamoDB, Redshift, ...)
Spark on EMR 실행 및 사용 과정
- AWS의 EMR (Elastic MapReduce - 하둡) 클러스터 생성
- EMR 생성시 Spark을 실행 (옵션으로 선택)
- S3를 기본 파일 시스템으로 사용
- EMR의 마스터 노드를 드라이버 노드로 사용
- 마스터 노드를 SSH로 로그인
- spark-submit를 사용
- Spark의 Cluster 모드에 해당
Spark 클러스터 매니저와 실행 모델 요약
클러스터 매니저
|
실행 모드 (deployed mode)
|
프로그램 실행 방식
|
local[n]
|
Client
|
Spark Shell, IDE, 노트북
|
YARN
|
Client
|
Spark Shell, 노트북
|
YARN
|
Cluster
|
spark-submit
|
Zeppelin이란? : Spark전용 노트북
https://zeppelin.apache.org/: 노트북 (Spark, SQL, Python)
AWS Spark 클러스터 상에서 PySpark 잡 실행
AWS Spark 클러스터 상에서 PySpark 잡을 실행해보자
PySpark 잡 실행 과정
- Spark 마스터노드에 SSH로 로그인
- 이를 위해 마스터노드의 TCP 포트번호 22번을 오픈해야함
- spark-submit을 이용해서 실행하면서 디버깅
- 두 개의 잡을 AWS EMR 상에서 실행해 볼 예정
입력 데이터를 S3로 로딩
- Stackoverflow 2022년 개발자 서베이 CSV 파일을 S3 버킷으로 업로드 : 익명화된 83,339개의 서베이 응답
- s3://spark-tutorial-dataset/survey_results_public.csv
S3_DATA_INPUT_PATH = 's3://spark-tutorial-dataset/survey_results_public.csv'
S3_DATA_OUTPUT_PATH = 's3://spark-tutorial-dataset/data-output'
spark = SparkSession.builder.appName('Tutorial').getOrCreate()
df = spark.read.csv(S3_DATA_INPUT_PATH, header=True)
print('# of records {}'.format(df.count()))
learnCodeUS = df.where((col('Country') == 'United States of America')).groupby('LearnCode').count()
learnCodeUS.write.mode('overwrite').csv(S3_DATA_OUTPUT_PATH) # parquet learnCodeUS.show()
print('Selected data is successfully saved to S3: {}'.format(S3_DATA_OUTPUT_PATH))
PySpark 잡 실행 결과를 S3에서 확인하기
요약...
- AWS에서 Spark은 EMR의 일부로 동작
- EMR상의 Spark 잡은 YARN 클러스터 모드로 실행
'Spark' 카테고리의 다른 글
[Spark] Spark 내부동작과 클라우드 옵션(Part2. Spark ML) (2) | 2024.02.14 |
---|---|
[Spark] Spark 내부동작과 클라우드 옵션(Part1. Spark 내부동작) (1) | 2024.02.13 |
[Spark] Spark 프로그래밍: SQL (3) | 2024.02.13 |
[Spark] Spark 프로그래밍: DataFrame (2) (0) | 2024.02.12 |
[Spark] Spark 프로그래밍: DataFrame (1) (1) | 2024.02.11 |