You need to enable JavaScript to run this app.
导航
基础使用
最近更新时间:2025.06.04 14:29:41首次发布时间:2025.03.29 22:25:27
我的收藏
有用
有用
无用
无用

本文介绍在 LAS 集群中,通过 Spark SQL 对 Iceberg 表进行创建等操作。

前提条件

  1. 修改 Spark 参数配置

spark.sql.extensions=org.apache.ranger.authorization.spark.authorizer.RangerSparkSQLExtension,org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Image

操作步骤

  • 选择引擎
    • Spark
spark-sql
  • Kyuubi
/usr/lib/emr/current/kyuubi/bin/beeline -n hive -p KtVMyIFnqavBc1HS   -u "jdbc:hive2://las-master-1:10009" 
  • Presto
presto-cli --user hive --password cptatLnbyBQ5nPuP

说明

presto仅支持查询操作。

  • SQL操作
    • 创建库
CREATE DATABASE IF NOT EXISTS iceberg.iceberg_db;
  • 创建表
CREATE TABLE  IF  NOT EXISTS  iceberg.iceberg_db.spark_pokes(
    rank  BIGINT, 
    suite STRING
) 
USING  iceberg;
  • 这里,建表语句支持 COMMENT、PARTITIONED BY、TBLPROPERTIES 等语法,详细配置参考官网文档
  • 例如,使用 PARTITIONED BY 设置分区属性示例如下:
CREATE TABLE IF NOT EXISTS iceberg.iceberg_db.spark_pokes(
rank BIGINT, 
suite STRING
) 
USING iceberg
PARTITIONED BY (suite);
  • 写入数据
INSERT INTO iceberg.iceberg_db.spark_pokes VALUES (1, 'name1'), (2, 'name2');
  • 查询数据
SELECT * FROM iceberg.iceberg_db.spark_pokes;
  • 更新数据
UPDATE iceberg.iceberg_db.spark_pokes SET suite = 'volcano' WHERE rank = 2;
  • 删除数据
DELETE FROM iceberg.iceberg_db.spark_pokes WHERE rank = 2;
  • 删除表
DROP TABLE iceberg.iceberg_db.spark_pokes;

说明

DROP TABEL 方式删除表,只是从 Hive Metastore 中删除表的元数据,表的数据还是会保留。

参数配置

接下来为您介绍 Iceberg 表使用数据湖元数据的必要配置。

Spark 配置

Spark 支持的 catalog type 有 Hive 和 Hadoop。关于 catalog 的参数配置还可参考 Iceberg 官网

Catalog type 为 hive

参数

参数值

描述

spark.sql.catalog..type

hive

底层 Iceberg catalog 实现类型,HiveCatalog,或者HadoopCatalog。如果未配置,则采用 custom catalog。

spark.sql.extensions

org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Spark SQL 扩展模块。固定值。

spark.sql.catalog.

org.apache.iceberg.spark.SparkCatalog

Catalog 名称。固定值。
另外,如果想看到同一个数据库下非 Iceberg 表和 Iceberg 表,该参数配置为:org.apache.iceberg.spark.SparkSessionCatalog

spark.sql.catalog..uri

thrift://master-1-1:9083

Metastore 的地址。查看 Hive 组件的配置文件 hive-site 中 hive.metastore.uris 参数对应的值。

spark.sql.catalog..warehouse

hdfs://master-1-1:8020/warehouse/path

Warehouse 地址。查看 Hive 组件的配置文件 hive-site 中hive.metastore.warehouse.dir参数对应的值,也可以自定义路径。也支持 TOS 路径。

示例:

spark.sql.catalog.hive_prod = org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.hive_prod.type = hive
spark.sql.catalog.hive_prod.uri = thrift://master-1-1:9083
# omit uri to use the same URI as Spark: hive.metastore.uris in hive-site.xml

Catalog type 为 hadoop

参数

参数值

描述

spark.sql.catalog..type

hadoop

底层 Iceberg catalog 实现类型,HiveCatalog,或者 HadoopCatalog。如果未配置,则采用 custom catalog。

spark.sql.extensions

org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

Spark SQL 扩展模块。固定值。

spark.sql.catalog.

org.apache.iceberg.spark.SparkCatalog

Catalog 名称。固定值。
另外,如果想看到同一个数据库下非 Iceberg 表和 Iceberg 表,该参数配置为:org.apache.iceberg.spark.SparkSessionCatalog

spark.sql.catalog..warehouse

hdfs://master-1-1:8020/warehouse/path

Warehouse 地址。可以采用 HDFS 存储,也可以采用 TOS 存储

示例

spark.sql.catalog.hadoop_prod = org.apache.iceberg.spark.SparkCatalog
spark.sql.catalog.hadoop_prod.type = hadoop
spark.sql.catalog.hadoop_prod.warehouse = hdfs://master-1-1:8020/warehouse/path

Catalog type 为空

参数

参数值

描述

spark.sql.catalog..catalog-impl

底层 Iceberg catalog 实现类型。spark.sql.catalog..type 为空时,需配置该参数。

Hive 配置

Hive 中支持 Iceberg 的 catalog type 有 Hive、Hadoop,也可以为空。 type 不同,配置项也不同:

Catalog type 为 Hive

参数

说明

iceberg.catalog.<catalog_name>.type

配置为 Hive

iceberg.catalog.<catalog_name>.uri

Metastore 的地址。查看 Hive 组件的配置文件 hive-site 中 hive.metastore.uris 参数对应的值。

iceberg.catalog.<catalog_name>.clients

客户端 pool 的个数

示例

SET iceberg.catalog.another_hive.type=hive;
SET iceberg.catalog.another_hive.uri=thrift://master-1-1:9083;    

Catalog type 为 hadoop

参数

说明

iceberg.catalog.<catalog_name>.type

配置为 hadoop

iceberg.catalog.iceberg.clients

客户端 pool 的个数

iceberg.catalog.iceberg.warehouse

Warehouse 地址

示例

SET iceberg.catalog.hadoop.type=hadoop;
SET iceberg.catalog.hadoop.warehouse=hdfs://master-1-1:8020/warehouse;

Catalog type 为空

参数

说明

iceberg.catalog.<catalog_name>.catalog-impl

catalog 的实现。catalog type 为空时,需配置。