[Hadoop] Hive 기본

이혜지·2020년 11월 16일
1

Hadoop

목록 보기
2/4
post-thumbnail

1. Hive 구성요소


  • UI

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

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

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

    • 디비, 테이블, 파티션의 정보를 저장
  • Execution Engine

    • 컴파일러에 의해 생성된 실행 계획을 실행

    하이브 실행 순서


    1. 사용자가 제출한 sql문을 드라이버가 컴파일러에 요청하여 메타스토어의 정보를 이용해 처리에 적합한 형태로 컴파일
    2. 컴파일된 sql을 실행엔진으로 실행
    3. 리소스 매니저가 클러스터의 자원을 적절히 활용하여 실행
    4. 실행 중 사용하는 원천데이터는 HDFS등의 저장장치를 이용
    5. 실행결과를 사용자에게 반환



2. 하이브 서비스


메타스토어


메타스토어 서비스는 HDFS 데이터 구조를 저장하는 실제 데이터베이스를 가지고 있습니다. 메타스토어는 3가지 실행모드가 있습니다.

테스트로 동작할 때는 임베이디드 모드를 사용하고, 실제 운영에서는 리모트 모드를 많이 사용합니다.

  • 임베이디드(Embeded)
    • 별도의 데이터 베이스를 구성하지 않고 더비 DB를 이용한 모드
    • 한번에 하나의 유저만 접근 가능
  • 로컬(Local)
    • 별도의 데이터베이스를 가지고 있지만, 하이브 - 드라이버와 같은 JVM에서 동작
  • 리모트(Remode)
    • 별도의 데이터베이스를 가지고, 별도의 JVM에서 단독으로 동작하는 모드
    • 리모트로 동작하는 하이브 메타스토어를 HCat 서버1라고도 함

하이브서버2(hiveserver2)


하이브서버2는 다른 언어로 개발된 클라이언트와 연동 서비스를 제공합니다. 기존 하이브서버1을 개선하여 인증과 다중 사용자 동시성을 지원합니다. 쓰리프트, JDBC, ODBC 연결을 사용하는 애플리케이션과 통신하여 하이브 연산을 수행하고 결과를 반환합니다.

비라인(beeline)


일반적인 CLI처럼 내장형 모드로 작동하거나 JDBC로 하이브서버2 프로세스에 접근할 수 있는 하이브의 명령행 인터페이스입니다. CLI는 로컬 하이브 서비스에만 접근할 수 있지만 비라인은 원격 하이브 서비스에 접속할 수 있습니다.




3. 비라인(beeline)


비라인은 SQLLine1 기반의 하이브서버2(hiveserver2)에 접속하여 쿼리를 실행하기 위한 도구 입니다. JDBC 를 사용하여 하이브서버2에 접속합니다. 비라인 접속 옵션은 하이브 매뉴얼2을 참고하시면 됩니다.

비라인 접속-하이브서버2

비라인에서 하이브서버2에 접속하는 방법은 비라인 CLI를 실행 후에 입력하는 방법과 비라인 CLI를 실행하면서 옵션으로 입력하는 방법이 있습니다. 하이브서버2에 접속하면 프롬프트에 접속한 하이브서버2의 접속 정보가 표현됩니다.

하이브서버2의 접근 포트는 hive.server2.thrift.port에 설정된 정보를 이용하면 됩니다.

# connect 명령을 이용한 접속 방법 
$ beeline
beeline> !connect jdbc:hive2://localhost:10000 scott tiger
0: jdbc:hive2://localhost:10000>

# 커맨드라인 옵션을 이용한 접속 방법 
$ beeline -u jdbc:hive2://localhost:10000 -n scott -p tiger
0: jdbc:hive2://localhost:10000>

비라인 접속-주키퍼


비라인은 주키퍼에 의해서 HA구성되어 있는 하이브서버2에 접속하여 비라인 CLI를 실행할 수 있습니다. 주키퍼를 사용할 경우 접속 주소는 아래와 같이 표현됩니다.

  • jdbc:hive2://[ZOOKEEPER_QUORUM]/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2
$ beeline> !connect jdbc:hive2://host1:2181,host2:2181,host3:2181/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=hiveserver2 user_name pass_word

비라인 SQLLine 커맨드

비라인에서는 느낌표를 이용하여 SQLLine 커맨드를 입력 할 수 있습니다. SQLLine 커맨드의 상세한 내용은 매뉴얼을 참고하시면 됩니다.
(sqlline : 자바를 기반으로 하는 DB접속 도구)

0: jdbc:hive2://localhost:10000> !columns tbl;
0: jdbc:hive2://localhost:10000> !quit
0: jdbc:hive2://localhost:10000> !columns tbl;

*내 beeline의 접속 명령어
!connect jdbc:hive2://cwhdp01.co.kr:10000 이다.




4. 메타스토어


하이브의 메타정보는 파일의 물리적인 위치와 데이터에 대한 논리적인 정보로 구분할 수 있습니다. 이 메타정보를 보관하고 사용자의 요청에 따라 관련 정보를 제공하는 곳이 하이브 메타스토어입니다.

메타스토어는 쓰리프트1 프로토콜을 이용하여 다른 서비스에 정보를 제공합니다. 메타 정보는 JDBC 드라이버를 이용하여 RDBMS에 저장됩니다.

메타스토어 타입


메타스토어는 실행 유형에 따라 3가지 타입이 있습니다. 각 타입은 다음과 같습니다. 메타스토어를 실행하면 하이브에서 필요한 기본 데이터베이스, 테이블을 확인하고 자동으로 생성합니다.

임베이디드 메타스토어


기본설정의 하이브는 더비 DB를 사용하게 됩니다. 임베이디드 메타스토어는 한번에 한명의 유저만 접근할 수 있습니다. 따라서 주로 테스트 목적으로만 이용하는 것을 추천합니다.

hive-site.xml 설정

<property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:derby:metastore_db;create=true </value>
 <description>JDBC connect string for a JDBC metastore </description>
</property>

로컬 메타스토어


로컬 메타스토어는 하이브와 같은 JVM에서 동작합니다. 메타 데이터는 외부의 RDBMS에 저장합니다. 따라서 여러 사용자가 동시에 이용할 수 있습니다.
hive-site.xml 설정

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://[IP]:[port]/[데이터베이스 이름]</value>
    <description>username to use against metastore database</description>
</property>

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.mariadb.jdbc.Driver</value>
    <description>username to use against metastore database</description>
</property>

<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>[사용자명]</value>
    <description>username to use against metastore database</description>
</property>

<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>[암호]</value>
    <description>password to use against metastore database</description>
</property>

원격 메타스토어


원격 메타스토어는 메타스토어가 별도의 JVM에서 동작합니다. 쓰리프트 프로토콜을 이용하여 접속합니다.
hive-site.xml 설정

<property>
    <name>hive.metastore.uris</name>
    <value>thrift://[메타스토어 IP]:[메타스토어 Port]</value>
    <description>JDBC connect string for a JDBC metastore</description>
</property>

4-1. 메타 데이터베이스


하이브의 테이블들에 대한 논리적인 정보는 데이터베이스에 저장됩니다. 메타스토어 서비스는 이 데이터베이스 정보를 여러 클라이언트에게 제공합니다.

데이터베이스는 더비, MSSQL, MySQL, 오라클 등을 지원합니다. 이 데이터베이스에 하이브 서비스에 필요한 스키마1를 미리 생성하고 서비스합니다. 하이브 클라이언트를 이용해서 확인하는 정보는 이 데이터베이스의 정보에 기반하고 있습니다. 따라서 하이브 테이블 관련하여 필요한 정보를 확인하고 싶을 때는 데이터베이스에 직접 접속하여 확인 해도 됩니다.

주요 테이블


하이브 데이터베이스의 주요 테이블은 다음과 같습니다.

테이블명설명
DBS데이터베이스 정보
TBLS테이블 정보
PARTITIONS파티션 정보

메타 데이터 확인


SQL 쿼리를 이용하여 메타 데이터를 확인하는 방법은 다음과 같다.

-- DB 정보
SELECT *
  FROM DBS;


-- 테이블 정보
SELECT *
  FROM TBLS;


-- DB, 테이블 조인
SELECT *
  FROM TBLS t, DBS d
 WHERE t.DB_ID = d.DB_ID
 ORDER BY d.NAME;

-- 테이블 이름에 sample 이 들어가는 테이블을 찾아서, 디비명, 테이블명, 파티션명을 출력
SELECT d.NAME, t.TBL_NAME, p.PART_NAME
  FROM DBS d, TBLS t, PARTITIONS p
 WHERE d.DB_ID = t.DB_ID
   AND t.TBL_ID = p.TBL_ID
   AND t.TBL_NAME like '%sample%';

전체 테이블


하이브 메타스토어의 전체 테이블은 다음과 같다

+---------------------------+
| Tables_in_hive            |
+---------------------------+
| AUX_TABLE                 |
| BUCKETING_COLS            |
| CDS                       |
| COLUMNS_V2                |
| COMPACTION_QUEUE          |
| COMPLETED_COMPACTIONS     |
| COMPLETED_TXN_COMPONENTS  |
| DATABASE_PARAMS           |
| DBS                       |
| DB_PRIVS                  |
| DELEGATION_TOKENS         |
| FUNCS                     |
| FUNC_RU                   |
| GLOBAL_PRIVS              |
| HIVE_LOCKS                |
| IDXS                      |
| INDEX_PARAMS              |
| KEY_CONSTRAINTS           |
| MASTER_KEYS               |
| NEXT_COMPACTION_QUEUE_ID  |
| NEXT_LOCK_ID              |
| NEXT_TXN_ID               |
| NOTIFICATION_LOG          |
| NOTIFICATION_SEQUENCE     |
| NUCLEUS_TABLES            |
| PARTITIONS                |
| PARTITION_EVENTS          |
| PARTITION_KEYS            |
| PARTITION_KEY_VALS        |
| PARTITION_PARAMS          |
| PART_COL_PRIVS            |
| PART_COL_STATS            |
| PART_PRIVS                |
| ROLES                     |
| ROLE_MAP                  |
| SDS                       |
| SD_PARAMS                 |
| SEQUENCE_TABLE            |
| SERDES                    |
| SERDE_PARAMS              |
| SKEWED_COL_NAMES          |
| SKEWED_COL_VALUE_LOC_MAP  |
| SKEWED_STRING_LIST        |
| SKEWED_STRING_LIST_VALUES |
| SKEWED_VALUES             |
| SORT_COLS                 |
| TABLE_PARAMS              |
| TAB_COL_STATS             |
| TBLS                      |
| TBL_COL_PRIVS             |
| TBL_PRIVS                 |
| TXNS                      |
| TXN_COMPONENTS            |
| TYPES                     |
| TYPE_FIELDS               |
| VERSION                   |
| WRITE_SET                 |
+---------------------------+

4-2. 메타스토어 데이터베이스 설정


원격 하이브 메타스토어를 이용하기 위해서는 MySQL, 오라클 같은 RDB에 하이브 메타스토어 스키마를 설정해야 합니다. hive-site.xml에 RDB에 접속을 위한 정보를 입력하고, 커맨드를 입력하여 스키마를 생성할 수 있습니다.

hive-site.xml 설정


하이브의 conf 아래 hive-site.xml 에 다음과 같이 데이터 베이스 접속을 위한 정보를 입력합니다.

<?xml version="1.0"?>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://database_ip:database_port/database_name</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.mariadb.jdbc.Driver</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>user_name</value>
  </property>

  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>password</value>
  </property>
</configuration>

스키마 생성


스키마 생성 방법은 다음과 같습니다. dbType에 사용하는 데이터베이스를 입력하면 됩니다. mssql, mysql, oracle, postgres를 지원합니다.

$ hive --service schemaTool -dbType mysql -initSchema

스키마 업그레이드


하이브 버전을 바꾸게 되면 하위버전의 스키마를 상위버전으로 업그레이드 해야 하는 경우가 생깁니다. 이럴때는 다음과 같이 사용합니다.

$ hive --service schemaTool -dbType mysql -upgradeSchema

스키마 정보 확인


하이브 스키마의 정보를 확인하는 방법은 다음과 같습니다.

$ hive --service schemaTool -dbType mysql -info
Metastore connection URL:      jdbc:mysql://database_ip:database_port/database_name
Metastore Connection Driver :  org.mariadb.jdbc.Driver
Metastore connection User:     user_name
Hive distribution version:     2.3.0
Metastore schema version:      2.3.0
schemaTool completed
profile
공유 문화를 지향하는 개발자입니다.

0개의 댓글