// 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
}
  1. 版本兼容性说明
    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​ 版本,这是官方推荐的稳定组合。
  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

更多推荐