Iceberg 사용
    • PDF

    Iceberg 사용

    • PDF

    기사 요약

    VPC 환경에서 이용 가능합니다.

    Iceberg는 방대한 분석 데이터 세트를 위한 개방형 테이블 형식으로서, SQL 테이블처럼 작동하는 고성능 형식을 사용하는 테이블을 Presto 및 Spark에 추가하는 시스템입니다.

    Iceberg 구성 요소

    NiFi를 구성하는 컴포넌트는 크게 세 가지로 iceberg catalog, metadata layer, data layer로 계층적인 구조로 이루어져 있습니다.
    chadoop-iceberg-1-1_ko

    • Iceberg Catalog Layer
      지정된 테이블에 대한 데이터를 읽거나 쓸 위치를 식별하는데 사용합니다. Iceberg Catalog는 현재 시점의 테이블 메타데이터를 찾을 수 있게 해줍니다. 또한 쿼리가 실행되면 해당 쿼리가 찾는 메타데이터 파일을 찾기 위해도 사용됩니다.
    • Metadata Layer
      메타데이터 파일, 매니페스트 목록 및 매니페스트 파일로 세가지 구성 요소로 구성됩니다, 메타데이터 파일에는 테이블의 스키마, 파티션 정보, 스냅샷, 스냅샷에 대한 정보가 포함되어 쿼리에서 필요한 데이터를 빠르게 찾을 수 있도록 합니다.
    • Data Layer
      실제 데이터 파일을 저장하는 곳으로 매니페스트 파일의 메타 정보를 이용하여 필요한 데이터 파일에 접근할 수 있게 합니다.

    Iceberg 사용

    Iceberg를 사용하는 방법은 다음과 같습니다.

    주의

    아래 예시는 1.2.1 버전을 기반으로 설명되었습니다.

    사전 세팅

    1. iceberg-hive-runtime-1.2.1.jar 라이브러리를 hive 의 lib 디렉토리에 복사하십시오.
      [root@dev-nch023-ncl ~]# ll
      total 407440
      -rw-r--r-- 1 root root  29758648 Apr  7  2023 iceberg-hive-runtime-1.2.1.jar
      -rw-r--r-- 1 root root    313702 Aug 31 17:58 libfb303-0.9.3.jar
      
      hive-server, hive-metastore 서버에서 iceberg-hive-runtime-1.2.1.jar 파일을 /usr/nch/3.1.0.0-78/hive/lib/ 디렉토리 밑으로 복사하십시오.
      [root@dev-nch023-ncl ~]# cp iceberg-hive-runtime-1.2.1.jar /usr/nch/3.1.0.0-78/hive/lib/
      
    2. hive 서비스 재시작 후 확인 절차를 진행합니다.
    • hive metastore 와 hive server의 pid 값을 찾으십시오.
      [root@dev-nch023-ncl irteamsu]# ps -elf | grep hive
      0 S hive     105744      1 15  80   0 - 599844 futex_ 14:22 ?       00:00:19 /usr/lib/jvm/java-1.8.0-openjdk/bin/java -Dproc_jar ....
      0 S hive     107945      1 20  80   0 - 838204 futex_ 14:23 ?       00:00:17 /usr/lib/jvm/java-1.8.0-openjdk/bin/java -Dproc_jar  ....
      
    • hive metastore 에서 iceberg와 libfb 라이브러리를 확인하십시오.
      [root@dev-nch023-ncl irteamsu]# lsof -p 105744 | grep iceberg
      java    105744 hive  mem    REG              202,1  29758648  571351583 /usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar
      java    105744 hive  115r   REG              202,1  29758648  571351583 /usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar
      [root@dev-nch023-ncl irteamsu]# lsof -p 105744 | grep libfb
      java    105744 hive  mem    REG              202,1    313702  570440255 /usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar
      java    105744 hive  177r   REG              202,1    313702  570440255 /usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar
      
    • hive server 에서 iceberg와 libfb 라이브러리를 확인하십시오.
      [root@dev-nch023-ncl irteamsu]# lsof -p 107945 | grep iceberg
      java    107945 hive  mem       REG              202,1  29758648  571351583 /usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar
      java    107945 hive  115r      REG              202,1  29758648  571351583 /usr/nch/3.1.0.0-78/hive/lib/iceberg-hive-runtime-1.2.1.jar
      [root@dev-nch023-ncl irteamsu]# lsof -p 107945 | grep libfb
      java    107945 hive  mem       REG              202,1    313702  570440255 /usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar
      java    107945 hive  177r      REG              202,1    313702  570440255 /usr/nch/3.1.0.0-78/hive/lib/libfb303-0.9.3.jar
      

    Hive shell을 통한 테스트

    1. 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;
    
    1. database를 생성하십시오.
    hive> create database test;
    OK
    Time taken: 2.182 seconds
    
    1. 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.
    
    1. 테이블을 생성하십시오.
    hive> CREATE EXTERNAL TABLE test_tbl (id int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler';
    OK
    Time taken: 2.796 seconds
    
    1. 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]
    
    1. 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]
    
    1. 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
    
    1. select 로 데이터를 확인하십시오.
    hive> select * from test_tbl;
    OK
    1
    Time taken: 0.493 seconds, Fetched: 1 row(s)
    
    1. 테이블 스키마를 확인하십시오.
    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)
    

    이 문서가 도움이 되었습니까?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.