Major components
UI
사용자가 쿼리 및 기타 작업을 시스템에 제출하기 위한 사용자 인터페이스
- Hive Web UI, 커맨드라인 (HD Insight는 Window Server만 해당)
Driver
쿼리를 수신하는 구성 요소. 세션을 핸들링하고 JDBC/ODBC 인터페이스에서 형성된 execute 및 fetch API를 제공
Compiler
쿼리 구문, 쿼리 블록, 쿼리 식에 대한 의미 분석 수행. 메타스토어에서 조회한 테이블 및 파티션 메타데이터의 도움으로 실행 계획을 생성
Metastore
컬럼명 및 타입, 데이터를 읽고 쓰는 데 필요한 직렬화/역직렬화 변환기, 데이터가 저장되는 해당 HDFS 파일을 포함하여 웨어하우스에 있는 다양한 테이블 및 파티션의 모든 구조 정보를 저장
- 하이브에서 사용하는 데이터베이스의 메타 정보들과, HDFS 매핑 정보들이 저장
Execution Engine
컴파일러가 생성한 실행 계획을 실행. 계획은 DAG 단계. 실행 엔진은 계획의 여러 단계 간의 종속성을 관리하고 적절한 시스템 구성 요소에서 이러한 단계를 실행
- MapReduce를 실행시키는 엔진
Etc components
- Hive Server : MapReduce/Tez/Spark 실행 엔진으로 사용하는 Hive SQL 엔진이 있음
- Hive 는 실행 계획을 생성한 다음 실행 엔진을 호출하여 Hive에서 수행한 최적화로 쿼리를 실행
- Client 는 Hive 서비스를 통해 쿼리를 실행
- Hive와 통신하기 위해 Hive Server 에서 실행해야 하는 Thrift, JDBC, ODBC 드라이버를 사용하는 응용 프로그램과도 상호 작용
- Thrift Client : 플랫폼 간 서비스를 구축하기 위한 RPC 프레임워크
- Thrift 인터페이스는 다리 역할을 하여 다른 언어가 Hive에 액세스 할 수 있도록 함
- Java Client와 상호 작용하는 Thrift Server가 있음
- Spark Thrift Server는 Hive Server 대체 가능, Spark 로 쿼리를 실행하고 자체 계획을 수행
- RDD, 텍스트 파일과 같은 다른 스파크 소스에 대한 액세스 제공
- JDBC Client를 사용하면 JDBC 연결을 지원하는 모든 애플리케이션에서 라이브로 Hive 데이터에 직접 연결 가능(Beeline CLI)
- ODBC(Open Database Connectivity) Client는 응용 프로그램이 데이터 액세스를 위해 SQL을 사용하여 DBMS의 데이터에 액세스 할 수 있도록 하는 ODBC 인터페이스를 사용
- ODBC 드라이버는 JDBC보다 훨씬 빠르게 로드, JDBC의 액세스 속도는 ODBC보다 우수함
- HiveQL Process Engine : HiveQL을 이용해서 MapReduce 프로그램을 자바로 작성하는 것이 아닌, MapReduce Job을 위한 쿼리 실행
- HDFS or HBASE : 분산처리 파일 시스템
Hive 동작 원리
1. Execute Query (Interface -> Driver)
사용자가 Hive Web이나 커맨드라인을 통해 하이브 데이터베이스로 쿼리 질의 (데이터베이스와의 연결은 JDBC 등 아무 드라이버를 사용해도 가능)
2. Get Plan (Drive -> Compiler)
드라이버는 컴파일러에게 쿼리 플랜을 요청. 쿼리 컴파일러는 쿼리를 받아서 어떻게 처리할 것인지 쿼리 플랜 작성
3. Get Meta Data (Compiler <-> Meta Store)
쿼리 컴파일러는 MetaStore로부터 쿼리를 처리하는 데 필요한 메타정보를 습득
4. Send Plan (Compiler -> Driver)
컴파일러는 쿼리 플랜을 작성해서 드라이버에게 전달
5. Execute Plan (Drive -> Execution Engine)
드라이버는 Execution Engine에게 쿼리 플랜을 전달
6. Execute Job
쿼리가 내부적으로 맵리듀스 잡으로 변환되어 실행. Execution Engine은 네임노드에 있는 JobTracker에게 잡을 전달. 그리고 JobTracker는 데이터 노드에 있는 TaskTracker에 잡을 임명
7. Fetch Result
Execution Engine은 맵 리듀스 처리 결과를 데이터 노드로부터 받음
8. Send Results
Execution Engine은 드라이버에게 데이터 노드로부터 받은 결과들을 전달
9. Send Results
드라이버는 하이브 인터페에스에게 결과들을 전달
'Data Engineering > Hive' 카테고리의 다른 글
[Hive] Bucketing & Table Sampling (0) | 2023.12.14 |
---|---|
[Hive] 데이터베이스, 테이블 기본 명령어 (0) | 2023.12.12 |
[Hive] Table Migration 하기 (0) | 2023.11.26 |
[Hive] Beeline 쿼리 실행 (0) | 2023.11.26 |
[Hive] 기본 개념 정리 (0) | 2023.07.01 |