Hadoop EcoSystem

[Spark] SparkSession VS SparkContext

비번변경 2023. 11. 27. 16:16

개요

Spark 샘플 코드를 보면 데이터를 로드하고 처리하기 전에 SparkSession, SparkContext 객체를 선언하는 것으로 보인다. 각각 어떤 역할을 하는지 정리한다.

 

 

SparkContext

SparkContext는 Spark 1부터 사용할 수 있는 Spark 기능의 진입점에 해당한다. 클러스터에서 RDD, accumulators, 브로드캐스트 변수 등을 구축하는 데 사용하는 Spark 클러스터의 연결이라고 할 수 있다. SparkContext는 애플리케이션이 Resource Manager를 사용해 Spark 클러스터에 연결할 수 있게 한다. 참고로 SparkContext를 만들기 전에는 SparkConf 객체를 먼저 생성해야 한다.

import org.apache.spark.{SparkConf, SparkContext} 
val conf = new SparkConf().setAppName("MyApp").setMaster("local") 
val sc = new SparkContext(conf)

SparkContext의 기본 객체는 spark-shell에서 제공하고, 코드를 통해 직접 구성할 수 있다. 

 

즉, SparkContext는 Spark 기능을 사용할 수 있게 해주는 도구라고 할 수 있다.

 

 

SparkSession

기존에는 주로 RDD를 다뤘기 때문에 SparkContext가 주요 진입점이었다. 따라서 Streaming을 위해서는 StreamingContext를, SQL을 쓸 때는 SQLContext를, Hive를 다룰 때는 HiveContext를 사용해야 했다. 하지만 DataFrame, DataSet을 추가로 다루게 되면서 Spark 2부터는 새로운 진입점이 필요하게 되었다.

 

SparkSession은 SparkContext 대신 Spark 2부터 사용할 수 있는 진입점으로 SQLContext, HiveContext 및 StreamingContext가 결합되었다. 각 context가 사용할 수 있는 API는 SparkSession에서도 사용할 수 있고, 실제 계산을 수행하는 SparkContext 역시 결합되어 있다. 

Spark 2 이상에서도 SparkContext를 사용할 수 있지만, SparkSession에 다른 context가 포함되어 있기 때문에 SparkSession을 사용하는 것을 권장한다.

import org.apache.spark.sql.SparkSession

val spark = SparkSession.builder
    .appName("SparkSessionExample") 
    .master("local[4]") 
    .config("spark.sql.warehouse.dir", "target/spark-warehouse")
    .enableHiveSupport()
    .getOrCreate()

SparkSession의 기본 객체는 spark-shell에서 제공하고, 코드를 통해 Builder 패턴으로 생성할 수 있다.

 

 

참고 문서

https://www.ksolves.com/blog/big-data/spark/sparksession-vs-sparkcontext-what-are-the-differences

SparkSession이란

https://datacadamia.com/db/spark/cluster/cluster

https://www.sparkcodehub.com/sparksession-vs-sparkcontext