오늘의 인기 글
최근 글
최근 댓글
Today
Total
05-08 16:23
관리 메뉴

우노

[Spark] sc.textFile minPartitions 할당 본문

Data/Spark

[Spark] sc.textFile minPartitions 할당

운호(Noah) 2021. 8. 26. 11:23

sc.textFile

  • Spark 환경에서, 외부 텍스트 데이터를 spark context 객체의 textFile 메서드를 이용해 읽어오면, Spark Cluster 내에 RDD 객체가 생성된다.

    • sc.textFile() 함수 사용 코드는 아래와 같다.

        val temp = sc.textFile("file:///home/test.txt", minPartitions=3)
        temp.getNumPartitions
  • 또한, RDD 생성시, minPartitions 매개변수를 통해 데이터를 최소 몇 조각으로 나눌지 지정할 수 있으며,

  • RDD 생성 후, getNumPartitions 함수를 통해 데이터가 총 몇 조각의 파티션으로 나뉘었는지도 확인할 수 있다.

데이터를 몇 개의 파티션으로 나누는게 좋을까?

  • 각 Executor 는 각 Core 당 하나의 Task 를 실행할 수 있으며, 하나의 Task 는 하나의 Partition 과 연계된다.
  • 일반적으로 파티션의 개수를 늘리는 것은, 오버헤드가 너무 많아지는 수준이 되기 전까지는 성능을 높여준다.
  • 총 코어 개수보다 적은 파티션을 쓰면 일부 CPU 가 쉬게 되므로, 최소한 총 코어 개수 이상의 파티션을 사용해야하며
  • 파티션 개수를 늘리면, Spark 의 각 Executor 가 한 번에 처리하는 양이 적어지므로, 메모리 부족 오류를 줄이는데 도움을 된다.
  • 따라서, 파티션이 부족한 것보다는 차라리 조금 더 많은 것이 낫다.

파티션이 너무 많아도 문제

  • 스파크 드라이버가 모든 파티션의 메타데이터를 보관해야하므로 Driver memory errors & Driver overhead errors 를 유발할 수 있다.
  • 모든 파티션을 Scheduling 하는 것은 많은 시간이 걸린다.
  • 작은 사이즈의 파일들을 생성하기 위한 I/O 가 많이 발생하며, 이 시간 또한 오래 걸릴 수 있다.
    • 특히, blockstores 에서

참고

'Data > Spark' 카테고리의 다른 글

[Spark] ML 패키지와 MLlib 패키지의 차이  (0) 2021.11.02
[Spark] Spark BlockMatrix Multiply 방법  (0) 2021.08.31
[Spark] Yarn log 확인  (0) 2021.08.24
[Spark] Collect 와 Count 의 차이  (0) 2021.08.17
[Spark] Map to json  (0) 2021.05.28
Comments