Practice makes perfect

[BIGDATA Platform] 빅데이터 탐색 기술 : 하이브(Hive) 본문

빅데이터/BIGDATA Platform

[BIGDATA Platform] 빅데이터 탐색 기술 : 하이브(Hive)

kerpect 2020. 6. 17. 14:00

하이브(Hive)란?

: MapReduce는 복잡도가 높은 프로그래밍 기법이 필요했고, 이는 업무 분석가 및 관리자들에게 빅데이터에 접근하는 것을 어렵게 만들었습니다. 이를 해결하기 위해 페이스북에서 SQL과 매우 유사한 방식으로 하둡 데이터에 접근성을 높인 Hive 개발을 하게 되었습니다. 하둡에서 정형화된 데이터를 처리하기 위한 데이터 웨어하우스 인프라 입니다.

 

 

하이브 홈페이지 : hive.apache.org/

 

초기에는 페이스북에서 개발되었지만 넷플릭스등과 같은 회사에서 사용되고 있으며 개발되고 있으며, 오픈 소스로 공개되면서 2016년 2월 하이브 2.0이 릴리스되었습니다. (빅데이터의 가장 대표적인 SQL on Hadoop 제품으로 자리 잡음)

 

 

하이브(Hive) 수행 기능

 

1) 아파치 하이브는 아파치 HDFS이나 아파치 HBase와 같은 데이터 저장 시스템에 저장되어 있는 대용량 데이터 집합들을 분석합니다.

2)  HiveQL 이라고 불리는 SQL같은 언어를 제공하며 맵리듀스의 모든 기능을 지원합니다.

3) 쿼리를 빠르게 하기위해 비트맵 인덱스를 포함하여 인덱스 기능을 제공합니다. 

4)  하둡에서 동작하는 데이터 웨어하우스(Data Warehouse) 인프라 구조로서 데이터 요약, 질의 및 분석 기능을 제공합니다.

 

하이브(Hive) 주요 구성 요소

 

CLI : 사용자가 하이브 쿼리를 입력하고 실행할 수 있는 인터페이스 입니다.

JDBC / ODBC Driver : 하이브의 쿼리를 다양한 데이터 베이스와 연결하기 위한 드라이버를 제공 합니다.

Query Engine : 사용자가 입력한 하이브 쿼리를 분석해 실행 계획을 수립하고 하이브 QL을 맵리듀스 코드로 변환 및 실행 합니다.

MetaStore : 하이브에서 사용하는 테이블의 스키마 정보를 저장 및 관리하며, 기본적으로 더비DB(Derby DB)가 사용되나 다른 DBMS(MySQL, PostgreSQL 등)로 변경이 가능 합니다.

 

하이브(Hive) 의 기본 아키택처

 

- 하이브의 클라이언트는 CLI(Command Line interface : CLI), 하이브 서버, 웹 인터페이스로 구송됩니다. 하이브 서버의 경우 JDBC, ODBC, 쓰리프트로 개발된 클라이언트가 하이브 서비스를 이용할 수 있게 쓰리프트 서비스를 제공합니다.

 

- 하이브는 메타스토어(Metastore)라는 저장소를 만드어 하둡에서 처리된 메타데이터의 구조를 메타스토어에 저장합니다. 하이브는 오라클, MySQL등 JDBC를 지원하는 모든 데이터베이스를 이용하여 메타스토어를 구축할 수 있습니다.

 

- 드라이버는 사용자가 입력한 하이브QL 문을 해석합니다. 하둡과 연결되어 하이브QL 문을 실행하고, 하이브QL 은 하이브QL 문의 실행 계쇡을 작성하고, 최적화 작업까지 함께 수행합니다.

 

 

하둡x1 & Hive

Execute Query
- 사용자가 Hive web이나 커맨드라인을 통해 하이브 데이터베이스로 쿼리를 보냅니다. (데이터베이스와의 연결은 JDBC같은 아무런 드라이버나 사용가능)

                  ↓
Get Plan
- 드라이버는 컴파일러에게 쿼리 플랜을 요청합니다. 쿼리 컴파일러는 쿼리를 받아서 쿼리를 어떻게 처리할 것인지 쿼리 플랜을 작성합니다.

                  ↓
Get Metadata
- 쿼리 컴파일러는 Metastore로부터 쿼리를 처리하는데 필요한 메타정보를 받습니다.

                  ↓
Send Plan
- 컴파일러는 쿼리 플랜을 작성해서 드라이버에게 전달합니다.

                  ↓
Execute Plan
- 드라이버는 Execution Engine에게 쿼리 플랜을 전달합니다.

                  ↓   
Execute Job
- 이제부터는 쿼리가 내부적으로 맵리듀스 잡으로 변환되어 실행합니다. Execution Engine은 네임노드에 있는 JobTracker에게 잡을 전달하고,  JobTracker는 데이터 노드에 있는 TaskTracker에게 잡을 임명합니다.

                  ↓
Fetch Result
- Execution Engine은 맵 리듀스 처리 결과를 데이터노드로부터 받습니다.

                  ↓
Send Results
- Execution Engine은 드라이버에게 데이터노드로 부터 받은 결과들을 전달합니다.

                  ↓
Send Results
- 드라이버는 하이브 인터페이스에게 결과들을 전달합니다.

 

 

하둡x2 & Hive

UI : 사용자가 쿼리 및 기타 작업을 시스템에 제출하는 사용자 인터페이스 (CLI, Beeline, JDBC 등)

Driver : 쿼리를 입력받고 작업을 처리, 사용자 세션을 구현하고, JDBC/ODBC 인터페이스 API 제공

Compiler : 메타 스토어를 참고하여 쿼리 구문을 분석하고 실행계획을 생성

Metastore : 디비, 테이블, 파티션의 정보를 저장

Execution Engine : 컴파일러에 의해 생성된 실행 계획을 실행

 

 

사용자가 제출한 SQL문을 드라이버가 컴파일러에 요청하여 메타스토어의 정보를 이용해 처리에 적합한 형태로 컴파일

                          ↓                     

컴파일된 SQL을 실행엔진으로 실행

                          ↓

리소스 매니저가 클러스터의 자원을 적절히 활용하여 실행

                          ↓

실행 중 사용하는 원천데이터는 HDFS등의 저장장치를 이용

                          ↓

실행결과를 사용자에게 반환