본문 바로가기
빅데이터/hive

[hive] common.JvmPauseMonitor (JvmPauseMonitor.java:run(194)) - Detected pause in JVM or host machine (eg GC): pause of approximately 1727ms 메시지

by hs_seo 2019. 7. 1.

최근 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이 멈추는 것이 원인이었습니다.

 

  1. 하나의 테이블에 매일 파티션이 2000개 정도 생성됨
  2. 누적되면서 현재 파티션이 20만개 정도 생성되었음
  3. 데이터를 입력, 조회할 때마다 하이브 메타스토어가 파티션 정보를 읽음 
  4. 메모리에 많은 데이터를 올려서 GC가 오래 걸림 
  5. 하이브 메타스토어가 응답이 없어서, 관리 프로세스가 메타스토어를 재기동
  6. 메타스토어가 재기동 하면서 기존 연결된 세션이 끊어짐

해결방안

이 문제는 테이블의 구조를 변경하여 과도한 파티션이 생성되지 않도록 수정하였습니다. 그리고 동시에 버켓팅을 이용하여 하루에 생성되는 파티션 개수를 10개 내외로 줄일 수 있었습니다. 파티션이 많아지면 데이터가 저장되는 사이즈를 줄일 수 있지만, 조회시에 메타스토어에 부담을 줄 수 있기 때문에 적당한 개수를 유지하는 것이 좋습니다.

 

https://github.com/apache/hive/blob/master/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/metrics/JvmPauseMonitor.java

 

apache/hive

Apache Hive. Contribute to apache/hive development by creating an account on GitHub.

github.com

 

반응형