You need to enable JavaScript to run this app.
导航
Hive 中操作 Iceberg 数据
最近更新时间:2024.07.29 20:32:58首次发布时间:2022.09.22 16:55:46

Hive 支持通过内表或外表的方式访问 Iceberg 数据。本文通过示例为您介绍如何使用 E-MapReduce(EMR)上的 Hive 访问 Iceberg 数据。

1 前提条件

  1. 适合 EMR 1.2.0以后的版本(包括EMR 1.2.0)
  2. 已创建 EMR 集群,且安装有 Iceberg 组件。有两种方式可以安装 Iceberg 组件:
    1. 在创建 EMR 集群时,选择 Icerberg 作为可选组件,详见:创建集群
    2. 对已安装 EMR 集群,参考 服务管理章节 添加 Iceberg 服务
  3. 安装Iceberg组件后,需要重启下HIve组件的HiveServer2服务,从而在HiveServer2进程中加载Iceberg的jar。
  4. 对于插入数据操作,要求 Hive 的执行引擎需要为 mr。

2 操作步骤

  1. 使用 SSH 方式登录到集群主节点,详情请参见使用 SSH连接主节点

  2. 在集群主机 Linux Bash 中执行如下进入Hive命令行

    hive
    

    也可以参考 Hive组件手册 采用beeline命令,举例:

    beeline -u jdbc:hive2://master-1-1:10000/default -n hive -p <hive用户的密码>
    
  3. 配置 Iceberg 的 Catalog信息
    Hive 中支持 Iceberg 的 Catalog type 有 Hive、Hadoop,也可以为空。 type 不同,配置项也不同。可参考 Iceberg参数配置章节。下面以 Hive 类型为例,创建 Catalog 名称为 Iceberg:

    SET iceberg.catalog.iceberg.type=hive;
    SET iceberg.catalog.iceberg.uri=thrift://master-1-1:9083;
    SET iceberg.catalog.iceberg.clients=10;
    
  4. 创建表

    CREATE DATABASE IF NOT EXISTS iceberg_db;
    
    CREATE EXTERNAL TABLE iceberg_db.table_a1(i INT, s STRING)
    STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
    TBLPROPERTIES ('iceberg.catalog'='iceberg');
    
  5. 插入数据

    -- 更改Hive的执行引擎为mr
    SET hive.execution.engine = mr;
    INSERT INTO iceberg_db.table_a1 VALUES(0, 'a');
    

    说明

    对于 INSERT 操作,只支持 mr 引擎 。

  6. 查询

    SELECT * FROM iceberg_db.table_a1;
    
  7. 删除表

    DROP TABLE IF EXISTS iceberg_db.table_a1;
    

    说明

    删除表,也会将表的数据进行删除,但在HDFS上会留存表名的相关空目录。