[Spark] Spark Config정리 SparkSession.config vs spark.conf.set() ,spark-defaults.conf vs spark-submit vs pyspark code 적용 우선순위
*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에 대한 처리 확인 절차
- SparkSession 생성 시 shuffle partition 수를 300으로 지정
- 같은 조건의 df를 pyspark code로 작성
- 첫 번째 write이후 partition 수 250으로 조정
- 같은 조건의 df를 다시 한번 write
- spark UI에서 jobs가 300, 250에 개씩 tasks를 할당했는지 확인
- 각각 300개의 파일, 250개의 파일이 생성 되었는지 확인
결론:
- 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가 적용 된다.
참조: