BigData/Spark & Spark Tuning

[Spark] Spark Config정리 SparkSession.config vs spark.conf.set() ,spark-defaults.conf vs spark-submit vs pyspark code 적용 우선순위

스파이디웹 2021. 12. 28. 13:09
728x90

 

*local에서 Jupyter Notebook을 통해 test해본 환경이기 때문에, UI에서 config 확인되는지 여부,명령어로 config가 확인 가능한지 여부에 대해서는 EMR+notebook과 같은 환경에서도 동일한 지는 알 수 없습니다.

 

1. SparkSession.config() vs spark.conf.set()

  sparksession.config() spark.conf.set()
용도 spark 설정을하는 method
적용되는 시점 SparkSession생성시 SparkSession생성 후
UI에서 확인 되는지 여부 O X
spark.sparkContext.getConf().getAll()에서 확인 되는지 여부 O X
실제로 config가 적용되는지 O O
같은 config에 대한 처리 sparksession에서 설정한 conf가 spark.conf.set("같은 설정",다른 설정값)을 만나기 전까지 유효하다.

*UI에서,command line에서 확인 되는지 여부 + 실제로 config가 적용 되었는 지 여부

1.SparkSession에서 config X, spark.conf.set() O

아래의 사진과 같이 spark UI에서는 spark.sql.shuffle.partitions config를 확인 할 수 없다.

spark.sparkContext.getConf().getAll() 명령어로도 확인할 수 없다.

df.rdd.getNumPartitions()를 통해 실제로 conf가 적용되었는지 확인할 수 있다.

실제로 파일 수도 partition 기본값인 200이 아닌 250으로 설정되어, 파일이 250개가 떨어진 것을 확인 할 수 있다.

2.SparkSession에서 config O, spark.conf.set() X

아래의 사진과 같이 spark UI에서 spark.sql.shuffle.partitions config를 확인 할 수 있다.

spark.sparkContext.getConf().getAll() 명령어로도 확인할 수 있다.

df.rdd.getNumPartitions()를 통해 실제로 conf가 적용되었는지 확인할 수 있다.

실제로 파일 수도 partition 기본값인 200이 아닌 300으로 설정되어, 파일이 300개가 떨어진 것을 확인 할 수 있다.


*SparkSession.config와 spark.conf.set에서 설정한 같은 config에 대한 처리 확인 절차

  1. SparkSession 생성 시 shuffle partition 수를 300으로 지정
  2. 같은 조건의 df를 pyspark code로 작성
  3. 첫 번째 write이후 partition 수 250으로 조정
  4. 같은 조건의 df를 다시 한번 write
  5. spark UI에서 jobs가 300, 250에 개씩 tasks를 할당했는지 확인
  6. 각각 300개의 파일, 250개의 파일이 생성 되었는지 확인

300개,250개의 shuffle read & write을 처리한 task 수

결론:

  • SparkSession에서 설정한 conf가 spark.conf.set("같은 설정",다른 설정값)을 만나기 전까지 유효하다.
  • spark.conf.set는 ui에서 확인할 수 없고, spark.sparkContext.getConf().getAll()로도 확인할 수 없지만, 실제로 적용은 된다.
  • SparkSession.config는 ui에서 확인할 수 있고, spark.sparkContext.getConf().getAll()로도 확인할 수 있으며, 실제로도 적용 된다.

2. pyspark code, spark-submit, spark-defaults.conf 적용 우선순위

3개의 케이스에 동일한 conf를 전부 다른 값으로 주고 어떤 값으로 적용되는지 확인

 

1. pyspark code에 직접 config주기( spark.sql.shuffle.partitions를 250으로 설정)

2.spark-submit시 config 주기 ( spark.sql.shuffle.partitions를 300으로 설정)

3.spark-defaults.conf에서 config 주기( spark.sql.shuffle.partitions를 350으로 설정)

결과:

pyspark code가 최우선적으로 적용되었다.


*spark-submit 과 spark.defaults.conf의 우선순위는 어떤것이 높을까?

 

pyspark code내에서 sparksession.config부분만 지워주고 test

예상은 했겠지만 spark-submit의 우선순위가 높다.

 

결론:

1. pyspark code > spark-submit > spark-defaults.conf 순으로 config우선순위를 갖는다.

2. pyspark code에서는 spark.conf.set()으로 config를 설정하고, spark-submit으로 conf를 옵션으로 주어 제출하게되면,UI 는 spark-submit이 설정한 conf으로 보이지만, 실제로 적용된 것은 pyspark code내의 config가 적용 된다.


참조:

https://spark.apache.org/docs/latest/configuration.html

728x90