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의 설정은 아래와 같은 우선순위로 적용된다.
- 환경 변수 (Environment Variables)
- SPARK_HOME, HADOOP_HOME, PYSPARK_PYTHON 등의 환경 변수.
- 가장 낮은 우선순위를 가짐.
- spark-defaults.conf 파일
- SPARK_HOME/conf/spark-defaults.conf에 설정된 값.
- 기본적으로 모든 Spark 애플리케이션에 공통적으로 적용됨.
- spark-submit의 command-line 옵션
- 예) spark-submit --master yarn --conf spark.executor.memory=4g
- 실행 시 특정 옵션을 적용하는 방식.
- spark-defaults.conf보다 높은 우선순위를 가짐.
- 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 설정 시 유의할 점
- 환경 변수를 설정해야 실행이 정상적으로 이루어질 수 있음
- 예: SPARK_HOME, HADOOP_CONF_DIR을 설정하지 않으면 실행 불가.
- 마스터 URL을 하드코딩하지 않는 것이 좋음
- local[*], yarn, k8s:// 등 실행 환경이 변할 수 있기 때문에 코드에서 직접 설정하는 것보다 spark-submit을 활용하는 것이 좋음.
- SparkConf 객체를 활용하면 유연한 설정이 가능
- 코드 내부에서 실행 중에도 설정을 변경할 수 있음.
- 예: spark.conf.set("spark.sql.shuffle.partitions", 50)
Spark는 다양한 방법으로 설정을 적용할 수 있으며, 설정 우선순위를 이해하는 것이 중요하다. 배포 환경에 따라 다르게 설정할 수도 있으므로, 환경 변수, config 파일, 커맨드라인 옵션, 코드 설정을 적절히 활용해야 한다.
* Application Code에서 설정하는 것이 가장 우선순위가 높다는 점을 기억하자!