이야기박스
Hive 및 Metastore 버전간 호환성 체크 (2.3.2, 3.1.2) 본문
최근 몇년 전에 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 버전에서 생성한 리소스 모두 접근 가능 |
테스트 환경 설치
구성 참고는 아래 포스팅을 부탁드리겠습니다.
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 만큼은 안심하고 사용하여도 될 것 같습니다.
'Computer & Data > Big Data' 카테고리의 다른 글
Elasticsearch - RestHighLevelClient를 통하여 대량의 문서를 조회하기 (0) | 2022.05.18 |
---|---|
Streaming 비교, Spark Streaming - Flink Streaming (0) | 2022.03.24 |
Logstash를 활용하여 rsyslog를 받아보자 (0) | 2022.03.09 |
Hadoop 시리즈. Hive metastore 2버전 설치 (0) | 2022.01.10 |
Hadoop 시리즈. Hive metastore 3버전 설치 (0) | 2022.01.10 |