PyIceberg追加Iceberg表数据时出现Signer set, but token is not available错误
PyIceberg + Lakekeeper + Ceph S3 写入数据时出现SignError问题排查
我目前用PyIceberg(0.6.0+)搭配兼容S3的Ceph后端,通过Lakekeeper作为REST目录和元数据管理器,向Iceberg表写入数据,操作流程如下:
- 创建Iceberg表,元数据存储在
s3://bucketname/iceberg/namespace/table/ - 在Python中加载该表
- 将pandas DataFrame转换为与表结构、字段名匹配的PyArrow表
- 尝试通过
table.append(arrow_table)追加数据
初始化RestCatalog时未设置任何令牌或签名者相关选项:
from pyiceberg.catalog.rest import RestCatalog catalog = RestCatalog( name="mywarehouse", warehouse="mywarehouse", uri="http://localhost:8181/catalog/" )
用s3fs在Python中做sanity check时可以正常操作存储桶文件,但执行table.append(arrow_table)(列结构完全匹配)时触发错误:
pyiceberg.exceptions.SignError: Signer set, but token is not available
相关情况说明:
- 未在Lakekeeper UI或代码中配置
s3.signer或s3.token属性 - 报错时元数据文件已经成功写入存储桶
- 错误发生在数据追加阶段,底层涉及fsspec、s3fs和aiobotocore
- Lakekeeper仓库的S3存储配置中没有签名者或令牌相关属性
想请教几个问题:
- 为什么PyIceberg或Lakekeeper会隐式要求令牌签名者?
s3.signer/s3.token还可能在哪些地方被默认设置或继承?- 有没有办法让PyIceberg仅使用Access/Secret密钥访问S3?
内容的提问来源于stack exchange,提问作者amavi
相关产品推荐
相关产品推荐

