우노
[Spark] sc.textFile minPartitions 할당 본문
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