Taaewoo
Data Engineering Blog
Taaewoo
전체 방문자
오늘
어제
  • 분류 전체보기 (67)
    • Computer Science (16)
      • Algorithm (6)
      • OS (1)
      • Java (2)
      • C++ (6)
      • Python (1)
    • Hadoop Ecosystem (27)
      • Hadoop (6)
      • Spark (5)
      • NiFi (6)
      • Hive (9)
      • Kafka (1)
    • BigData Engineering (14)
      • Jupyter (1)
      • Docker (3)
      • CDH (3)
      • Riot Data Pipeline (7)
    • Back-end 개발 (0)
      • Spring (0)
    • Algorithm 문제 풀이 (9)
      • 백준 (5)
      • LeetCode (4)
    • Conference (1)
      • LINE DEVELOPER DAY 2021 (1)
      • if(kakao) 2021 (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • docker
  • hdfs
  • 빅데이터
  • 코딩
  • java
  • Hive
  • hadoop
  • spark
  • 프로그래밍
  • BigData
  • 알고리즘
  • C++
  • CS
  • sort
  • 정렬
  • NiFi
  • Coding
  • metastore
  • kafka
  • algorithm

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Taaewoo

Data Engineering Blog

[Hive] Compile 상세 과정 #1 - 쿼리 변화 과정과 형태
Hadoop Ecosystem/Hive

[Hive] Compile 상세 과정 #1 - 쿼리 변화 과정과 형태

2022. 12. 25. 00:59

 Hive를 이용하면서 Client로부터 제출된 쿼리가 어떻게 MR Job으로까지 변환이 될까라는 궁금증이 항상 있었습니다. 그래서 내부적인 Compile 과정에 대해서 공부를 하게 되었고, 소스 코드를 직접 분석해 봤습니다. 이전에 작성한 [Hive] Hive 아키텍처와 HiveServer2 & Hive Metastore  글을 먼저 읽으면 본 게시글을 이해하는데 도움이 될 겁니다. 

 

 

Hive Architecture Review

 

 

- 주요 프로세스로 HiveServer2, Metastore 존재

- Driver가 중심에서 컴파일 과정, Task 전달 등 수행.

- Hive 쿼리의 변화 과정을 알기 위해선 위 그림의 Compiler 과정을 알아야함.

 

 

 

Hive 쿼리 처리 과정

 

- Hive 쿼리가 최종적으로 Map Reduce Job이 된다는 것은 잘 알고 있음.

- 하지만 대부분의 에러 발생은 중간 과정에서 발생.

- 위의 과정을 모른다면 에러의 원인을 파악하기 힘듦.

 

 Architecture 그림에서 Compiler와 Driver를 모듈로써 따로 분리를 시키면 위와 같습니다. 하지만 제가 실제로 알아본 Hive 쿼리의 Compile 과정은 조금 달랐습니다. 아래의 그림을 통해 설명하겠습니다.

 

 Hive Architecture에서 Compiler 모듈이 존재했던 것과 달리 실제 과정에서는 쿼리의 변화 과정에 필요한 각 모듈들이 모두 Driver에서 호출되어 사용되었습니다. 위 그림에서 확인할 수 있는 Hive 쿼리의 변화 과정은 다음과 같습니다.

 

Hive 쿼리  -  AST  -  QB  -  OP Tree  -  Task Tree

 

 

Hive 쿼리의 변환 형태

 

 Hive가 변환되면서 거치게 되는 각각의 형태에 대해서 알아보겠습니다.

 

AST 

 Abstract Syntax Tree, 일반적인 프로그래밍 Compile 과정에서 쓰이는 개념으로 추상화된 트리를 뜻합니다. 코드 또는 쿼리의 각 구문을 트리 형태로 분리시킨 형태입니다.

 

 

QB

 Query Block, 쿼리 구조에 대한 정보를 담습니다. 보통 Sub 쿼리가 존재하는 쿼리에서 여러 구조의 QB 정보가 생깁니다.

 Hive에서 사용하는 QB의 경우 두 가지 종류의 데이터가 담깁니다.

    1) MetaData

        -> 테이블에 대한 Metadata

    2) ParseInfo

        -> QB에 대한 parsing 정보

 

OP Tree

 Operator Tree, Logical Plan으로써 Operator가 Tree 구조로 생성됨.

Operator 예시
- TS : Table Scan Operator
- GBY : Group By Operator
- RS : Reduce Sink Operator
- SEL : Select Operator
- FS : File Sink Operator
- FIL : Filter Operator

 Logical Plan은 Hive를 debug 모드로 실행했을 때 Log에서 확인할 수 있습니다.

 

Task Tree

 Task Tree, Logical Plan이 최종적으로 Execution engine에서 수행될 Physical Plan으로 변환된 상태.

Task 예시
- Fetch Task : [Stage-0 : FETCH]
- Root Task : [Stage-1 : MAPRED]

 explain 문을 사용하여 쿼리의 plan을 확인할 때 Task Tree 구조를 볼 수 있습니다.

 

저작자표시 비영리 (새창열림)

'Hadoop Ecosystem > Hive' 카테고리의 다른 글

[Hive] Compile 상세 과정 #2 - Optimization 종류와 소스 코드 분석  (2) 2022.12.27
[Hive] Complex Json 데이터 테이블 생성하기 (Json SerDe)  (0) 2022.12.15
[Hive] IntelliJ로 Runtime Debugging하기  (0) 2022.11.12
[Hive] limit 사용 시 leastNumRows 에러 발생 이슈  (0) 2022.11.04
[Hive] Metastore의 heap memory 증가 이슈 해결 과정  (2) 2022.07.18
    'Hadoop Ecosystem/Hive' 카테고리의 다른 글
    • [Hive] Compile 상세 과정 #2 - Optimization 종류와 소스 코드 분석
    • [Hive] Complex Json 데이터 테이블 생성하기 (Json SerDe)
    • [Hive] IntelliJ로 Runtime Debugging하기
    • [Hive] limit 사용 시 leastNumRows 에러 발생 이슈
    Taaewoo
    Taaewoo

    티스토리툴바