본문 바로가기

Study/Bigdata

Spark(Yarn) + Intellj 원격 디버깅 하기



Zepplin 만 쓰다가, Intellj + SBT + Scala 조합으로 Spark 프로그램을 만들다 보니, 

열받는게, Zepplin 의 경우 중간중간 쉽게 중간 값을 볼수 있었는데, 일반적인 개발방법은 엄청 불편하다고 생각했는데,


아니나 다를까, Spark 원격 디버깅 하는 방법이 존재


1. sbt assembly 해서 Spark 패키지 만들고

2. 파일을 서버에 업로드(Sbt에 Deploy 플러그인 있는데, 이런걸 이용하면 편할듯) 

   -- 이런것이 없으면 디버깅 할때마다 이짓을 해야됨


3. Spark Client (실행노드)에서 다음을 입력

  - 물론, 생각에 따라서는 Bashrc에 넣어도 상관없을듯


export SPARK_SUBMIT_OPTS= agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=4000


4. spark-submit 


5. Intellj Debug 모드 시작


저 명령어가 나온상태에서 intellj 에서 Debug 모드를 키면 정의한 SparkJob이 yarn-client 모드로 배포되고 


브레이크 포인트를 지정한 해당 부분에 걸림 




이렇게 하면 흔히, 호튼웍스나 스파크싸이트에서 말하는 원격 디버깅을 할수 있는데, 

문제는 할때마다 assembly해서 배포해야함

아무래도 이부분은 sbt plugin을 이용해서 자동배포하면 편할것 같은..