1. SPARK SESSION 생성
- Spark Session 생성
- Spark 프로그램의 시작은 SparkSession을 만드는 것
- 프로그램마다 하나를 만들어 Spark cluster와 통신 : Singleton 객체
- Spark 2.0에서 처음 소개
- Spark Session을 통해 Spark이 제공해주는 다양한 기능을 사용
- DataFrame, SQL, Streaming, ML API 모두 이 객체로 통신
- config 메소드를 이용해 다양한 환경설정 가능
- 단 RDD와 관련된 작업을 할 때는 SparkSession 밑의 spark Context 객체를 사용
- Spark Session API 문서
- Spark Session 생성 코드
from pyspark.sql import SparkSession # Spark SQL Engine이 중심으로 동작
# SparkSession은 싱글턴
spark = SparkSession.builder\
.master("local[*]")\ # master로 리소스 매니저 지정(local stand alone 모드, cpu thread의 수 지정)
.appName('PySpark Tutorial')\ # # Spark 프로그램의 이름 지정
.getOrCreate() # 여러번 호출한다고 여러개 만들어지지 않고, 하나만 공유됨
...
spark.stop() # spark stop을 통해 프로그램 종료
2. SPARK 환경변수 설정
- Spark Session 환경 변수
- Spark Session을 만들 때 다양한 환경 설정이 가능
- 몇가지 예
- executor별 메모리 : spark.executor.memory ( 기본값 : 1g)
- executor별 CPU수 : spark.executor.cores(YARN에서는 기본값 1)
- driver 메모리 : spark.driver.memorry (기본값 : 1g)
- Shuffle 후 Partition의 수 : spark.sql.shuffle.partitions (기본값 : 최대 200)
- 가능한 환경변수 옵션 링크
- 사용하는 Resource Manage에 따라 환경변수가 많이 달라짐
- Configuration - Spark 3.4.1 Documentation (apache.org)
- Spark Session 환경 설정 방법 4가지
- 환경변수
- $SPARK_HOME/conf/spark_defaults.conf (보통 Spark Cluster 어드민이 관리)
- spark-submit 명령의 커맨드라인 파라미터
- SparkSession 만들 때 지정
- SparkConf
- 만약 위의 4가지가 충돌할 때 우선순위는 아래일수록 높음
- Spark 세션 환경 설정(1. 빌더패턴)
- SparkSession 생성시 일일히 지정
- 아래 코드에서 Spark Configuration은 앞서 언급한 환경변수와 spark_defaults.conf와 spark-submit로 들어온 환경설정이 우선순위를 고려한 상태로 정리된 상태
from pyspark.sql import SparkSession
# SparkSession은 싱글턴
spark = SparkSession.builder\
.master("local[*]")\
.appName('PySpark Tutorial')\
.config("spark.some.config.option1", "some-value")\
.config("spark.some.config.option2", "some-value")\
.getOrCreate()
- Spark 세션 환경 설정(2. SparkConf 클래스 활용)
from pyspark.sql import SparkSession
from pysaprk import SparkConf
conf = SparkConf()
conf.set("spark.app.name", "PySpark Tutorial")
conf.set("spark.master", "local[*]")
# SparkSession은 싱글턴
spark = SparkSession.builder\
.config(config=conf)\
.getOrcreate()
3. SPARK 프로그래밍 플로우, 지원 데이터 소스
- 전체적인 플로우
- Spark 세션(Spark Session) 만들기
- 입력 데이터 로딩
- 데이터 조작 작업 (판다스와 아주 흡사)
- DataFrame API나 Spark SQL을 사용
- 원하는 결과가 나올 때까지 새로운 DataFrame을 생성
- 최종 결과 저장
- Spark Session이 지원하는 데이터 소스
- spark.read(DataFrameReader)를 사용하여 데이터프레임으로 로드
- spark.write(DataFRameWriter)을 사용하여 데이터프레임을 저장
- 많이 사용되는 데이터 소스들
- HDFS 파일
- CSV, JSON, Parquet, ORC, Text, Avro
- Hive 테이블
- JDBC 관계형 데이터베이스
- 클라우드 기반 데이터 시스템(REDSHIFT, SNOWFLAKE, BIGQUERY)
- 스트리밍 시스템(KINESIS, KAFKA)
- HDFS 파일
'데이터 엔지니어링 > Spark' 카테고리의 다른 글
7. 윈도우에 Local Standalone Spark 클러스터 설치, Spark-submit 오류 해결, findspark (0) | 2023.07.28 |
---|---|
6. Spark(개발환경 옵션, Local Standalone, 활용 Demo) (0) | 2023.07.28 |
4. Spark 프로그래밍 : DataFrame(데이터처리, 동작구조) (0) | 2023.07.11 |
3. 빅데이터 처리와 Spark 소개(Spark 소개, Spark 프로그램 실행 옵션) (0) | 2023.07.10 |
2. 빅데이터 처리와 Spark 소개(맵리듀스 프로그래밍) (0) | 2023.07.10 |