[Spark] Spark 프로그램 구조 _TIL

Spark Session

- Spark 프로그램의 시작은 SparkSession을 만드는 것

  • 프로그램마다 하나를 만들어 Spark Cluster와 통신(singleton 객체)
  • Spark 2.0에서 처음 소개됨

- Spark Session을 통해 Spark이 제공해주는 다양한 기능을 사용

  • DataFrame, SQL, Straeming, ML Api모두 이 객체로 통신
  • config 메소드를 이용해 다양한 환경설정 가능
  • 단 RDD와 관련된 작업을 할때는 SparkSession밑의 sparkContext객체를 사용

- 관련 문서 : https://spark.apache.org/docs/3.1.1/api/python/reference/api/pyspark.sql.SparkSession.html

 

pyspark.sql.SparkSession — PySpark 3.1.1 documentation

Interface through which the user may create, drop, alter or query underlying databases, tables, functions, etc.

spark.apache.org

- Spark 세션 생성 _ PySpark 예제

# Spark SQl Engine이 중심으로 동작함 (SQL 위에 Session이 존재)
from pyspark.sql impoprt SparkSession

# SparkSessiondms 싱글톤

spark = SparkSession.builder\
		.master("local[*]")\
        .appName('PySpark Tutorial')\
        .getOrCreate()
        
...

spark.stop()

 

 

Spark Session 환경 변수

- Spark Session을 만들 때 다양한 환경 설정이 가능 

- 몇 가지 예

  • executor별 메모리 : spark.executor.memery (기본값: 1g)
  • executor별 CPU수: spark.executor.cores (YARN에서는 기본값 1)
  • dirver 메모리: spark.driver.memory (기본값: 1g)
  • Shuffle후 Partition의 수: spark.sql.shuffle.partitions (기본값: 최대 200)

-가능한 모든 환경변수 옵션을 여기서 찾을 수 있음

  • 사용하는 Resource Manager에 따라 환경변수가 많이 달라짐

 

Spark Session환경 설정 방법 4가지

1. 환경변수

2. $SPARK_HOME/conf/spark_defaults.conf

3. spark-submit 명령의 커맨드라인 파라미터

4. SparkSession만들 때 지정 (SparkConf)

 

* 위에 환경 설정 시 적용되는 우선순위는 4번이 제일 높고 1로 갈 수록 낮아짐

 

전체적인 Flow

- Spark 세션 만들기

- 입력 데이터 로딩

- 데이터 조작 작업 (판다스와 아주 흡사)

  • DataFrame Api나 Spark SQL을 사용
  • 원하는 결과가 나올때까지 새로운 DataFrame을 생성

- 최종 결과 저장

 

Spark Session이 지원하는 데이터 소스

 

Data Sources - Spark 3.4.1 Documentation

 

spark.apache.org

- spark.read(DataFrameReader)를 사용하여 데이터프레임으로 로드

- spark.wtite(DataFrameWriter)를 사용하여 데이터프레임을 저장

- 많이 사용되는 데이터 소스들

  • HDFS파일
    • CSV, JSON, Parquet, ORC, Text, Avro
    • Hive 테이블
  • JDBC 관계형 데이터베이스
  • 클라우드 기반 데이터 시스템
  • 스트리밍 시스템

'Programmers TIL' 카테고리의 다른 글

[Kafka] Kafka 역사와 소개 _TIL  (0) 2023.07.12
[Spark] Spark SQL _TIL  (2) 2023.07.05
[Spark] Spark 데이터 시스템 구조 _TIL  (1) 2023.07.04
[Airflow] Airflow 기타 기능 _TIL  (1) 2023.06.21
[K8s] Kubernetes(K8s)_TIL  (1) 2023.06.16