www.guru99.com/introduction-hive.html 에서 가져옴. 자주 사용하는 하이브(apache hive)가 어떻게 동작하는지는 알아두고 싶어서 필요한 부분만 번역해놓습니다.
Hive Architecture.
하이브는 3개의 코어 파트를 유지합니다.
1. Hive Clients
2. Hive Services
3. Hive Storage and Computing
Hive Clients
하이브는 여러 타입의 어플리케이션들과 통신하기 위해 여러가지의 드라이버를 제공합니다. 예로 Thrift기반의 어플리케이션은 Thrift 클라이언트를 통신에 사용합니다.
자바 기반의 어플리케이션은 JDBC 드라이버를 사용할 것이고, 그 외의 다른 타입은 전부 ODBC 드라이버를 사용합니다. 이 클라이언트와 드라이버는 차례대로 Hive services 내의 Hive Server와 통신합니다.
Hive Services
클라이언트와 하이브의 상호 작용은 Hive Services를 통해서 이루어집니다. 클라이언트가 하이브에서 쿼리와 관련된 오퍼레이션을 실행시키고 싶으면, 클라이언트는 Hive Services를 통해서 통신해야 합니다.
command line interface(CLI)는 Hive Service의 한 종류로써 DDL 오퍼레이션을 실행시키기 위해 사용합니다. (DDL, DML, DCL이 궁금하면 cbw1030.tistory.com/71 참조) 모든 드라이버는 Hive Server와, 최종적으로 Hive Services의 main Driver과 통신합니다.(위 다이어그램 중앙에 Driver가 있음.)
main driver로 대표되는 Driver는 모든 타입의 JDBC, ODBC, 그리고 다른 타입들의 클라이언트 어플리케이션과 통신합니다. 그리고 이러한 요청들을 가져다가 메타스토어와 파일 시스템으로 추가적인 처리를 위해 보냅니다.
Hive Storage and Computing
Meta store, File system, Job client(위 아키텍쳐에 있음.)는 차례대로 Hive storage와 통신하면서 아래의 작업을 수행합니다.
1. 테이블의 메타스토어 정보는 하이브의 Meta storage database에 저장되어 있습니다.
2. 쿼리의 결과값과 테이블의 데이터는 하둡 클러스터의 hdfs에 저장됩니다.
Job exectution flow
하이브에서의 데이터 흐름은 아래의 패턴으로 진행됩니다.
1. UI에서 쿼리 실행.
2. Driver와 Compiler가 쿼리 실행 계획을 수립하기 위해 통신합니다. 어떻게 처리할지와 관련된 metadata정보를 얻기 위해서요.
3. Compiler는 실행될 잡을 위한 계획을 만듭니다. Compiler는 metadata정보를 가져오기 위해 Meta store와 통신합니다.
4. Meta store는 metadata를 Compiler에게 보내줍니다.
5. Compiler는 만들어진 쿼리 실행 계획을 논의하기 위해 Driver과 통신합니다.
6. Driver는 실행 계획을 Execution Engine으로 보냅니다.
7. Execution Engine(EE)은 쿼리를 실행시키기 위해 하이브와 하둡의 다리 역할을 합니다.
- EE는 데이터를 얻기 위해 가장 먼저 Name Node에 연락하고, 그리고 Data nodes로 연락합니다.
- EE는 Data nodes로부터 필요한 데이터를 가져옵니다.. 테이블의 실제 데이터는 Data node에만 있기 때문이죠. Name node에서는 쿼리의 metadata정보만 가져옵니다.
- EE는 DDL 오퍼레이션(create, drop, alter table같은) 실행을 위해 Meta store와 상호 통신합니다. 그리고 Meta store는 데이터베이스 이름, 테이블 이름, 컬럼명 같은 정보를 저장합니다. 그리고 쿼리가 해당 정보를 호출하면 해당 정보만 반환합니다.
- EE는 쿼리를 실행시키기 위해 하둡 파일 시스템뿐만이 아니라 Name node, Data nodes, job tracker과 같은 하둡 데몬들과도 통신합니다.
8. driver로부터 결과를 가져옵니다.
9. 결과를 EE로 보냅니다. 한번 data nodes에서 EE로 결과가 나오면, 그것을 driver로, UI로 다시 보냅니다.
'data engineering' 카테고리의 다른 글
kafka관련 좋은글 링크 (0) | 2021.05.03 |
---|---|
Spark Architecture, Job exectution flow (0) | 2021.04.17 |
spark installation using helm, spark-submit docker (0) | 2021.04.06 |
parquet vs orc vs avro (big data file format ) (0) | 2021.03.25 |
elastic kibana basic visualization (0) | 2021.03.03 |