Spark & Hadoop/Spark

[Spark] SparkSession 생성과 환경변수 세팅

YSY^ 2023. 9. 30. 16:18

Spark Session 생성

  • Spark 프로그램의 시작은 SparkSession을 만드는 것
    • 프로그램마다 하나를 만들어 Spark Cluster와 통신: Singleton 객체
    • Spark 2.0에서 처음 소개됨
  • Spark Session을 통해 Spark이 제공해주는 다양한 기능을 사용
    • DataFrame, SQL, Streaming, ML API 모두 이 객체로 통신
    • config 메소드를 이용해 다양한 환경설정 가능 (단계별로 하나씩 설정도 가능)
    • 단 RDD와 관련된 작업을 할때는 SparkSession 밑의 sparkContext 객체를 사용
  • Spark Session API Document : 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 Session 생성 예제

  • Spark 2.0이 나오면서 SparkSession 이 처음으로 소개되었고, Dataframe&Dataset&Sql이 sparksql엔진 위에서 돌아가는 것으로 변경되었기에, Sparksession도 pyspark.sql안에 위치하게됨.
  • master("local[*]") : resource Manager 지정 : Local을 활용, [*]은 CPU(thread)수를 지정
  • appName('PySpark Tutorial') : spark 프로그램의 이름을 지정
  • getOrCreate() : spark session의 싱클턴 오브젝트(한 프로그램에 하나만 있으면 됨)
from pyspark.sql import SparkSession  #Spark SQL Engine이 중심으로 동착함

# SparkSession은 싱글턴
spark = SparkSession.builder\
 .master("local[*]")\  # resource Manager 지정 : Local을 활용, [*]은 CPU(thread)수를 지정
 .appName('PySpark Tutorial')\ #spark 프로그램의 이름을 지정
 .getOrCreate() #spark session의 싱클턴 오브젝트(한 프로그램에 하나만 있으면 됨)
…
spark.stop()

pyspark.sql 제공 주요 기능

  • pyspark.sql.SparkSession
  • pyspark.sql.DataFrame
  • pyspark.sql.Column
  • pyspark.sql.Row
  • pyspark.sql.functions
  • pyspark.sql.types
  • pyspark.sql.Window

Spark Session 환경 변수

  • Spark Session을 만들 때 다양한 환경 설정이 가능
  • 몇 가지 예
    • executor별 메모리: spark.executor.memory (기본값: 1G)
    • executor별 CPU수: spark.executor.cores (YARN에서는 기본값 1)
    • driver 메모리: spark.driver.memory (기본값: 1G)
    • Shuffle후 Partition의 수: spark.sql.shuffle.partitions (기본값: 최대 200)
  • 가능한 모든 환경변수 옵션은 여기에서 찾을 수 있음
    • 사용하는 Resource Manager에 따라 환경변수가 많이 달라짐

Spark Session 환경 변수 설정방법

  1. 환경변수    (Spark Cluster Admin 이 관리)
  2. $SPARK_HOME/conf/spark_defaults.conf  (Spark Cluster Admin 이 관리)
  3. spark-submit 명령의 커맨드라인 파라미터
  4. SparkSession 만들때 지정
    • SparkConf
  • 충돌시 우선순위는 숫자가 클수록 우선순위임.
  • 환경설정 방법(1)
    • 아래 시점의 Spark Configuration은 앞서 언급한 환경변수와 spark_defaults.conf와 spark-submit로 들어온 환경설정이 우선순위를 고려한 상태로 정리된 상태이며, 그 위에서 새로운 환경을 overwrite하는 것임
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()
  • 환경설정 방법(2)
    • SparkConf라는 오브젝트를 만들어서 거기에 환경을 설정하고, 한번에 Sparksession에 넘겨줌
    • SparkConf를 만드는 방법은, 개체를 만든다음, set라는 메소드를 이용하여 환경변수 이름과 값을 지정
from pyspark.sql import SparkSession
from pyspark import SparkConf
conf = SparkConf()  #개체를 만들고
conf.set("spark.app.name", "PySpark Tutorial") # 환경변수의 이름과 값을 지정
conf.set("spark.master", "local[*]")
# SparkSession은 싱글턴
spark = SparkSession.builder\
 .config(conf=conf) \
 .getOrCreate()

SparkSession Flow

  1. Spark 세션(SparkSession)을 만들기
  2. 입력 데이터 로딩
  3. 데이터 조작 작업 (판다스와 아주 흡사)
    • DataFrame API나 Spark SQL을 사용
    • 원하는 결과가 나올때까지 새로운 DataFrame을 생성
  4. 최종 결과 저장

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

  • spark.read(DataFrameReader)를 사용하여 데이터프레임으로 로드
  • DataFrame.write(DataFrameWriter)을 사용하여 데이터프레임을 저장
  • 많이 사용되는 데이터 소스들
    1. HDFS 파일
      1. CSV, JSON, Parquet, ORC, Text, Avro
      2. Parquet/ORC/Avro
      3. Hive 테이블
    2. JDBC 관계형 데이터베이스
    3. 클라우드 기반 데이터 시스템
    4. 스트리밍 시스템

위 포스팅은 [파이썬으로 해보는 Spark 프로그래밍 with 프로그래머스] 강의를 듣고 정리한 내용입니다

728x90
반응형