본문 바로가기
Spark

[Spark] Spark 내부동작과 클라우드 옵션(Part3. Spark EMR)

by 개복취 2024. 2. 15.

  1. AWS Spark 클러스터 론치
  2. AWS Spark 클러스터 상에서 PySpark 잡 실행 
  3. 요약

AWS Spark 클러스터 론치

AWS EMR을 통해 Spark 클러스터를 론치해보자

 

AWS에서 Spark을 실행하려면

  • EMR (Elastic MapReduce == Yarn == Hadoop) 위에서 실행하는 것이 일반적
  • EMR이란?
    • AWSHadoop 서비스 (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를 사용
    • SparkCluster 모드에 해당

 

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 클러스터 모드로 실행