实践数据湖iceberg 第五课 hive catalog特点

本文通过实战演示了如何使用HiveCatalog结合Iceberg表格式进行数据操作,包括创建目录、表结构、写入数据及查看元数据的变化。

系列文章目录


@[TOC](文章目录)

前言

不以完美记录做为目标。以记录自己学习过程为主线,进行记录,记录通过实践,来了解原理,并把这个实践过程分享给后来需要学习的同学。

本节:了解hive catalog与hadoop catalog的区别,进行认识


1. 建立 hive catalog,建表

创建hive_catalog与表

CREATE CATALOG hive_catalog4 WITH (
  'type'='iceberg',
  'catalog-type'='hive',
  'uri'='thrift://hadoop101:9083',
  'clients'='5',
  'property-version'='1',
  'warehouse'='hdfs:////user/hive/warehouse/hive_catalog4'
);

在hive_catalog下创建数据库
use catalog hive_catalog4;
 
 
CREATE TABLE `hive_catalog4`.`default`.`sample` ( id BIGINT COMMENT 'unique id', data STRING );

2. 查看hdfs

[root@hadoop101 ~]# hadoop fs -ls -R
<think>好的,用户想知道如何用Spark Shell修改与Hive集成的Iceberg表结构。首先,我需要确认IcebergHive集成的具体情况。Iceberg支持Hive Catalog,所以用户可能是在使用Hive Metastore来管理Iceberg表。接下来,用户需要修改表结构,常见的操作包括添加列、删除列、重命名列或者修改列类型。 首先,我需要回忆一下Iceberg对模式变更的支持。Iceberg允许进行一些模式演化操作,比如添加列、删除列、重命名列、更新类型等,但有些操作可能有条件限制。例如,重命名列在Iceberg中需要确保没有使用到该列的现有数据,或者依赖于具体的版本。 然后,用户使用的是Spark Shell,所以需要用Spark的API或者Spark SQL来执行这些操作。需要确认用户的Spark环境是否正确配置了Iceberg的依赖,并且使用了正确的Catalog配置。例如,在启动Spark Shell时需要包含Iceberg的jar包,并且在Spark配置中设置spark.sql.catalog实现为HiveCatalog或者其它对应的Catalog。 接下来,具体的步骤可能包括: 1. 启动Spark Shell并配置IcebergHive Catalog。 2. 使用Spark SQL的ALTER TABLE语句来修改表结构。 例如,添加列:ALTER TABLE db.table ADD COLUMN new_col STRING; 重命名列:ALTER TABLE db.table RENAME COLUMN old_col TO new_col; 删除列:ALTER TABLE db.table DROP COLUMN old_col; 3. 需要注意的是,某些操作可能需要特定的Iceberg版本支持,比如重命名列在较新的版本中才被支持,或者需要确保没有分区字段被修改等限制条件。 另外,用户提到表是与Hive集成的,所以可能需要确认通过Hive Metastore访问Iceberg表时,是否所有模式变更都能正确同步,或者是否需要额外的Hive命令。不过根据Iceberg的文档,使用Spark SQL直接操作应该会通过Hive Catalog同步到Hive Metastore。 还需要提醒用户注意事项,比如在修改表结构前备份数据,确保操作符合业务需求,以及了解某些操作(如删除列)是否会导致数据丢失等。此外,执行这些操作时,可能需要相应的权限,比如对Hive Metastore底层存储的写权限。 最后,可能需要提供示例代码,展示如何启动Spark Shell并执行ALTER命令,确保用户能够按步骤操作。例如: 启动Spark Shell时添加Iceberg包: spark-shell --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.3.0 配置Hive Catalog: spark.sql("CREATE DATABASE IF NOT EXISTS mydb") spark.sql("USE mydb") spark.sql("ALTER TABLE mytable ADD COLUMN new_column STRING") 总结步骤,确保用户能理解每个环节,并正确应用。同时,可能需要指出常见问题,比如依赖版本不匹配、Catalog配置错误等,以及如何解决这些问题。</think>以下是通过Spark Shell修改Hive集成Iceberg表结构的步骤指南: ### 一、前置准备 1. **版本要求** - Iceberg 0.11.0+ (推荐1.x版本) - Spark 3.x + Iceberg适配版本 - Hive Metastore 3.x+ 2. **启动Spark Shell** ```bash spark-shell --packages org.apache.iceberg:iceberg-spark-runtime-3.3_2.12:1.3.0 \ --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \ --conf spark.sql.catalog.hive_prod=org.apache.iceberg.spark.SparkCatalog \ --conf spark.sql.catalog.hive_prod.type=hive \ --conf spark.sql.catalog.hive_prod.uri=thrift://your-hms:9083 ``` ### 二、常用表结构修改操作 #### 1. 添加列 ```scala spark.sql(""" ALTER TABLE hive_prod.db.table_name ADD COLUMN new_col STRING COMMENT '新字段' """) ``` #### 2. 重命名列 ```scala spark.sql(""" ALTER TABLE hive_prod.db.table_name RENAME COLUMN old_col TO new_col """) ``` #### 3. 删除列 ```scala spark.sql(""" ALTER TABLE hive_prod.db.table_name DROP COLUMN deprecated_col """) ``` #### 4. 修改列类型 ```scala spark.sql(""" ALTER TABLE hive_prod.db.table_name ALTER COLUMN price TYPE DOUBLE """) ``` ### 三、注意事项 1. **模式演化限制** - 不能删除分区字段 - 修改主键需要重建表 - 数据类型转换需兼容(如INT→LONG允许,STRING→INT需数据支持) 2. **Hive Metastore同步** ```bash # 手动同步元数据(某些旧版本可能需要) MSCK REPAIR TABLE table_name; ``` 3. **验证修改** ```scala spark.sql("DESCRIBE hive_prod.db.table_name").show() ``` ### 四、操作示例 ```scala // 连接到Hive Catalog spark.sql("USE hive_prod") // 添加两个新字段 spark.sql(""" ALTER TABLE sales ADD COLUMN region STRING COMMENT '销售区域', ADD COLUMN discount DECIMAL(10,2) COMMENT '折扣金额' """) // 重命名时间字段 spark.sql(""" ALTER TABLE sales RENAME COLUMN event_time TO transaction_time """) ``` ### 五、常见问题排查 1. **找不到Catalog** - 检查spark配置中`hive_prod` Catalog定义 - 验证Hive Metastore地址是否正确 2. **权限问题** - 确保有Hive Metastore的WRITE权限 - 检查HDFS/对象存储的写权限 3. **版本冲突** ```bash # 查看版本兼容性矩阵 https://iceberg.apache.org/releases/ ``` 建议执行变更前先创建快照备份: ```scala spark.sql("CALL hive_prod.system.create_snapshot('db.table', '/backup/path')") ```
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值