본문 바로가기

카테고리 없음

Spark: Configuring Spark Session

Spark Session과 설정(Configuring Spark Session)

대부분의 Spark 설정은 기본값을 따르거나 코드 내에서 직접 지정할 수 있다. 하지만, 특정 환경에서는 개발자가 직접 환경 변수를 설정해야 정상적으로 실행될 수도 있다.

예를 들어, SPARK_HOME을 설정하지 않으면 Spark 실행 파일을 찾을 수 없고, HADOOP_CONF_DIR 같은 변수가 없으면 Hadoop 연동이 안 될 수도 있다.

로컬에서 Spark 실행환경을 세팅하기 위해, 전에 SPARK_HOME, HADOOP_HOME, PYSPARK_PYTHON 환경변수를 전에 설정했었다.

Spark-submit은 우리가 command-line options를 이용하여(ex) -- master) 어플리케이션을 configure할 수 있게 해준다

SparkConf Object도 전에 사용해본적이 있다.

 

* uilts.py 파일에 sparkSession에 대한 configuration을 설정하는 함수를 정의하여 HelloSpark.py 함수에 불러온다.

위처럼 Apache Spark는 highly configuration한 시스템이다.

configuration 설정하는데, 4가지의 method를 이용할 수 가 있다.

이처럼 여러 위치에서 설정을 지정할 수 가 있는데, 같은 설정을 두 곳에서 설정하면 어떤 설정들이 우선 적용되고 어떤 경우에 어디에서 configuration을 하는 것이 좋을까? 이것에 대해 알아보고자 한다.

Spark Session이란?

  • SparkSession은 Apache Spark에서 SQL, DataFrame, Dataset API를 실행하기 위한 엔트리 포인트이다.
  • 이전 버전에서는 SQLContext, HiveContext, SparkContext 등을 개별적으로 사용했지만, Spark 2.0 이후부터는 SparkSession이 모든 것을 통합하여 관리한다.
  • SparkSession을 사용하면 클러스터 및 리소스 관리, 설정 적용 등을 간편하게 수행할 수 있다.

2.SparkSession의 설정 방식

Spark를 실행할 때 다양한 방식으로 설정을 적용할 수 있다. Spark는 설정값을 여러 곳에서 가져와 최종적으로 하나의 설정 집합을 만든다.

1) Spark 설정 적용 우선순위

Spark의 설정은 아래와 같은 우선순위로 적용된다.

  1. 환경 변수 (Environment Variables)
    • SPARK_HOME, HADOOP_HOME, PYSPARK_PYTHON 등의 환경 변수.
    • 가장 낮은 우선순위를 가짐.
  2. spark-defaults.conf 파일
    • SPARK_HOME/conf/spark-defaults.conf에 설정된 값.
    • 기본적으로 모든 Spark 애플리케이션에 공통적으로 적용됨.
  3. spark-submit의 command-line 옵션
    • 예) spark-submit --master yarn --conf spark.executor.memory=4g
    • 실행 시 특정 옵션을 적용하는 방식.
    • spark-defaults.conf보다 높은 우선순위를 가짐.
  4. SparkConf 객체 (Application Code에서 직접 설정)
    • SparkSession.builder.config("spark.some.config", "value")
    • spark.conf.set("spark.some.config", "value")
    • 가장 높은 우선순위를 가지며, 실행 중에도 변경 가능.

 

2) Spark 설정 적용 방식

Spark 설정은 두 가지 범주로 나뉜다.

  • 배포 관련 설정 (Deployment-related Configs)
    • 예: spark.driver.memory, spark.executor.instances
    • 어떤 클러스터 매니저(YARN, Kubernetes)를 사용하는지에 따라 달라질 수 있음.
  • 애플리케이션 런타임 동작 설정 (Application Runtime Behavior)
    • 예: spark.task.maxFailures
    • Spark 애플리케이션이 실행되는 동안 동작을 조절하는 설정.

 

3. 같은 설정을 여러 곳에서 지정하면?

  • 같은 설정을 여러 곳에서 지정할 경우, 우선순위가 높은 설정이 최종적으로 적용된다.
  • 즉, Application Code > Command-line 옵션 > spark-defaults.conf > 환경 변수 순으로 적용됨.

4. Spark 설정 시 유의할 점

  1. 환경 변수를 설정해야 실행이 정상적으로 이루어질 수 있음
    • 예: SPARK_HOME, HADOOP_CONF_DIR을 설정하지 않으면 실행 불가.
  2. 마스터 URL을 하드코딩하지 않는 것이 좋음
    • local[*], yarn, k8s:// 등 실행 환경이 변할 수 있기 때문에 코드에서 직접 설정하는 것보다 spark-submit을 활용하는 것이 좋음.
  3. SparkConf 객체를 활용하면 유연한 설정이 가능
    • 코드 내부에서 실행 중에도 설정을 변경할 수 있음.
    • 예: spark.conf.set("spark.sql.shuffle.partitions", 50)

Spark는 다양한 방법으로 설정을 적용할 수 있으며, 설정 우선순위를 이해하는 것이 중요하다. 배포 환경에 따라 다르게 설정할 수도 있으므로, 환경 변수, config 파일, 커맨드라인 옵션, 코드 설정을 적절히 활용해야 한다.

* Application Code에서 설정하는 것이 가장 우선순위가 높다는 점을 기억하자!