目录(Catalog)

目录属性

师成师成· 更新于 2026-09-28· 阅读 17 分钟· 0 次阅读

登录后可跨设备保存划线和私人笔记登录

Catalog 属性

通用属性

Iceberg catalog 支持使用 catalog 属性来配置 catalog 的行为。以下是常用的 catalog 属性列表:

属性默认值描述
catalog-implnull引擎要使用的自定义 Catalog 实现
io-implnull目录(catalog)中要使用的自定义 FileIO 实现
warehousenull数据仓库的根路径
urinullURI 字符串,例如 Hive metastore 的 URI
clients2客户端池大小
cache-enabledtrue是否缓存目录(catalog)条目
cache.expiration-interval-ms30000目录条目在本地的缓存时长,单位为毫秒;0 表示禁用缓存,负值表示永不过期
metrics-reporter-implorg.apache.iceberg.metrics.LoggingMetricsReporter目录中要使用的自定义 MetricsReporter 实现。更多详情参见指标上报章节
unique-table-locationfalse是否为新表使用唯一的位置
encryption.kms-implnull目录中用于与 KMS(密钥管理服务)交互的自定义 KeyManagementClient 实现。更多详情参见加密文档

HadoopCatalog 与 HiveCatalog 可以在其构造函数中访问这些属性。任何其他自定义 catalog 都可以通过实现 Catalog.initialize(catalogName, catalogProperties) 来访问这些属性。这些属性可以手动构造,也可以从 Spark 或 Flink 等计算引擎传入。Spark 将其会话属性作为 catalog 属性使用,详见 Spark 配置一节。Flink 通过 CREATE CATALOG 语句传入 catalog 属性,详见 Flink一节。

REST catalog 属性

以下属性用于配置 REST catalog 客户端的行为。

属性默认值描述
snapshot-loading-modeALL控制如何从 REST 服务器加载快照。支持的值:ALL(加载所有快照)、REFS(仅加载被引用的快照)。
rest-metrics-reporting-enabledtrue是否启用向 REST 服务器上报指标。
view-endpoints-supportedfalse用于兼容较旧的 REST 服务器。如果服务器支持视图端点,但未在 ConfigResponse 中发送 endpoints 字段,则应设置为 true。
rest-page-sizenull列出命名空间、表或其他分页资源时使用的分页大小。
namespace-separator%1F与 REST 服务器通信时,用于分隔命名空间层级的分隔符字符。
scan-planning-modeCLIENT控制扫描计划的执行位置。支持的值:CLIENT(客户端规划)、SERVER(服务端规划)。服务器可在 LoadTableResponse 中按表覆盖此设置。

表缓存属性

以下属性用于配置面向时效性的表加载所使用的表缓存。请注意,此缓存与通常可在 catalog 级别配置的缓存不同。

属性默认值说明
rest-table-cache.expire-after-write-ms300000(5 分钟)缓存表条目在写入后经过多少毫秒过期。
rest-table-cache.max-entries100要缓存的表条目最大数量。

认证属性

以下目录属性用于配置 REST 目录的认证。它们支持 Basic、OAuth2、SigV4 和 Google 认证。

REST 认证属性

属性默认值说明
rest.auth.typenoneREST 目录访问的认证机制。支持的取值:none、basic、oauth2、sigv4、google。
rest.auth.basic.usernamenullBasic 认证的用户名。当 rest.auth.type = basic 时必填。
rest.auth.basic.passwordnullBasic 认证的密码。当 rest.auth.type = basic 时必填。
rest.auth.sigv4.delegate-auth-typeoauth2sigv4 签名之后要委托使用的认证类型。

OAuth2 认证属性

使用 oauth2 认证时需要包含的必需属性和可选属性。

属性默认值说明
tokennull用于与服务器交互的 Bearer 令牌。必须提供 token 或 credential 之一。
credentialnull形如 client_id:client_secret 的凭证字符串,用于在 OAuth2 客户端凭据流程中换取令牌。必须提供 token 或 credential 之一。
oauth2-server-uriv1/oauth/tokensOAuth2 令牌端点 URI。如果 REST catalog 不是 OAuth2 认证服务器,则必须提供。
token-expires-in-ms3600000 (1 小时)以毫秒为单位的时间,超过该时间后 Bearer 令牌被视为过期。用于决定何时刷新或重新换取令牌。
token-refresh-enabledtrue决定在获取到过期详情时是否自动刷新令牌。
token-exchange-enabledtrue决定是否使用令牌交换流程获取新令牌。禁用后将回退到客户端凭据流程。
scopecatalogoauth2 的附加作用域。
audiencenull可选参数,用于指定令牌的 audience
resourcenull可选参数,用于指定 resource

Google 认证属性

使用 google 认证时需要包含的必需属性和可选属性。

属性默认值说明
gcp.auth.credentials-path应用默认凭据 (ADC)服务账号 JSON 密钥文件的路径。
gcp.auth.credentials-json应用默认凭据 (ADC)服务账号凭据的 JSON 字符串。
gcp.auth.scopeshttps://www.googleapis.com/auth/cloud-platform请求的 OAuth 作用域,以逗号分隔的列表。

锁相关的 Catalog 属性

以下是与加锁相关的 catalog 属性。某些 catalog 实现会使用它们来控制提交期间的加锁行为。

属性默认值说明
lock-implnull锁管理器的自定义实现,实际接口取决于所使用的 catalog
lock.tablenull用于加锁的辅助表,例如 AWS DynamoDB 锁管理器
lock.acquire-interval-ms5000 (5 秒)每次尝试获取锁之间的等待间隔
lock.acquire-timeout-ms180000 (3 分钟)尝试获取锁的最长等待时间
lock.heartbeat-interval-ms3000 (3 秒)获取锁后每次心跳之间的等待间隔
lock.heartbeat-timeout-ms15000 (15 秒)在判定锁已过期前,允许的最长无心跳时间

Hadoop 配置

HadoopTables 锁配置

在使用 HadoopTables(没有 catalog 的表)时,可以通过为 锁相关的 Catalog 属性一节中的属性添加 iceberg.tables.hadoop. 前缀来进行配置。这可以确保在 S3 等缺乏原生写互斥机制的文件系统上实现原子提交。

信息

要将 DynamoDB 作为锁管理器配合 HadoopTables 使用,请将 iceberg.tables.hadoop.lock-impl 设置为 org.apache.iceberg.aws.dynamodb.DynamoDbLockManager,并将 iceberg.tables.hadoop.lock.table 设置为你的 DynamoDB 表名。更多详情请参阅 DynamoDB Lock Manager。

Hive Metastore 配置

Hive Metastore 连接器会使用 Hadoop 配置中的以下属性。HMS 的表锁定是一个两步过程:

  1. 创建锁:在 HMS 中创建锁并排队等待获取
  2. 检查锁:检查锁是否已成功获取
属性默认值说明
iceberg.hive.client-pool-size5在 HMS 中跟踪表时 Hive 客户端池的大小
iceberg.hive.lock-creation-timeout-ms180000(3 分钟)在 HMS 中创建锁的最长耗时(毫秒)
iceberg.hive.lock-creation-min-wait-ms50在 HMS 中重试创建锁之间的最小等待时间(毫秒)
iceberg.hive.lock-creation-max-wait-ms5000在 HMS 中重试创建锁之间的最大等待时间(毫秒)
iceberg.hive.lock-timeout-ms180000(3 分钟)获取锁的最长耗时(毫秒)
iceberg.hive.lock-check-min-wait-ms50检查锁获取状态之间的最小等待时间(毫秒)
iceberg.hive.lock-check-max-wait-ms5000检查锁获取状态之间的最大等待时间(毫秒)
iceberg.hive.lock-heartbeat-interval-ms240000(4 分钟)HMS 锁的心跳间隔
iceberg.hive.metadata-refresh-max-retries2元数据文件缺失时的最大重试次数
iceberg.hive.table-level-lock-evict-ms600000(10 分钟)JVM 表锁的超时时间
iceberg.engine.hive.lock-enabledtrue使用 HMS 锁来确保提交的原子性

注意:iceberg.hive.lock-check-max-wait-ms 和 iceberg.hive.lock-heartbeat-interval-ms 应小于 Hive Metastore 的事务超时时间(hive.txn.timeout,较新版本中为 metastore.txn.timeout)。否则,锁上的心跳(在锁检查期间发送)会在 Iceberg 重试该锁之前就在 Hive Metastore 中过期。

警告:将 iceberg.engine.hive.lock-enabled 设置为 false 会使 HiveCatalog 在提交表变更时不使用 Hive 锁。只有在满足以下所有条件时,才应将其设置为 false:

  • HIVE-26882 已在 Hive Metastore 服务器上可用
  • 如果 Hive Metastore 使用 MySQL 或 MariaDB 作为后端,则 HIVE-28121 已在 Hive Metastore 服务器上可用
  • 所有其他向此 HiveCatalog 所提交的表进行提交的 HiveCatalog 也都使用 Iceberg 1.3 或更高版本
  • 所有其他向此 HiveCatalog 所提交的表进行提交的 HiveCatalog 也都已在提交时禁用 Hive 锁

未能确保满足这些条件可能会损坏表。

即使将 iceberg.engine.hive.lock-enabled 设置为 false,HiveCatalog 仍可以通过将表属性 engine.hive.lock-enabled 设置为 true 来对单个表使用锁。当其他 HiveCatalog 无法升级、无法设置为不使用 Hive 锁进行提交时,这一功能非常有用。

评论

登录后参与评论

正在加载评论…