Spark Session
- 프로그램 마다 하나를 만들어서 Spark Cluster와 통신(Singleton 객체)
- DataFrame, SQL, Streaming, ML API 모두 통신
- config 메소드를 통해 환경설정 가능
- RDD 관련 작업은 SparkSession 밑에 sparkContext 객체 사용
Spark 세션 생성
from pyspark.sql import SparkSession
SparkSession은 디자인 패턴 builder의 싱글턴 패턴 사용
- .getOrCreate() 한 프로그램에 하나의 오퍼레이터만 있으면 된다
spark = SparkSession.builder.master("local[*]").appName("앱이름").getOrCreate()
세션 종료
spark.stop()
드라이버 상에 Spark세션을 생성해서 Spark Cluster에 있는 Cluster Manager과 통신을 하게 되고
Cluster Manager에게 명령을 내리고 이를 executor가 실행합니다.
Spark Session 환경 변수
- spark.executor.memory executor별 메모리(기본값 1g)
- spark.executor.cores executor별 CPU수(YARN에서는 기본값 1)
- spark.driver.memory driver 메모리(기본값 1g)
- spark.sql.shuffle.partitions Shuffle후 Partition의 수(기본값 최대 200)
환경 변수 설정 방법
1. 환경변수
2. $SPARK_HOME/conf/spark_defaults.conf
3. spark-submit 명령의 커맨드라인 파라미터
4. SparkSession 만들때 지정
환경 변수 충돌시 우선순위가 가장 높은 순서는 4 > 3 > 2 > 1
1,2번의 경우 보통 Spark Cluster 어드민이 관리.
3번의 경우 spark-submit --master "local[3]" [파일명].py 와 같이 실행.
4번의 경우 1) 빌더 디자인패턴을 사용하거나 2) SparkConf라는 사용해서 SparkSession에 파라미터로 넘겨줌
1) SparkSession 만들때 일일이 지정
우선순위가 정해진 형태로 이미 들어가 있고 지정한 내용은 overwrite되어 들어감
spark = SparkSession.builder.master("local[*]").appName("앱이름").config("spark.some.config.option1", "some-value").config("spark.some.config.option1", "some-value").getOrCreate()
2) SparkConf 객체를 만들어서 환경 설정하고 SparkSession에 지정
from pyspark import SparkConf
conf = SparkConf()
conf.set("spark.app.name", "PySpark Tutorial")
conf.set("spark.master", "local[*]")
spark = SparkSession.builder.config(config=conf).getOrCreate()
전체적인 플로우
Spark Session을 만들고 환경변수 설정을 해준뒤 ➡️ SparkSession API로 입력데이터를 로딩한다(이경우 주로 데이터프레임 ➡️ DataFrame API나 Spark SQL을 사용해서 Spark Cluster 내에서 데이터 조작 작업(원하는 결과 나올때까지 새로운 DataFrame 생성) ➡️ 최종적으로 결과를 HDFS나 RDBMS, Hive에 저장
참고
https://spark.apache.org/docs/latest/api/python/reference/pyspark.sql/spark_session.html
https://spark.apache.org/docs/latest/configuration.html#application-properties
'데브코스 데이터엔지니어링' 카테고리의 다른 글
| [Spark] AWS EMR 클라우드 기반 Spark 클러스터 실행 (0) | 2025.01.01 |
|---|---|
| [Spark] Spark 데이터 프레임 연산 Transformations, Actions, Job (1) | 2025.01.01 |
| [Spark] YARN 기반 Spark Cluster 프로그램의 구조 (1) | 2024.12.31 |
| [Spark] 아파치 스파크 3.0이란? (0) | 2024.12.31 |
| [Hadoop] 맵리듀스 프로그래밍 실행, hdfs 명령어 정리 (0) | 2024.12.31 |