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 |