使用Polars读取Delta数据帧时出警告但功能正常,求排查
问题描述
我在MinIO服务器中存储了Delta格式的数据,MinIO启动命令如下:
minio server --address :9010 --console-address :19010 ./data
使用Polars读取数据时,先出现约1秒延迟,随后弹出警告,但最终功能正常。警告信息如下:
2024-04-08T07:17:19Z WARN aws_config::imds::region] failed to load region from IMDS err=failed to load IMDS session token: dispatch failure: timeout: error trying to connect: HTTP connect timeout occurred after 1s: HTTP connect timeout occurred after 1s: timed out (FailedToLoadToken(FailedToLoadToken { source: DispatchFailure(DispatchFailure { source: ConnectorError { kind: Timeout, source: hyper::Error(Connect, HttpTimeoutError { kind: "HTTP connect", duration: 1s }), connection: Unknown } }) })) [2024-04-08T07:17:19Z WARN aws_config::imds::region] failed to load region from IMDS err=failed to load IMDS session token: dispatch failure: io error: error trying to connect: tcp connect error: Host is down (os error 64): tcp connect error: Host is down (os error 64): Host is down (os error 64) (FailedToLoadToken(FailedToLoadToken { source: DispatchFailure(DispatchFailure { source: ConnectorError { kind: Io, source: hyper::Error(Connect, ConnectError("tcp connect error", Os { code: 64, kind: Uncategorized, message: "Host is down" })), connection: Unknown } }) })) [2024-04-08T07:17:19Z WARN aws_config::imds::region] failed to load region from IMDS err=failed to load IMDS session token: dispatch failure: io error: error trying to connect: tcp connect error: Host is down (os error 64): tcp connect error: Host is down (os error 64): Host is down (os error 64) (FailedToLoadToken(FailedToLoadToken { source: DispatchFailure(DispatchFailure { source: ConnectorError { kind: Io, source: hyper::Error(Connect, ConnectError("tcp connect error", Os { code: 64, kind: Uncategorized, message: "Host is down" })), connection: Unknown } }) }))
使用的代码:
import polars as pl minio_storage_options = { "AWS_ENDPOINT_URL": "http://localhost:9010", "AWS_ACCESS_KEY_ID": "minioadmin", "AWS_SECRET_ACCESS_KEY": "minioadmin", "AWS_REGION": "<localhost>", # Unused?? "AWS_ALLOW_HTTP": "true", # Required } df = pl.read_delta("s3://reddit-submissions/submissions-raw", storage_options=minio_storage_options) print(df.head())
环境信息:
❯ uv pip freeze | grep "delta\|polars" deltalake==0.16.4 polars==0.20.18 ❯ python Python 3.11.5 (main, Aug 24 2023, 15:09:45) [Clang 14.0.3 (clang-1403.0.22.14.1)] on darwin
问题原因与解决方法
这些警告和延迟是因为AWS SDK在尝试从EC2实例元数据服务(IMDS)加载区域信息,但当前环境并非AWS EC2,导致连接失败,产生1秒超时延迟和警告。
解决步骤:
- 修正AWS_REGION值:将
AWS_REGION改为合法的AWS区域格式字符串(比如us-east-1),MinIO对区域值没有严格校验,但不能使用<localhost>这类无效值。 - 禁用IMDS查询:在
storage_options中添加"AWS_EC2_METADATA_DISABLED": "true",直接阻止SDK访问IMDS,彻底消除延迟和警告。
修改后的代码:
import polars as pl minio_storage_options = { "AWS_ENDPOINT_URL": "http://localhost:9010", "AWS_ACCESS_KEY_ID": "minioadmin", "AWS_SECRET_ACCESS_KEY": "minioadmin", "AWS_REGION": "us-east-1", "AWS_ALLOW_HTTP": "true", "AWS_EC2_METADATA_DISABLED": "true" } df = pl.read_delta("s3://reddit-submissions/submissions-raw", storage_options=minio_storage_options) print(df.head())
内容的提问来源于stack exchange,提问作者user554319
相关产品推荐
相关产品推荐

