spark整合iceberge
·
// 1. 创建 SparkSession 基础配置
val spark: SparkSession = SparkSession.builder()
.master("local") // 运行在本地模式,生产环境通常是 yarn 或 k8s
.appName("SparkOperateIceberg")
// ==========================================
// 2. 配置 Hive Catalog
// ==========================================
.config("spark.sql.catalog.hive_prod", "org.apache.iceberg.spark.SparkCatalog") // 注册名为 hive_prod 的 catalog
.config("spark.sql.catalog.hive_prod.type", "hive") // 类型为 hive
.config("spark.sql.catalog.hive_prod.uri", "thrift://node1:9083") // Hive Metastore 地址
.config("spark.sql.engine.hive.enabled", "true") // 启用 Hive 支持
// ==========================================
// 3. 配置 Hadoop Catalog
// ==========================================
.config("spark.sql.catalog.hadoop_prod", "org.apache.iceberg.spark.SparkCatalog") // 注册名为 hadoop_prod 的 catalog
.config("spark.sql.catalog.hadoop_prod.type", "hadoop") // 类型为 hadoop
.config("spark.sql.catalog.hadoop_prod.warehouse", "hdfs://mycluster/sparkoperateiceberg") // 元数据存储路径
// 4. 构建会话
.getOrCreate()
用于创建 SparkSession并同时配置了 Hive Catalog 和 Hadoop Catalog。
def main(args: Array[String]): Unit = {
// 创建 Spark Session
val spark: SparkSession = SparkSession.builder()
.master("local") // 运行模式,本地调试使用 local
.appName("SparkOperateIceberg")
// ================= 设置 Hive Catalog =================
.config("spark.sql.catalog.hive_prod", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.hive_prod.type", "hive")
.config("spark.sql.catalog.hive_prod.uri", "thrift://node1:9083") // Hive Metastore 地址
.config("iceberg.engine.hive.enabled", "true") // 启用 Iceberg 对 Hive 引擎的支持
// ================= 设置 Hadoop Catalog =================
.config("spark.sql.catalog.hadoop_prod", "org.apache.iceberg.spark.SparkCatalog")
.config("spark.sql.catalog.hadoop_prod.type", "hadoop")
.config("spark.sql.catalog.hadoop_prod.warehouse", "hdfs://mycluster/sparkoperateiceberg") // 仓库路径
.getOrCreate()
spark
}
- 版本兼容性说明
Spark 与 Iceberg 版本的兼容性问题:
使用的版本:Iceberg 0.12.1。
兼容性:该版本兼容 Spark 2.4 及以上版本。
Spark 2.4 的限制:不支持 DDL(数据定义语言)操作、增加分区及分区转换、Iceberg 元数据查询、insert into/overwrite等操作。
推荐方案:建议使用 Spark 3.x 版本来整合 Iceberg 0.12.1。图中实际使用的是 Spark 3.1.2 版本,这是官方推荐的稳定组合。 - 关键点总结
Catalog 类型:
Hive Catalog:依赖于 Hive Metastore (thrift://node1:9083),适合企业已有 Hive 环境的场景。
Hadoop Catalog:直接基于文件系统(HDFS),路径为 hdfs://mycluster/sparkoperateiceberg,配置更简单,不依赖 Hive。
核心依赖:代码中注册的 Catalog 实现类是 org.apache.iceberg.spark.SparkCatalog,这是 Iceberg 提供的标准 Spark Catalog 接口。
4,sparkhe iceberg版本匹配,iceberg0.12.1支持spark2.4+ ,但是不完善,建议直接用spark3+ spark3 对应hive3 推荐hive3.1.2
更多推荐
所有评论(0)