Hive Architecture
복잡한 맵리듀스 프로그래밍 없이 SQL로 맵리듀스를 사용할 수 있게 도와주는 녀석이다. SQL을 내부적으로 맵리듀스 코드로 변환해준다. 맵리듀스 외에 Tez 등의 엔진을 사용할 수도 있다. 보통 HDFS를 warehouse로 사용한다.
- (1) Client가 쿼리를 실행한다.
- (2) Driver가 쿼리플랜을 Compiler에게 요청한다.
- (3) Compiler는 쿼리에 해당하는 맵리듀스 코드를 생성한다. 이때, Metastore를 통해 하이브의 메타데이터(컬럼정보, 컬럼매핑 등)를 가져와 사용한다. 또한, 쿼리플랜을 생성한다.
- (4) 쿼리플랜을 Execution Engine에 전달한다.
- (5) Execution Engine은 Hadoop에 맵리듀스 잡을 요청하고, 잡의 결과를 받아와 전달한다.
Hive Metastore
메타스토어를 하이브의 메타데이터를 저장하는 저장소(DB)라고 할 수는 없다.
엄밀히 말하면 저장소 역할을 하는 Metastore Database와 저장소와 연결해주는 Metastore Process가 있는 형태이다.
메타스토어는 어떻게 구성하느냐에 따라 3가지 모드로 구분할 수 있다.
(1) Embedded Mode
Hive Server, Metastore Process, Metastore Database가 동일한 JVM 내에서 동작한다. 그러니 하나의 요청만 처리할 수 있다.
- Metastore Process
- Metastore Database
- Derby Database 사용
(2) Local Mode
Hive Server와 Metastore Process가 동일한 JVM 내에서 동작한다. Metastore Database는 다른 JVM에서 동작하거나 아예 다른 서버에서 동작한다. 그러니 한 번에 여러개 요청을 처리할 수 있다.
- Metastore Process
- Metastore Database
- Mysql, MariaDB 등을 사용함
- hive-site.xml 설정
속성 | 값 | 설명 |
javax.jdo.option.ConnectionURL | jdbc:mysql://sunnytest.com/metastore?createDatabaseIfNotExist=true
jdbc:mariadb://sunnytest.com/metastore?createDatabaseIfNotExist=true |
|
javax.jdo.option.ConnectionDriverName |
com.mysql.jdbc.Driver org.mariadb.jdbc.Driver |
metastore Database (mysql 또는 mariadb) 에 연결하기 위한 Driver |
javax.jdo.option.ConnectionUserName | <user name> | metastore Database 에 연결하기 위한 계정명 |
javax.jdo.option.ConnectionPassword | <password> | metastore Database 에 연결하기 위한 비밀번호 |
hive.metastore.local | true | 메타스토어 Local모드 유무 |
hive.metastore.warehouse.dir |
/user/hive/warehouse |
hive 테이블 정보가 저장되는 경로 (주로 HDFS 를 사용함) |
(3) Remote Mode
Hive Server, Metastore Process(Server), Metasotre Database가 모두 다른 JVM 혹은 다른 서버에서 동작한다. Metastore Process(Server)가 따로 동작하면서 Hive뿐만 아니라 다양한 Client(Impala, Presto 등)의 요청을 받을 수 있다. Client와 Metasotre Process(Server)는 Thrift 통신을 한다.
- Metastore Process(Server)
- hive-site.xml 에 thrift uri 설정을 추가로 해야 함.
- Metastore Database
- Mysql, mariaDB 등을 사용함
- hive-site.xml 설정
속성 | 값 | 설명 |
javax.jdo.option.ConnectionURL | jdbc:mysql://sunnytest.com/metastore?createDatabaseIfNotExist=true
jdbc:mariadb://sunnytest.com/metastore?createDatabaseIfNotExist=true |
|
javax.jdo.option.ConnectionDriverName |
com.mysql.jdbc.Driver org.mariadb.jdbc.Driver |
metastore Database (mysql 또는 mariadb) 에 연결하기 위한 Driver |
javax.jdo.option.ConnectionUserName | <user name> | metastore Database 에 연결하기 위한 계정명 |
javax.jdo.option.ConnectionPassword | <password> | metastore Database 에 연결하기 위한 비밀번호 |
hive.metastore.warehouse.dir |
/user/hive/warehouse |
hive 테이블 정보가 저장되는 경로 (주로 HDFS 를 사용함) |
hive.metastore.uris | thrift://:sunnytest.com:9083 |
클라이언트와 메타스토어 서버는 thrift 통신을 사용한다. |
hive.metastore.local | false |
메타스토어 Local모드 유무 |
참고링크
http://www.dbguide.net/db.db?cmd=view&boardUid=187344&boardConfigUid=9&boardIdx=159&boardStep=1
'BigData 기술 > Hive,Presto,Trino' 카테고리의 다른 글
[Hive] export, import (127) | 2021.03.09 |
---|---|
Hive 트랜잭션 테이블 (Hive update, delete) (677) | 2021.01.03 |
[Presto] Memory Pool / Memory configuration (config.properties) (928) | 2020.07.22 |
IntelliJ에서 Presto Query 날리기 (2) | 2020.05.14 |
hive udf 등록하는 방법 (2) | 2019.11.28 |
댓글