빅데이터/hive
[hive] common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1727ms 메시지
hs_seo
2019. 7. 1. 17:39
최근 hive 작업을 진행하면서 하이브 메타스토어의 연결이 자주 끊어지는 현상이 발생하였습니다. 이 문제를 확인하기 위해서 로그를 확인하였는데 다음과 같은 메시지를 확인할 수 있었습니다. 이 메시지는 어떤 이유(보틍은 GC작업)에 의해서 JVM이 멈췄다는 것을 이야기 하고 있습니다.
2019-05-20T08:20:23,695 INFO [org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor@503a5861([])]: common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1727ms
2019-05-20T08:20:25,670 INFO [org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor@503a5861([])]: common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1310ms
2019-05-20T08:20:27,931 INFO [org.apache.hadoop.hive.common.JvmPauseMonitor$Monitor@503a5861([])]: common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1761ms
원인
이 오류가 발생한 원인을 확인한 결과 다음과 같았습니다. 요약하면 많은 파티션으로 인한 GC로 메타스토어의 JVM이 멈추는 것이 원인이었습니다.
- 하나의 테이블에 매일 파티션이 2000개 정도 생성됨
- 누적되면서 현재 파티션이 20만개 정도 생성되었음
- 데이터를 입력, 조회할 때마다 하이브 메타스토어가 파티션 정보를 읽음
- 메모리에 많은 데이터를 올려서 GC가 오래 걸림
- 하이브 메타스토어가 응답이 없어서, 관리 프로세스가 메타스토어를 재기동
- 메타스토어가 재기동 하면서 기존 연결된 세션이 끊어짐
해결방안
이 문제는 테이블의 구조를 변경하여 과도한 파티션이 생성되지 않도록 수정하였습니다. 그리고 동시에 버켓팅을 이용하여 하루에 생성되는 파티션 개수를 10개 내외로 줄일 수 있었습니다. 파티션이 많아지면 데이터가 저장되는 사이즈를 줄일 수 있지만, 조회시에 메타스토어에 부담을 줄 수 있기 때문에 적당한 개수를 유지하는 것이 좋습니다.
apache/hive
Apache Hive. Contribute to apache/hive development by creating an account on GitHub.
github.com
반응형