[하이브] 핵심 개념

소개

  • 한마디로 SQL on Hadoop
  • 데이터베이스: 테이블 이름 구별을 위한 일종의 네임스페이스
  • 테이블: hdfs 상에 저장된 파일과 디렉토리 구조에 대한 메타 정보

구성요소

  • ui: cli, beeline
  • driver: 쿼리 입력 받아서 작업 처리
  • compiler: 메타 스토어 참고해서 쿼리 실행 계획 생성
  • metastore: 디비, 테이블, 파티션 정보 등 저장
  • execution engine: 컴파일러의 의해 생성된 실행 계획 수행

실행 순서

  • 드라이버가 사용자가 제출한 sql 받아서 컴파일러에 전달
  • 컴파일러는 메타스토어를 참고해 sql plan 작성
  • 컴파일된 sql 로 실행 엔진이 수행
  • 실행엔진은 yarn에게 job 전달
  • 결과 반환

hive server 2

다른 언어로 개발된 클라이언트와 연동 담당

beeline

cli 와 비슷. 원격 하이브 서버2에 접속 가능

메타스토어

디비, 테이블, 파티션 정보 등 저장

파티션

  • 폴더 구조로 데이터를 분할하여 저장. 보통 dt 에 사용
  • 고정: 데이터를 입력하는 시점에 파티션 정보 전달
  • 동적: 컬럼의 정보를 이용하여 파티션이 생성

버켓

CLUSTERED BY 컬럼명. 특정 컬럼을 지정한 수만큼 나눠서 파일로 저장. SMB 조인으로 처리 가능.

테이블 포맷

DELIMITED: 데이터를 구분자를 사용해서 분리

스큐

  • 하나의 컬럼에 특정 데이터가 몰릴 때 사용
  • 예를 들어, nums 컬럼에 1~1000 데이터가 들어오는데 유독 1,2 가 많이 들어온다고 하면,
  • 파티션을 쓴다면 1000개를 만들겠지만, 스큐는 1,2 그외 나머지 이렇게 나눠서 총 3개로 구분
  • 이러면 네임노드 관점에서 좋음

서데

  • hdfs 에 있는 데이터를 읽고 쓸때 해석하는 방법을 제공(serial, deserial)
  • orc, parquet, csv, json 등 제공

저장 포맷

STORED AS로 저장 형식 지정. textfile, parquet, orc 등

하이브 조인 기법

  • 셔플 조인(머지 조인): 맵 단계에서 각 테이블을 읽고, 파티션 키를 조인 키로 설정하여 셔플 단계에서 조인 키를 기준으로 리듀서로 데이터가 이동. 가장 느림
  • 맵 조인(브로드캐스트 조인, 맵사이드 조인): 둘 중 한 쪽을 메모리에 올려서 처리
  • SMB 조인: 조인 테이블이 버케팅 되어 있을 때 사용 가능. 버케팅 된 키의 정보를 이용해서 빠르게 조인 가능

하이브 정렬 기법

  • ORDER BY: 모든 데이터를 정렬. 데이터 크기가 크면 OOM 에러 가능성. LIMIT 을 쓰자.
  • SORT BY: 리듀서 수만큼, 리듀서 별로 데이터를 정렬. 리듀서 수가 1이면 ORDER BY 랑 같음
  • DISTRIBUTE BY: 리듀서로 전달 시, 리듀서 별로 같은 값이 전달. group by 와 비슷한..
  • CLUSTER BY: DISTRIBUTE BY + SORT BY. 14132 가 각각 121, 43 로 나뉘고 112, 34 형태로 정렬

튜닝

  • TEZ 엔진 사용(맵 처리 결과를 메모리에 저장)
  • ORC 포맷 사용(컬럼 기반, 속도 빠름, 압축률 높음)
  • 벡터화 사용(한번에 1024행 처리하여 속도 높음)
  • 파티셔닝, 버케팅 사용
  • CBO 활성화(쿼리 최적화)
  • yarn 작업 큐 여러 개 사용

© 2021. All rights reserved.

Powered by Hydejack v9.1.4