이야기박스

Hive 및 Metastore 버전간 호환성 체크 (2.3.2, 3.1.2) 본문

Computer & Data/Big Data

Hive 및 Metastore 버전간 호환성 체크 (2.3.2, 3.1.2)

박스님 2022. 3. 20. 21:44
반응형

 

최근 몇년 전에 Hadoop3가 출시되면서 Hive 및 Metastore의 IDL에도 변화가 생겼습니다. 기본적으로 과거 서비스에 대한 호환성을 제공해 주었겠지만, 직접 테스트해보며 눈으로 확인해보고자 이번 포스팅을 준비하였습니다.

 

테스트 개요

테스트는 두 개 버전(2.3.2, 3.1.2)의 Hive Server, Metastore로 진행하였습니다.

화살표처럼 총 4가지의 연결을 시도할 예정입니다. 테스트 명령으로 Create Database / Table을 시도할 예정이고, Show가 되는지 확인, 그리고 테이블에 간단한 Insert를 진행해볼 예정입니다.

 

 

결론

예상했던 것 처럼 비교적 최신 버전(3.1.2)의 Metastore에서는 하위 버전의 Hive Server(2.3.2)의 호환이 가능하였지만, 그 반대의 호환은 제공되지 않았습니다.

 

Metastore 2.1.3

Hive Server Version Create Select Insert 비고
2.3.2 o o o 3.1.2 버전에서 `Create`한 Database `Show` 가능
3.1.2 o x x  

 

Metastore 3.1.2

Hive Server Version Create Select Insert 비고
2.3.2 o o o 3.1.2 버전에서 생성한 리소스 모두 접근 가능
3.1.2 o o o 2.3.2 버전에서 생성한 리소스 모두 접근 가능 

 

테스트 환경 설치

구성 참고는 아래 포스팅을 부탁드리겠습니다.

 

Hadoop 시리즈. Hive metastore 3버전 설치

이번 포스팅에서는 hive3 버전의 메타스토어를 단독으로 실행하는 내용을 다루어보았습니다. 하이브를 생성하는 테스트는 다음 포스팅에 진행하고 이번 포스팅은 설치에 집중해보려고 합니다. h

box0830.tistory.com

 

 

Hadoop 시리즈. Hive metastore 2버전 설치

이번 포스팅에서는 hive의 메타스토어 2버전 설치를 진행해보려고 합니다. 이전 포스팅인 hive metastore 3버전 설치와 방법은 유사하지만 2 버전에서는 standalone 바이너리 제공을 하지 않기 때문에,

box0830.tistory.com

 

1. Hive Server 2.3.2 --> Metastore 2.3.2

Create Database / Table

hive (default)> create database story_test_meta3;
OK
Time taken: 2.05 seconds
hive (default)> describe database story_test_meta3;
OK
db_name comment location    owner_name  owner_type  parameters
story_test_meta3        hdfs://story-shadoop-master-1/apps/hive/warehouse/story_test_meta3.db   ubuntu  USER
Time taken: 0.189 seconds, Fetched: 1 row(s)
hive (default)> create table story_test_meta3.tb_test01 (a String, b int);
OK
Time taken: 0.828 seconds
hive (default)> show tables in story_test_meta3;
OK
tab_name
tb_test01
Time taken: 0.082 seconds, Fetched: 1 row(s)

 

Hive Server 3.1.2에서 조회

위에서 생성한 Database / Table을 Hive Server3에서 조회가 되는지 확인해 보았습니다.

hive (default)> show databases;
OK
database_name

시도 결과, Hive Server 2.3.2에서 만든 리소스들이 조회가 되지 않았습니다.

 

Insert / Select Table

hive (default)> insert into table story_test_meta3.tb_test01 values ('story', 32);
Query ID = ubuntu_20220103090441_222b66b9-d308-4478-bbdb-767cf9e46faa
Total jobs = 3
Launching Job 1 out of 3
Tez session was closed. Reopening...
Session re-established.
Status: Running (Executing on YARN cluster with App id application_1640742158842_0021)
 
----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED      1          1        0        0       0       0
----------------------------------------------------------------------------------------------
VERTICES: 01/01  [==========================>>] 100%  ELAPSED TIME: 3.62 s
----------------------------------------------------------------------------------------------
Status: DAG finished successfully in 3.62 seconds
 
Query Execution Summary
----------------------------------------------------------------------------------------------
OPERATION                            DURATION
----------------------------------------------------------------------------------------------
Compile Query                           0.00s
Prepare Plan                            0.00s
Submit Plan                         1641200688.89s
Start DAG                               0.58s
Run DAG                                 3.62s
----------------------------------------------------------------------------------------------
 
Task Execution Summary
----------------------------------------------------------------------------------------------
  VERTICES      DURATION(ms)   CPU_TIME(ms)    GC_TIME(ms)   INPUT_RECORDS   OUTPUT_RECORDS
----------------------------------------------------------------------------------------------
     Map 1           1752.00          4,870             53               1                0
----------------------------------------------------------------------------------------------
 
Stage-5 is selected by condition resolver.
Stage-4 is filtered out by condition resolver.
Stage-6 is filtered out by condition resolver.
Moving data to directory hdfs://story-shadoop-master-1/apps/hive/warehouse/story_test_meta3.db/tb_test01/.hive-staging_hive_2022-01-03_09-04-41_624_7620263777130845495-1/-ext-10000
Loading data to table story_test_meta3.tb_test01
Table story_test_meta3.tb_test01 stats: [numFiles=1, numRows=1, totalSize=19, rawDataSize=8]
OK
_col0   _col1
Time taken: 14.641 seconds

동일한 버전의 통신이다보니 큰 문제없이 진행되는 것이 확인되었습니다.

 

2. Hive Server 3.1.2 --> Metastore 2.3.2

Create Database / Table

hive (default)> create database story_test_meta3_h3;
OK
Time taken: 1.383 seconds
hive (default)> describe database story_test_meta3_h3;
FAILED: SemanticException [Error 10072]: Database does not exist: story_test_meta3_h3

Hive Server3에서 Create Database는 가능하나, 이를 조회하려고 하면 버그가 발생합니다.

 

Hive Server 2.3.2에서 조회

hive (default)> show databases;
OK
database_name
default
story_test01
story_test02_v3
story_test_meta3
story_test_meta3_h3
Time taken: 0.044 seconds, Fetched: 5 row(s)
hive (default)> show tables in story_test_meta3_h3;
OK
tab_name
Time taken: 0.053 seconds

Hive Server2에서는 위에서 생성한 Database가 조회됩니다.

하지만 Hive Server3에서 Metastore2로 접근하는 것에 문제가 있어 Table 관련 테스트는 진행하지 않았습니다.

 

3. Hive Server 2.3.2 --> Metastore 3.1.2

Create Database / Table

hive (default)> create database story_test_meta3;
OK
Time taken: 0.771 seconds
hive (default)> show databases;
OK
database_name
default
story_test_meta3
Time taken: 0.159 seconds, Fetched: 2 row(s)
hive (default)> describe database story_test_meta3;
OK
db_name comment location    owner_name  owner_type  parameters
story_test_meta3        hdfs://story-shadoop-master-1/apps/hive/warehouse3/story_test_meta3.db  ubuntu  USER
Time taken: 0.071 seconds, Fetched: 1 row(s)
hive (default)> create table story_test_meta3.tb_test01 (a String, b int);
OK
Time taken: 0.629 seconds
hive (default)> show tables in story_test_meta3;
OK
tab_name
tb_test01
Time taken: 0.074 seconds, Fetched: 1 row(s)

Metastore 3.1.2 버전에서는 하위 버전인 Hive Server 2.3.2에서 리소스의 생성/조회가 문제없이 이루어집니다.

 

Hive Server 3.1.2에서 조회

hive (default)> show databases;
OK
database_name
default
story_test_meta3
hive (default)> show tables in story_test_meta3;
OK
tab_name
tb_test01
Time taken: 0.093 seconds, Fetched: 1 row(s)

또한 Hive Server 3.1.2에서도 2.3.2 버전에서 만든 리소스들이 조회가 됩니다.

 

Insert / Select Table

hive (default)> insert into table story_test_meta3.tb_test01 values ('story', 32);
Query ID = ubuntu_20220103063411_c8921571-c74d-4230-b1e3-b777c65661de
Total jobs = 3
Launching Job 1 out of 3
Status: Running (Executing on YARN cluster with App id application_1640742158842_0015)
 
----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED      1          1        0        0       0       0
----------------------------------------------------------------------------------------------
VERTICES: 01/01  [==========================>>] 100%  ELAPSED TIME: 3.49 s
----------------------------------------------------------------------------------------------
Status: DAG finished successfully in 3.49 seconds
 
Query Execution Summary
----------------------------------------------------------------------------------------------
OPERATION                            DURATION
----------------------------------------------------------------------------------------------
Compile Query                           0.00s
Prepare Plan                            0.00s
Submit Plan                         1641191654.26s
Start DAG                               0.59s
Run DAG                                 3.49s
----------------------------------------------------------------------------------------------
 
Task Execution Summary
----------------------------------------------------------------------------------------------
  VERTICES      DURATION(ms)   CPU_TIME(ms)    GC_TIME(ms)   INPUT_RECORDS   OUTPUT_RECORDS
----------------------------------------------------------------------------------------------
     Map 1           1622.00          4,150             34               1                0
----------------------------------------------------------------------------------------------
 
Stage-5 is selected by condition resolver.
Stage-4 is filtered out by condition resolver.
Stage-6 is filtered out by condition resolver.
Moving data to directory hdfs://story-shadoop-master-1/apps/hive/warehouse3/story_test_meta3.db/tb_test01/.hive-staging_hive_2022-01-03_06-34-11_447_4686929974400166203-1/-ext-10000
Loading data to table story_test_meta3.tb_test01
Table story_test_meta3.tb_test01 stats: [numFiles=1, numRows=1, totalSize=19, rawDataSize=8]
OK
_col0   _col1
Time taken: 11.084 seconds
hive (default)> select * from story_test_meta3.tb_test01;
OK
tb_test01.a tb_test01.b
story   32
Time taken: 0.187 seconds, Fetched: 1 row(s)

테이블의 Insert, Select도 문제없이 이루어지는 것이 확인됩니다.

 

Hive Server 3.1.2에서 조회

hive (default)> select * from story_test_meta3.tb_test01;
OK
tb_test01.a tb_test01.b
story   32
Time taken: 1.67 seconds, Fetched: 1 row(s)

마찬가지로 Hive Server 3.1.2에서도 이들이 큰 어려움 없이 조회됩니다.

 

4. Hive Server 3.1.2 --> Metastore 3.1.2

마지막 테스트입니다. 당연하게도 큰 문제가 없었습니다.

 

Create Database / Table

hive (default)> create database story_test_meta3_h3;
OK
Time taken: 0.091 seconds
hive (default)> describe database story_test_meta3_h3;
OK
db_name comment location    owner_name  owner_type  parameters
story_test_meta3_h3     hdfs://story-shadoop-v3-master-1/apps/hive/warehouse/story_test_meta3_h3.db ubuntu  USER
Time taken: 0.062 seconds, Fetched: 1 row(s)
hive (default)> create table story_test_meta3_h3.tb_test01 (a String, b int);
OK
Time taken: 0.546 seconds
hive (default)> show tables in story_test_meta3_h3;
OK
tab_name
tb_test01
Time taken: 0.067 seconds, Fetched: 1 row(s)

 

Hive Server 2.3.2에서 조회

hive (default)> show databases;
OK
database_name
default
story_test_meta3
story_test_meta3_h3
Time taken: 1.752 seconds, Fetched: 3 row(s)
hive (default)> show tables in story_test_meta3_h3;
OK
tab_name
tb_test01
Time taken: 0.086 seconds, Fetched: 1 row(s)

 

Insert / Select Table

hive (default)> insert into table story_test_meta3_h3.tb_test01 values ('parks', 32);
Query ID = ubuntu_20220103063746_31588160-05db-4390-965d-ceb1c86fa2f4
Total jobs = 3
Launching Job 1 out of 3
Status: Running (Executing on YARN cluster with App id application_1641180821787_0013)
 
----------------------------------------------------------------------------------------------
        VERTICES      MODE        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  KILLED
----------------------------------------------------------------------------------------------
Map 1 .......... container     SUCCEEDED      1          1        0        0       0       0
Reducer 2 ...... container     SUCCEEDED      1          1        0        0       0       0
----------------------------------------------------------------------------------------------
VERTICES: 02/02  [==========================>>] 100%  ELAPSED TIME: 4.66 s
----------------------------------------------------------------------------------------------
Status: DAG finished successfully in 4.66 seconds
 
Query Execution Summary
----------------------------------------------------------------------------------------------
OPERATION                            DURATION
----------------------------------------------------------------------------------------------
Compile Query                           0.00s
Prepare Plan                            0.00s
Get Query Coordinator (AM)              0.00s
Submit Plan                         1641191868.38s
Start DAG                               0.65s
Run DAG                                 4.66s
----------------------------------------------------------------------------------------------
 
Task Execution Summary
----------------------------------------------------------------------------------------------
  VERTICES      DURATION(ms)   CPU_TIME(ms)    GC_TIME(ms)   INPUT_RECORDS   OUTPUT_RECORDS
----------------------------------------------------------------------------------------------
     Map 1           2030.00          4,850             60               3                1
 Reducer 2             59.00          1,240             73               1                0
----------------------------------------------------------------------------------------------
 
Stage-5 is selected by condition resolver.
Stage-4 is filtered out by condition resolver.
Stage-6 is filtered out by condition resolver.
Moving data to directory hdfs://story-shadoop-v3-master-1/apps/hive/warehouse/story_test_meta3_h3.db/tb_test01/.hive-staging_hive_2022-01-03_06-37-46_614_4107086831257696647-1/-ext-10000
Loading data to table story_test_meta3_h3.tb_test01
Table story_test_meta3_h3.tb_test01 stats: [numFiles=1, numRows=1, totalSize=19, rawDataSize=8]
OK
col1    col2
Time taken: 19.063 seconds
hive (default)> select * from story_test_meta3_h3.tb_test01;
OK
tb_test01.a tb_test01.b
parks   32
Time taken: 0.182 seconds, Fetched: 1 row(s)

 

Hive Server 2.3.2에서 조회

hive (default)> select * from story_test_meta3_h3.tb_test01;
OK
tb_test01.a tb_test01.b
parks   32
Time taken: 3.858 seconds, Fetched: 1 row(s)

 

교차 Insert

추가로 Metastore 3.1.2에서 만든 테이블에 대하여 다음 교차 Insert 테스트를 진행해보았습니다.

 

Hive2 --> Hive3 생성 테이블

hive (default)> insert into table story_test_meta3_h3.tb_test01 values ('parks.story', 32);
hive (default)> select * from story_test_meta3_h3.tb_test01;
OK
tb_test01.a tb_test01.b
parks   32
parks.story 32
Time taken: 0.258 seconds, Fetched: 2 row(s)

Hive3 --> Hive2 생성 테이블

hive (default)> insert into table story_test_meta3.tb_test01 values ('story.parks', 32);
hive (default)> select * from story_test_meta3.tb_test01;
OK
tb_test01.a tb_test01.b
story   32
story.parks 32

두 테스트 모두 문제없이 진행되었습니다. 

 

 

마무리하며

Thrift IDL의 변경이 있어서 걱정 되었지만, 적어도 3.1.2 버전의 메타스토어에서 과거 버전의 Hive Server에 대해 깔끔하게 지원하는 모습을 보여주었습니다.

 

 Spark와 같은 사용자 어플리케이션을 구성할 때, Thrift를 직접 활용하면 다른 사이드 이펙트가 발생할지도 모르나, Hive Server 만큼은 안심하고 사용하여도 될 것 같습니다.

반응형