从零开始使用Iceberg
本章节主要介绍如何在spark-sql中操作Iceberg表,推荐使用Hive Catalog方式登录spark-sql。
Iceberg当前为公测阶段,若需使用需联系技术支持申请白名单开通。
前提条件
- 已安装Spark服务,且服务运行状态正常。
- 已安装Spark客户端,详细操作请参见安装客户端(3.x及之后版本)。
- 已在Manager界面添加人机用户,例如:iceberguser,且该用户属于hadoop和hive用户组,主组为hadoop。
操作步骤
- 使用root登录客户端安装节点,执行如下命令:
cd 客户端安装目录
- 执行以下命令环境变量并认证用户:
source bigdata_env
kinit 创建的业务用户(未开启Kerberos认证的用户请跳过该操作)
- 将以下参数添加到“Spark/spark/conf/spark-defaults.conf”文件中并保存:
spark.sql.catalog.local=org.apache.iceberg.spark.SparkCatalog spark.sql.catalog.local.type=hadoop spark.sql.catalog.local.warehouse=/tmp/ice-warehouse spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog spark.sql.catalog.spark_catalog.type=hive
- 执行以下命令登录spark-sql客户端:
- Hadoop Catalog方式
--conf spark.sql.defaultCatalog=local \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.storeAssignmentPolicy=ANSI
- Hadoop Catalog方式不支持在创建数据库和创建表时指定Location。
- 如果使用Hadoop Catalog,需要设置操作用户具有3中配置的“spark.sql.catalog.local.warehouse”路径的写和执行权限。
- Hive Catalog方式
--conf spark.sql.defaultCatalog=spark_catalog \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
--conf spark.sql.storeAssignmentPolicy=ANSI
- Hadoop Catalog方式
- 执行以下命令创建数据库:
create database if not exists iceberg_db;
- 执行以下命令创建Iceberg表:
use iceberg_db;
CREATE TABLE if not exists sample_table (id bigint, data string) USING iceberg TBLPROPERTIES ('write.format.default'='parquet');
- 执行以下命令向Iceberg表中插入数据:
INSERT INTO sample_table VALUES (4, 'a'), (5, 'b'), (6, 'c');
- 执行以下命令更新表数据:
UPDATE sample_table set data = 'd' where id = 4;
- 执行以下命令删除数据:
DELETE FROM sample_table where id = 5;
- 执行以下命令查询Iceberg表数据:
select * from sample_table;