다음을 통해 공유


Spark 단계 높은 I/O

다음으로, 가장 긴 단계의 I/O 통계를 다시 살펴봅니다.

긴 단계 I/O

높은 I/O란?

I/O 열에 얼마나 많은 데이터가 있어야 높은 것으로 간주되나요? 이를 파악하려면 먼저 지정된 열 중에서 가장 높은 숫자로 시작합니다. 그런 다음 모든 작업자에 걸쳐 있는 총 CPU 코어 수를 고려합니다. 일반적으로 각 코어는 초당 약 3MB를 읽고 쓸 수 있습니다.

가장 많은 양의 I/O 열을 클러스터 작업자 코어 수로 나눈 후, 이를 초 단위의 기간으로 다시 나누십시오. 결과가 약 3MB이면 I/O가 바인딩된 것일 수 있습니다. 그것은 높은 I/O가 될 것입니다.

고입력

스테이지에 많은 입력이 보이면 데이터를 읽는 데 많은 시간을 소비하고 있다는 뜻입니다. 먼저 이 단계에서 읽고 있는 데이터를 식별합니다. Spark의 DAG에서 비용이 많이 드는 읽기를 식별하는 방법을 참조하세요.

특정 데이터를 식별한 후 읽기 속도를 높이기 위한 몇 가지 방법은 다음과 같습니다.

  • 델타을 사용합니다.
  • Photon사용해 보세요. 특히 넓은 테이블의 경우 읽기 속도에 많은 도움이 될 수 있습니다.
  • 많은 데이터를 읽을 필요가 없도록 쿼리를 보다 선택적으로 만듭니다.
  • 데이터 레이아웃을 다시 고려하여 데이터 건너뛰기가 더 효과적이도록 하십시오.
  • 동일한 데이터를 여러 번 읽는 경우 델타 캐시사용합니다.
  • 조인을 수행하는 경우 DFP이 제대로 작동하도록 하는 것을 고려해 보세요.

높은 출력

스테이지에서 많은 출력이 표시되는 경우 이는 데이터를 작성하는 데 많은 시간을 소비한다는 것을 의미합니다. 이 문제를 해결하는 몇 가지 방법은 다음과 같습니다.

  • 많은 데이터를 다시 쓰고 있나요? Spark가 데이터를 다시 작성하는지 확인하는 방법을에서 확인하세요. 많은 데이터를 다시 작성하는 경우:
    • 최적화해야 하는 병합이 있는지 확인합니다.
    • 삭제 벡터을 사용하여 Parquet 파일을 다시 작성하지 않고 기존 행을 삭제 또는 변경된 것으로 표시합니다.
  • Photon을(를) 아직 설정하지 않았다면 사용하도록 설정하세요. 광자가 쓰기 속도에 많은 도움이 될 수 있습니다.

높은 순서 섞기

셔플에 익숙하지 않다면, 지금 배울 기회입니다.

고성능 I/O 지원 안 함

열 중에서 높은 I/O가 표시되지 않으면 더 깊이 파고 들어야 합니다. I/O가 거의 없는 느린 Spark 단계 참조하세요.