다음으로, 가장 긴 단계의 I/O 통계를 다시 살펴봅니다.
높은 I/O란?
I/O 열에 얼마나 많은 데이터가 있어야 높은 것으로 간주되나요? 이를 파악하려면 먼저 지정된 열 중에서 가장 높은 숫자로 시작합니다. 그런 다음 모든 작업자에 걸쳐 있는 총 CPU 코어 수를 고려합니다. 일반적으로 각 코어는 초당 약 3MB를 읽고 쓸 수 있습니다.
가장 많은 양의 I/O 열을 클러스터 작업자 코어 수로 나눈 후, 이를 초 단위의 기간으로 다시 나누십시오. 결과가 약 3MB이면 I/O가 바인딩된 것일 수 있습니다. 그것은 높은 I/O가 될 것입니다.
고입력
스테이지에 많은 입력이 표시되는 경우 이는 데이터를 읽는 데 많은 시간을 소비한다는 것을 의미합니다. 먼저 이 단계에서 읽고 있는 데이터를 식별합니다. Spark의 DAG에서 비용이 많이 드는 읽기 식별을 참조하세요.
특정 데이터를 식별한 후 읽기 속도를 높이기 위한 몇 가지 방법은 다음과 같습니다.
- 델타을 사용합니다.
- 데이터 건너뛰기 향상을 위해 액체 클러스터링을 사용합니다. 테이블에 대한 액체 클러스터링 사용을 참조하세요.
- Photon사용해 보세요. 특히 넓은 테이블의 경우 읽기 속도에 많은 도움이 될 수 있습니다.
- 많은 데이터를 읽을 필요가 없도록 쿼리를 보다 선택적으로 만듭니다.
- 데이터 레이아웃을 다시 고려하여 데이터 건너뛰기가 더 효과적이도록 하십시오.
- 동일한 데이터를 여러 번 읽는 경우 델타 캐시를 사용합니다.
- 조인을 수행하는 경우 DFP 가 작동하도록 하는 것이 좋습니다.
- 클러스터의 크기를 늘리거나 서버리스 컴퓨팅을 사용합니다.
높은 출력
스테이지에서 많은 출력이 표시되는 경우 이는 데이터를 작성하는 데 많은 시간을 소비한다는 것을 의미합니다. 이 문제를 해결하는 몇 가지 방법은 다음과 같습니다.
- 많은 데이터를 다시 쓰고 있나요? Spark가 데이터를 다시 작성하는지 확인하는 방법을에서 확인하세요. 많은 데이터를 다시 작성하는 경우:
- Photon이 아직 없는 경우 Photon을 사용하도록 설정합니다. 광자가 쓰기 속도에 많은 도움이 될 수 있습니다.
- 클러스터의 크기를 늘리거나 서버리스 컴퓨팅을 사용합니다.
고급 셔플
Databricks는 Spark가 최적의 순서 섞기 파티션 수를 자동으로 선택할 수 있도록 설정하는 spark.sql.shuffle.partitions=auto 것이 좋습니다. 순서 섞기에 익숙하지 않다면 , 지금이 배울 시간입니다.
고성능 I/O 지원 안 함
모든 열에서 높은 I/O가 표시되지 않으면 더 깊이 조사해야 합니다. I/O가 거의 없는