Iceberg 사용
- 인쇄
- PDF
Iceberg 사용
- 인쇄
- PDF
Article Summary
Share feedback
Thanks for sharing your feedback!
VPC 환경에서 이용 가능합니다.
Iceberg는 방대한 분석 데이터 세트를 위한 개방형 테이블 형식으로서, SQL 테이블처럼 작동하는 고성능 형식을 사용하는 테이블을 Presto 및 Spark에 추가하는 시스템입니다.
Iceberg 구성 요소
NiFi를 구성하는 컴포넌트는 크게 세 가지로 iceberg catalog, metadata layer, data layer로 계층적인 구조로 이루어져 있습니다.
- Iceberg Catalog Layer
지정된 테이블에 대한 데이터를 읽거나 쓸 위치를 식별하는데 사용합니다. Iceberg Catalog는 현재 시점의 테이블 메타데이터를 찾을 수 있게 해줍니다. 또한 쿼리가 실행되면 해당 쿼리가 찾는 메타데이터 파일을 찾기 위해도 사용됩니다. - Metadata Layer
메타데이터 파일, 매니페스트 목록 및 매니페스트 파일로 세가지 구성 요소로 구성됩니다, 메타데이터 파일에는 테이블의 스키마, 파티션 정보, 스냅샷, 스냅샷에 대한 정보가 포함되어 쿼리에서 필요한 데이터를 빠르게 찾을 수 있도록 합니다. - Data Layer
실제 데이터 파일을 저장하는 곳으로 매니페스트 파일의 메타 정보를 이용하여 필요한 데이터 파일에 접근할 수 있게 합니다.
Iceberg 사용
Iceberg를 사용하는 방법은 다음과 같습니다.
주의
아래 예시는 1.2.1 버전을 기반으로 설명되었습니다.
Hive shell을 통한 테스트
- hive에 접속해 주십시오.
[hive@dev-nch023-ncl ~]$ hive
Hive Session ID = cca75225-f55c-423b-b6c8-d8fb0
hive> set hive.vectorized.execution.enabled=false;
hive> set iceberg.engine.hive.lock-enabled=false;
hive> set tez.mrreader.config.update.properties=hive.io.file.readcolumn.names,hive.io.file.readcolumn.ids;
hive> set hive.execution.engine=mr;
- database를 생성해 주십시오.
hive> create database test;
OK
Time taken: 2.182 seconds
- database를 선택해 주십시오.
hive> use test;
OK
Time taken: 0.278 seconds
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider using a different execution engine (i.e. spark, tez) or using Hive 1.X releases.
- 테이블을 생성해 주십시오.
hive> CREATE EXTERNAL TABLE test_tbl (id int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
OK
Time taken: 2.796 seconds
- add jar를 이용하여 iceberg 라이브러리를 사용해 주십시오.
hive> add jar /usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar;
Added [/usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar] to class path
Added resources: [/usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar]
- add jar를 이용하여 libfb 라이브러리를 사용해 주십시오.
hive> add jar /usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar;
Added [/usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar] to class path
Added resources: [/usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar]
- insert를 통해 데이터를 삽입해 주십시오.
hive> INSERT INTO test_tbl values (1);
Query ID = hive_20231012143056_a80b-fe72-472a-8773-4e7589
Total jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
23/10/12 14:30:57 INFO client.AHSProxy: Connecting to Application History server at dev-nch023-ncl.nfra.io/10.168.142.23:10200
23/10/12 14:30:57 INFO client.AHSProxy: Connecting to Application History server at dev-nch023-ncl.nfra.io/10.168.142.23:10200
Starting Job = job_1696850670798_0017, Tracking URL = http://dev-nch2-ncl.nfra.io:8088/proxy/application_1696850670798_0017/
Kill Command = /usr/nch/3.1.0.0-78/hadoop/bin/mapred job -kill job_1696850670798_0017
Hadoop job information for Stage-2: number of mappers: 1; number of reducers: 0
2023-10-12 14:31:07,818 Stage-2 map = 0%, reduce = 0%
2023-10-12 14:31:16,035 Stage-2 map = 100%, reduce = 0%, Cumulative CPU 5.33 sec
MapReduce Total cumulative CPU time: 5 seconds 330 msec
Ended Job = job_16968506_0017
MapReduce Jobs Launched:
Stage-Stage-2: Map: 1 Cumulative CPU: 5.33 sec HDFS Read: 173742 HDFS Write: 2611 SUCCESS
Total MapReduce CPU Time Spent: 5 seconds 330 msec
OK
Time taken: 22.507 seconds
- select 로 데이터를 확인해 주십시오.
hive> select * from test_tbl;
OK
1
Time taken: 0.493 seconds, Fetched: 1 row(s)
- 테이블 스키마를 확인해 주십시오.
hive> show create table test_tbl;
OK
CREATE EXTERNAL TABLE `test_tbl`(
`id` int COMMENT 'from deserializer')
ROW FORMAT SERDE
'org.apache.iceberg.mr.hive.HiveIcebergSerDe'
STORED BY
'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
LOCATION
'hdfs://test-test/warehouse/tablespace/managed/hive/test.db/test_tbl'
TBLPROPERTIES (
'bucketing_version'='2',
'current-schema'='{"type":"struct","schema-id":0,"fields":[{"id":1,"name":"id","required":false,"type":"int"}]}',
'current-snapshot-id'='128779159509',
'current-snapshot-summary'='{"added-data-files":"1","added-records":"1","added-files-size":"407","changed-partition-count":"1","total-records":"1","total-files-size":"407","total-data-files":"1","total-delete-files":"0","total-position-deletes":"0","total-equality-deletes":"0"}',
'current-snapshot-timestamp-ms'='1697088677165',
'engine.hive.enabled'='true',
'external.table.purge'='TRUE',
'last_modified_by'='hive',
'last_modified_time'='1697088657',
'metadata_location'='hdfs://test-test/warehouse/tablespace/managed/hive/test.db/test_tbl/metadata/00001-33b09b82-b9b9-4005-a804-3f7970fc23ec.metadata.json',
'previous_metadata_location'='hdfs://test-test/warehouse/tablespace/managed/hive/test.db/test_tbl/metadata/00000-5a7c11d1-b12b-45a-a75a8c975f85.metadata.json',
'snapshot-count'='1',
'table_type'='ICEBERG',
'transient_lastDdlTime'='1697088657',
'uuid'='95dffef0-97e6-4ca2-ae01-b5bfde8')
Time taken: 0.315 seconds, Fetched: 25 row(s)
이 문서가 도움이 되었습니까?