다음을 통해 공유


Spark UI를 사용하여 디버깅

이 문서에서는 Apache Spark 애플리케이션에 사용할 수 있는 몇 가지 디버깅 옵션을 간략하게 설명합니다.

  • Spark UI 인터페이스
  • 드라이버 로그
  • 실행기 로그

Spark UI를 사용하여 비용 및 성능 문제를 진단하려면 Spark UI를 사용하여 비용 및 성능 문제 진단을 참조하세요.

Spark UI 인터페이스

작업을 시작하면 Spark UI에 애플리케이션에서 발생하는 작업에 대한 정보가 표시됩니다. Spark UI로 이동하려면 컴퓨팅 페이지에서 컴퓨팅을 선택한 다음 Spark UI 탭을 클릭합니다.

Spark UI

스트리밍 탭

Spark UI 내에서 스트리밍 작업이 컴퓨팅에서 실행 중인 경우 스트리밍 탭이 표시됩니다. 이 컴퓨팅에서 실행 중인 스트리밍 작업이 없으면 이 탭이 표시되지 않습니다. 드라이버 로그로 건너뛰어 스트리밍 작업을 시작하는 동안 발생할 수 있는 예외를 확인하는 방법을 알아볼 수 있습니다.

이 페이지에서는 스트리밍 애플리케이션이 원본에서 입력 이벤트를 수신하는지 확인할 수 있습니다. 예를 들어 작업에서 초당 1000개의 이벤트를 수신하는 것을 볼 수 있습니다.

메모

TextFileStream경우 파일은 입력이므로 입력 이벤트의 #은 항상 0입니다. 이러한 경우 Notebook의 완료된 일괄 처리 섹션을 확인하여 자세한 정보를 찾는 방법을 파악할 수 있습니다.

여러 입력 스트림을 수신하는 애플리케이션이 있는 경우 각 수신기에 대해 수신된 이벤트 수를 표시하는 입력 속도 링크를 클릭할 수 있습니다.

처리 시간

아래로 스크롤할 때 처리 시간에 대한 그래프를 찾습니다. 이는 스트리밍 작업의 성능을 이해하는 주요 그래프 중 하나입니다. 일반적으로, 각 일괄 처리를 일괄 처리 시간의 80% 이내에 완료할 수 있다면 좋습니다.

평균 처리 시간이 일괄 처리 간격보다 가깝거나 더 큰 경우 스트리밍 애플리케이션이 큐에 대기하기 시작하여 곧 백로그가 생성되어 결국 스트리밍 작업이 중단될 수 있습니다.

완료된 일괄 처리

페이지 끝부분에 완료된 모든 일괄 처리 목록이 표시됩니다. 이 페이지에는 완료된 마지막 1000개 일괄 처리에 대한 세부 정보가 표시됩니다. 테이블에서 각 일괄 처리 및 처리 시간에 대해 처리되는 이벤트 수를 가져올 수 있습니다. 일괄 처리 중 하나에서 발생한 작업에 대해 자세히 알아보려면 일괄 처리 링크를 클릭하여 Batch 세부 정보 페이지로 이동하면 됩니다.

일괄 처리 세부 정보 페이지

Batch 세부 정보 페이지에는 일괄 처리에 대한 모든 세부 정보가 있습니다. 두 가지 주요 사항은 다음과 같습니다.

  • 입력: 일괄 처리에 대한 입력에 대한 세부 정보가 있습니다. 이 경우, 이 일괄 처리에 대해 Spark 구조적 스트리밍이 읽은 Apache Kafka의 토픽, 파티션, 오프셋에 대한 세부 정보가 포함되어 있습니다. TextFileStream의 경우 이 일괄 처리에 대해 읽은 파일 이름 목록이 표시됩니다. 이는 텍스트 파일에서 읽는 스트리밍 애플리케이션 디버깅을 시작하는 가장 좋은 방법입니다.
  • 처리: 이 일괄 처리 중에 수행된 처리에 대한 모든 세부 정보가 있는 작업 ID에 대한 링크를 클릭할 수 있습니다.

작업 세부 정보 페이지

작업 세부 정보 페이지에는 DAG 시각화가 표시됩니다. 이는 모든 일괄 처리에 대한 작업 및 종속성의 순서를 이해하는 데 유용합니다. 예를 들어, Kafka 직접 스트림에서의 일괄 입력을 읽고 플랫 맵 작업과 맵 작업을 수행한 뒤 결과 스트림을 updateStateByKey를 사용하여 전역 상태를 업데이트하는 데 사용할 수 있음을 보여줄 수 있습니다.

회색 상자는 건너뛴 단계를 나타냅니다. Spark는 다시 계산할 필요가 없는 경우 일부 단계를 건너뛸 수 있을 만큼 스마트합니다. 데이터가 검사점 또는 캐시된 경우 Spark는 해당 단계의 다시 계산을 건너뜁니다. 이전 스트리밍 예제에서 이러한 단계는 이전 일괄 처리에 대한 종속성에 해당합니다 updateStateBykey. Spark 구조적 스트리밍은 내부적으로 스트림을 체크포인트하고, 이전 배치 대신 체크포인트에서 읽기 때문에 회색 단계로 표시됩니다.

페이지 맨 아래에서 이 일괄 처리에 대해 실행된 작업 목록도 찾을 수 있습니다. 설명의 링크를 클릭하여 작업 수준 실행을 자세히 살펴볼 수 있습니다.

작업 세부 정보 페이지

이는 Spark 애플리케이션에 대한 Spark UI에서 가져올 수 있는 가장 세부적인 디버깅 수준입니다. 이 페이지에는 이 일괄 처리에 대해 실행된 모든 작업이 있습니다. 스트리밍 애플리케이션의 성능 문제를 조사하는 경우, 이 페이지에서는 실행된 작업 수와 어떤 실행기에서 실행되었는지, 그리고 셔플 정보와 같은 정보를 제공합니다.

처리 중 충분한 병렬 처리를 위해 컴퓨팅의 여러 실행기(노드)에서 태스크가 실행되는지 확인합니다. 단일 수신기가 있는 경우, 컴퓨팅에 둘 이상의 실행기가 있음에도 가끔 하나의 실행기만 모든 작업을 수행할 수 있습니다.

스레드 덤프

스레드 덤프는 JVM 스레드 상태의 스냅샷을 보여줍니다.

스레드 덤프는 특정 중단 또는 느리게 실행되는 작업을 디버깅하는 데 유용합니다. Spark UI에서 특정 작업의 스레드 덤프를 보려면 다음을 수행합니다.

  1. 작업 탭을 클릭합니다.
  2. 작업 테이블에서 보려는 스레드 덤프에 해당하는 대상 작업을 찾고 설명 열에서 링크를 클릭합니다.
  3. 작업의 단계 테이블에서 보려는 스레드 덤프에 해당하는 대상 단계를 찾고 설명 열에서 링크를 클릭합니다.
  4. 단계의 작업 목록에서 보려는 스레드 덤프에 해당하는 대상 작업을 찾고 해당 작업 ID실행기 ID 값을 기록해 둡니다.
  5. 실행기 탭을 클릭합니다.
  6. Executors 테이블에서 앞에서 설명한 실행기 ID 값에 해당하는 실행기 ID 값이 포함된 행을 찾습니다. 해당 행에서 스레드 덤프 열의 링크를 클릭합니다.
  7. 실행기 테이블에 대한 스레드 덤프에서 스레드 이름 열에 TID 포함된 행과 앞에서 설명한 작업 ID 값을 차례로 클릭합니다. (태스크 실행이 완료되면 일치하는 스레드를 찾을 수 없습니다). 태스크의 스레드 덤프가 표시됩니다.

스레드 덤프는 드라이버가 중단된 것처럼 보이는 문제(예: Spark 진행률 표시줄이 표시되지 않음)를 디버깅하거나 쿼리에서 진행되지 않는 문제(예: Spark 진행률 표시줄이 100개%중단됨)에도 유용합니다. Spark UI에서 드라이버의 스레드 덤프를 보려면 다음을 수행합니다.

  1. 실행기 탭을 클릭합니다.
  2. 실행기 테이블의 드라이버 행에서 스레드 덤프 열의 링크를 클릭합니다. 드라이버의 스레드 덤프가 표시됩니다.

드라이버 로그

드라이버 로그는 다음과 같은 경우에 유용합니다.

  • 예외: 경우에 따라 Spark UI에 스트리밍 탭이 표시되지 않을 수 있습니다. 일부 예외 때문에 스트리밍 작업이 시작되지 않았기 때문입니다. 드라이버 로그를 분석하여 예외의 스택 추적을 확인할 수 있습니다. 경우에 따라 스트리밍 작업이 제대로 시작되었을 수 있습니다. 그러나 완료된 일괄 처리 섹션으로 이동하지 않는 모든 일괄 처리가 표시됩니다. 모두 처리 중이거나 실패 상태일 수 있습니다. 이러한 경우 드라이버 로그는 기본 문제의 특성을 이해하는 데도 도움이 됩니다.
  • 인쇄: DAG의 일부로 모든 인쇄 문도 로그에 표시됩니다.

메모

드라이버 로그에 액세스할 수 있는 사람은 컴퓨팅 리소스의 액세스 모드에 따라 달라집니다. 표준 액세스 모드를 사용하는 컴퓨팅의 경우 작업 영역 관리자만 드라이버 로그에 액세스할 수 있습니다. 전용 액세스 모드를 사용하는 컴퓨팅의 경우 전용 사용자 또는 그룹 및 작업 영역 관리자가 드라이버 로그에 액세스할 수 있습니다.

실행기 로그

실행기 로그는 특정 작업이 잘못 실행되고 특정 작업에 대한 로그를 확인하려는 경우에 유용합니다. 위에 표시된 작업 세부 정보 페이지에서 태스크가 실행된 실행기를 가져올 수 있습니다. 이렇게 하면 컴퓨팅 UI 페이지로 이동하여 # 노드를 클릭한 다음 마스터를 클릭할 수 있습니다. 마스터 페이지에는 모든 작업자가 나열됩니다. 의심스러운 작업이 실행된 작업자를 선택한 다음 log4j 출력으로 가져올 수 있습니다.

메모

표준 액세스 모드를 사용하는 컴퓨팅에는 실행기 로그를 사용할 수 없습니다. 전용 액세스 모드를 사용하는 컴퓨팅의 경우 전용 사용자 또는 그룹 및 작업 영역 관리자가 실행기 로그에 액세스할 수 있습니다.