카테고리 없음

[if(kakao) 2020] 오픈 소스 기반 하이브 테이블 모니터링 시스템 만들기 Review

GEUP 2022. 5. 19. 15:55

출처 : https://if.kakao.com/2020/session/121

 

if(kakao)2020

오늘도 카카오는 일상을 바꾸는 중

if.kakao.com

오픈 소스를 사용해서 하이브 테이블 모니터링 시스템을 만든 경험을 공유합니다.
InfluxDB와 Grafana를 이용해 만들면서 겪은 시행착오와 하이브 테이블을 모니터링하는 여러 가지 방법을 소개합니다. 해당 시스템을 이용해서 테이블보다 더 작은 단위(파티션 등)로 데이터들을 모니터링하고 있으며, 테이블 생성 잡 모니터링으로는 파악하기 어려운 장애들을 감지합니다.

 

리뷰 포인트

  • 델루나(Table Del Luna) - 하이브 테이블 모니터링 시스템

 

[그림 1] 델루나 아키텍쳐

델루나(Table Del Luna) - 하이브 테이블 모니터링 시스템

  • 델루나는 응용분석팀이 다루는 수많은 데이터들을 관리하기위한 모니터링 시스템으로 테이블을 생성 가공하는 ETL 작업 뿐만아니라 실제 데이터를 이용해서 모니터링

  • 델루나를 만든 이유
    • 데이터의 규모가 너무 커서 관리하기 힘들다
    • 알아차리기 힘든 장애들이 발생한다.
      • 매일 조금씩 행수가 감소
      • 간헐적으로 테이블이 제대로 생성되지 않음
      • 실험용 테이블이나 오래된 테이블이 관리되지 않고 쌓여서 큰 용량을 차지하는 경우
      • 부분적으로 일부 정보가 변경되거나 잘못입력된 경우
  • 구성 요소
    • Hive Metastore : 데이터 테이블의 통계 정보를 저장하고 있는 저장공간
      • insert into 구문으로 생성한 테이블의 통계 정보는 자동으로 집계된다.
      • insert into 구문으로 생성한 테이블이 아닌 경우, LOAD DATA 구문으로 생성 한 테이블들, 이미 존재하는 테이블들, Hive 외에 다른 시스템(SPARK 등)으로 만들어진 테이블들은 수동으로 집계해야 한다.
    • Hive Metastore에서 각 테이블들의 통계(용량, 행수 등) 데이터를 가져와서 InfluxDB에 저장

    • 테이블간 관계 정보를 수집 후 InfluxDB에 저장
      • 원본 테이블을 복사해 새로운 테이블 생성하는 경우에 사용한 쿼리를 파싱해서 원본 테이블이 새로만든 테이블과 관계가 있다는 사실을 알 수 있다. 그러나 테이블 생성에 사용된 쿼리를 파싱하기 위해서는 먼저 쿼리를 찾아야 한다. 하이브로 테이블을 생성한 경우 하이브 클라이언트 서버 로그를 수집하여 그 속에서 쿼리를 찾을 수 있다.
      • 위 방법으로 관계 정보를 찾을 수 없다면 젠킨스 디스크립션에 주석으로 달려있는 원본 테이블과 새로운 테이블 생성 관계를 찾을 수 있다.
      • 마지막으로 수동으로 입력하여 관계 정보를 수집한다.
    • InfluxDB : Grafana와 연동 가능한 시계열 데이터베이스
      • SQL과 유사한 InfluxQL 지원하고 InfuxQL을 활용해 쉽게 시각화를 할 수 있음
      • 단점
        • 고가용성을 위해서는 유로 버전을 사용해야함
        •  join 불가
        • schemaless 하기 때문에 데이터를 넣을 때는 편리하지만 schema를 변경하고 싶을 때 (ex string type -> integer type) 모든 데이터를 새로 써야 함
    • Grafana : InfluxDB에 저장된 데이터를 가져와서 대쉬보드로 시각화
      • 시각화 도구
      • 다양한 데이터 소스(InfluxDB, Prometheus, Mysql 등) 지원
      • 다양한 플러그인(그래프, 다이어그램 등) 지원
    • 알람
      • 알람이 발생하는 경우
        • 테이블이 생성됐는데 Row가 0인 경우
        • 주기적으로 생성되어야 하는 테이블이 생성되지 않는 경우
    • 추가 정보 수집 라이브러리
      • 공통적인 지표만 시각화하는 것이 아니라 Custom한 지표도 시각화 할 수 있도록 지원하는 라이브러리 
      • Hive query를 통해 특정 테이블의 Custom 지표를 구하는 query를 작성하면
      • delluna-collector가 해당 query의 실행 결과를 InfluxDB에 맞게 변경한 후 저장시켜줌
      • 이렇게 저장된 값을 가지고 Grafana에서 각자 원하는 대쉬보드를 만들어서 사용
      • delluna-report는 InfluxDB에 저장된 데이터를 repoting화 해서 카카오톡 메시지로 보내줌

 

마무리

  • 카카오의 델루나는 influxDB와 Grafana를 활용해 Hadoop에 저장된 테이블을 모니터링하는 시스템으로 보인다.
  • Hadoop에는 개발자의 필요에 따라 수많은 테이블이 생성/삭제 되고 그 안에 저장되는 데이터의 양도 매우 많다. 따라서 이 테이블들을 모니터링하여 잘못 생성되었거나 더이상 사용되지 않는 테이블, 생성되어야 하는 테이블, 테이블에 대한 custom한 지표 등을 모니터링 하여 장애를 발견하거나 불필요한 자원을 사용하지 않도록 관리해야 한다.