이번 글에서는 Hive를 Runtime 중에 소스 코드 레벨에서 Debugging하는 방법에 대해 소개하겠습니다.
Hive를 사용할 때 발생하는 에러는 보통 구글링을 해서 해결하곤 합니다. 하지만 구글링으로도 방법을 찾을 수 없을 때 근본적인 원인 파악을 위해 소스 코드 레벨에서 분석해야만 할 때가 있습니다. 아래의 방법으로 IntelliJ로 소스 코드 레벨에서 Debugging을 한다면 좀 더 쉽고 정확한 문제 해결을 할 수 있습니다.
사전 준비
Hive Debugging을 위해서 아래의 두가지를 준비합니다.
- IntelliJ 설치
https://www.jetbrains.com/ko-kr/idea/download/#section=mac - Hive 소스 코드 다운로드 ( 사용하는 버전에 맞게 )
https://archive.apache.org/dist/hive/
다음으로는 IntelliJ에서 Hive 소스 코드로 프로젝트를 생성합니다. 아래와 같이 "Project from Existing Soureces"를 선택합니다.
나타나는 창에서 "Create project from existing sources" 선택하고 이어서 계속 Next를 눌러줍니다.
프로젝트가 생성되었다면 "Run" 메뉴에서 "Edit Configurations"를 눌러줍니다.
Configuration 창에서 아래와 같이 Host & Port와 "JDK 5 - 8"로 설정해줍니다. 이때 Host는 Hive를 실행하는 서버로 지정하고, Port의 경우 해당 서버가 이미 8000번을 사용한다면 다른 번호를 이용해줍니다.
Hive Runtime Debugging
사전 준비는 끝났다면 Hive를 실행할 서버에 접속해서 아래 명령어로 Hive CLI를 실행시켜줍니다.
$ HADOOP_CLIENT_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=y,address=8000" hive |
저는 docker로 Hive 컨테이너를 실행시켰고 8000 port를 port forwarding 했습니다. 명령어를 실행하면 아래와 같이 Hive CLI가 계속 멈춰있는 상태인 것을 확인할 수 있습니다. ( docker 설정을 보려면 이 링크의 docker-compose.yml을 참고하세요. )
다음으로 IntelliJ에서 우측 상단의 Debugging 버튼(벌레 모양)을 눌러줍니다.
정상적으로 Debugging 모드에 들어갔다면 Connected 문구가 출력고 Hive CLI는 멈춰있던 상태에서 다시 실행됩니다.
이제 IntelliJ에서 Hive 소스 코드 중 원하는 곳에 Break point를 지정하고 Hive CLI에서 특정 쿼리를 실행합니다.
그러면 IntelliJ에서 우리가 원하던 Break point에서 멈추게 됩니다. Debugging 기능들을 이용하여 step을 옮길 수 있고 각 지점에서 사용되는 변수의 값들을 확인할 수 있습니다.
이러한 방식으로 Hive 수행 과정을 소스 코드 레벨에서 Debugging한다면 동작 과정을 상세하게 이해하거나 해결하기 어려운 이슈에 대해서 원인 파악 및 문제 해결하는데 도움이 될 것이라 생각합니다.
'Hadoop Ecosystem > Hive' 카테고리의 다른 글
[Hive] Compile 상세 과정 #1 - 쿼리 변화 과정과 형태 (0) | 2022.12.25 |
---|---|
[Hive] Complex Json 데이터 테이블 생성하기 (Json SerDe) (0) | 2022.12.15 |
[Hive] limit 사용 시 leastNumRows 에러 발생 이슈 (0) | 2022.11.04 |
[Hive] Metastore의 heap memory 증가 이슈 해결 과정 (2) | 2022.07.18 |
[Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore (0) | 2022.07.01 |