최근 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개 내외로 줄일 수 있었습니다. 파티션이 많아지면 데이터가 저장되는 사이즈를 줄일 수 있지만, 조회시에 메타스토어에 부담을 줄 수 있기 때문에 적당한 개수를 유지하는 것이 좋습니다.
반응형
'빅데이터 > hive' 카테고리의 다른 글
[hive] 테이블 DROP 시 발생하는 Caused by: MetaException(message:Timeout when executing method: drop_table_with_environment_context; 69853ms exceeds 60000ms) 오류 (0) | 2019.07.29 |
---|---|
[hive] TEZ 작업중 GC overhead limit exceeded 오류 처리 (0) | 2019.07.05 |
[hive] 하이브 테이블 조회시 파티션 개수 제약하기 (0) | 2019.05.22 |
[hive] TEZ엔진을 이용한 UNION ALL INSERT문에서 서브디렉토리 생성을 막는 방법 (0) | 2019.04.09 |
[hive] explain을 이용하여 CBO 적용 여부 확인 (0) | 2019.04.05 |