::: IT인터넷 :::

Livy로 Spark Application 실행하기 (3) - 실행 결과 모니터링

곰탱이푸우 2023. 10. 30. 08:20
Livy 서버를 통해 Spark에 Application을 Submit이 된 이후에는 정상적으로 실행되는지 확인해야 한다.
 
모니터링하는 방법은 크게 두가지가 있다.
  • Jupyter Notebook에서 Livy에 실행 상태를 조회하는 코드 실행
  • Livy, Spark, Yarn의 웹 UI를 통한 직접 확인
 
AirFlow Jupyter 컨테이너를 구성하는 방법은 아래 문서를 참고한다.
Livy 서버와 Spark의 설정을 변경하는 방법은 아래 문서를 참고한다.
하둡 클러스터에 Livy 서버를 설치하는 방법은 아래 문서를 참고한다.
Livy로 Spark Application을 실행하는 방법은 아래 순서로 진행한다.
 
아래 순서로 실행 상태를 확인한다.
  • Jupyter Notebook에서 코드 실행 결과로 확인
  • Livy의 웹 UI에서 확인
  • Yarn의 웹 UI에서 확인
  • Spark과 Spark History Server의 웹 UI에서 확인
  • 실행에 실패한 경우 Livy 서버의 해당 세션 삭제

 

 

Spark Application 실행 결과 확인

Spark Application이 실행되면 아래와 같이 확인 가능하다.
 

Jupyter에서 Application Submit

Spark Application이 성공적으로 Submit 되면 201 응답을 받아온다.
201 응답은 Created를 의미하며 정상적으로 생성되었다는 것다.
 

Jupyter 에서 실행 상태 조회

아래와 같이 Submit에 성공하면 Batch IDr가 생성되며, 상태 정보는 starting을 반환한다.
이후 Spark이 Application을 실행하면 running으로 바뀌면서 Spark의 Application ID를 받아온다.
 
정상 종료되면 예외는 발생하지 않는다.
 
만약 실행 중 오류가 발생해서 Dead로 변경되면 예외가 발생한다.
 
 

Livy에서 조회

실행 상태 조회

처음에 Spark Application이 Livy에 Submit 되면, Livy에서는 생성 된 배치 세션 정보와 상태 정보를 출력한다.
Submit 직후에는 starting으로 표시된다.

 

이후 Spark에 정상적으로 Submit 되어 Driver가 Application을 실행하면 State가 running으로 변경된다.
또한 Application ID에 값이 표시되는데 해당 링크를 클릭하면 Spark UI의 실행 정보를 조회할 수 있다.

 

정상적으로 종료되면 아래처럼 success로 표시된다.

 

만약 오류가 발생해서 중단되면 아래와 같이 dead로 표시된다.
 

Livy에서 로그 조회

Livy UI의 가장 오른쪽의 Logs에 session을 클릭하면 Livy 로그를 확인할 수 있다.

 

실행에 성공하면 아래와 같이 종료 로그까지 확인할 수 있다.

 

오류가 발생할 경우 해당 로그를 확인하고 조치한다.
 
 

YARN에서 실행 상태 조회

Spark Application이 정상적으로 실행되면 아래와 같이 State가 Running인 것을 확인할 수 있다.
 
실행에 성공하거나 실패하면 State가 FINISHED로 변경되고, FinalStatus는 SUCCEEDED로 변경된다.
실행 중 Exception이 발생해서 종료되어도 FINISHED, SUCCEEDED로 변경되는 것에 주의한다.
YARN 입장에서는  Spark Application 실행이 완료되었기 때문에 정상적인 메시지이다.
 

Spark UI에서 실행 결과 모니터링

Livy에서 이동하기

Livy UI에서 Application ID를 클릭하면 Spark UI로 이동한다.

 

YARN에서 이동하기

YARN에서는 화면 좌측의 Application ID를 클릭한다.

 

아래와 같이 Application의 상세 정보가 출력된다. 하단의 Tracking URL의 History 링크를 클릭한다.

 

 

Spark UI 확인하기

실행 중인 경우에는 4040 포트 (Spark UI), 실행이 완료되면 18081 포트 (Spark History Server)로 연결된다.
아래와 같이 Spark Jobs 페이지가 출력된다.
 
SQL 탭이 없고 Task 들의 실행 결과가 없으면 Driver에서 오류가 발생하여 Executor까지 실행하지 못한 것을 의미한다.
정상적으로 실행된 경우 아래와 같이 각 Task들의 실행 결과도 표시되고, SQL 탭이 활성화 된다.
 
Task를 실행하다가 오류가 발생한 경우 위의 화면에서 특정 Task에 Failed 정보가 표시된다.
 
SQL 탭을 클릭하면 수행한 작업의 SQL 실행 목록을 확인할 수 있다.
Scala로 작성한 코드를 Spark에서 SQL로 최적화하여 변환하여 실행한 것이다.
 
Description 부분을 클릭하면 아래와 같이 DAG 그래프를 확인할 수 있다.
 

Livy 세션 삭제

만약 실행 중 오류가 발생한 경우 Livy에 생성 된 해당 배치 작업을 삭제한다.
아래와 같이 deleted 메시지가 출력되면 정상이다.

 

Spark Applicaion이 YARN에 Submit 되면 Livy의 Batch ID가 1이 증가한다.
이러한 경우 {batch['id']} 부분의 값을 해당 Batch ID로 변경하여 실행한다.