데이터/Spark

[Spark] 8. Spark with AWS

김줘 2024. 12. 3. 23:34

Spark with AWS

  • AWS에서 Spark를 실행하기 위해서는 *EMR(Elastic MapReduce) 위에서 실행하는 것이 일반적
  • *EMR?
    • AWS의 Hadoop 서비스
      • Hadoop(Yarn), Spark, Hive, Notebook 등이 설치되어 제공되는 서비스
      • EC2 서버들을 worker node로 사용하고 S3를 HDFS로 사용
      • AWS 내의 다른 서비스와 연동이 쉽다!

Spark on EMR

  • AWS의 EMR 클러스터 생성
  • EMR 생성 시 Spark를 소프트웨어로 선택

생성 방법

  1. EMR 클러스터 생성
    • EMR 콘솔로 이동 및 Create Cluster 선택
    • Cluster Name 지정
    • 소프트웨어 구성
      • Spark가 포함된 EMR 릴리즈 선택
      • Spark 및 필요 애플리케이션이 포함된 애플리케이션 선택
    • 하드웨어 구성
      • Master Node 선택 -> AWS의 Instance type
      • Core Node 입력 -> Number of instances
    • Create Cluster!
  2. Master Node 포트 설정
    • EMR 클러스터 Summary 탭 -> Security groups for Master 선택
    • Security Groups 페이지에서 마스터 노드의 security group ID를 클릭
    • Edit inbound rules 버튼 클릭 후 Add rule 버튼 선택
    • 포트번호로 22를 입력, Anywhere IPv4 선택, Save rules 버튼 선택
  3. 정상 실행 확인!
    • Spark History Server 접속 및 확인

PySpark Job 실행 예제

  1. 입력 데이터를 S3로 로딩
  2. 입력 데이터 ELT
    • 입력 CSV 파일을 분석하여 결과를 S3에 다시 저장
    • PySpark 잡 코드 
    • from pyspark.sql import SparkSession from pyspark.sql.functions import col 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))
  1. PySpark 잡 실행 및 확인
    • Spark 마스터 노드에 ssh로 로그인하여 spark-submit을 통해 실행
      • $ ssh -i {앞서 다운로드 받은 프라이빗 키}.pem hadoop@{마스터 노드 호스트 이름}
      • $ spark-submit --master yarn stackoverflow.py
    • S3에서 PySpark Job 실행 결과 확인