You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法从Nessie访问兼容S3的MINIO服务器上的Iceberg表元数据

无法通过Nessie WebUI访问MINIO上的Iceberg表元数据

已通过PySpark结合Nessie和MINIO完成Iceberg表的读写操作,PySpark代码如下:

#!/usr/bin/python3.9

from pyspark.sql import SparkSession

iceberg_spark_jar = '/AKE/iceberg-spark-runtime-3.5_2.12-1.9.0.jar'
hadoop_aws_jar = '/AKE/hadoop-aws-3.3.4.jar'
aws_java_sdk_jar = '/AKE/aws-java-sdk-bundle-1.11.1026.jar'

warehouse_path = '/user/hive/warehouse'
catalog = 'nessie'
namespace = 'ake_database'
table = 'ake_iceberg_table'

# Initialize Spark session with Hive support and Iceberg configuration
spark = SparkSession.builder \
.appName("Iceberg with Nessie Catalog") \
    .config("spark.sql.catalog.nessie", "org.apache.iceberg.spark.SparkCatalog") \
    .config("spark.sql.catalog.nessie.catalog-impl", "org.apache.iceberg.nessie.NessieCatalog") \
    .config("spark.sql.catalog.nessie.uri", "http://localhost:19120/api/v1") \
    .config("spark.sql.catalog.nessie.ref", "main") \
    .config("spark.sql.catalog.nessie.warehouse", "s3a://ake-bucket/ake-warehouse") \
    .config("spark.hadoop.fs.s3a.endpoint", "http://localhost:9000") \
    .config("spark.hadoop.fs.s3a.access.key", "minioadmin") \
    .config("spark.hadoop.fs.s3a.secret.key", "minioadmin123") \
    .config("spark.hadoop.fs.s3a.path.style.access", "true") \
    .config("spark.hadoop.fs.s3a.impl", "org.apache.hadoop.fs.s3a.S3AFileSystem") \
    .config("spark.jars", f"{iceberg_spark_jar},{hadoop_aws_jar},{aws_java_sdk_jar}") \
    .getOrCreate()

# Example DataFrame
data = [("Alice", 34), ("Bob", 45), ("Cathy", 29)]
columns = ["Name", "Age"]
df = spark.createDataFrame(data, columns)

# Drop an Iceberg table from database
spark.sql(f"DROP TABLE IF EXISTS {catalog}.{namespace}.{table}")

# Drop the database
spark.sql(f"DROP DATABASE IF EXISTS {catalog}.{namespace}")

# Create the database
spark.sql(f"CREATE NAMESPACE IF NOT EXISTS {catalog}.{namespace}")

spark.sql(f"SHOW NAMESPACES IN {catalog}").show()
spark.sql(f"SHOW TABLES IN {catalog}.{namespace}").show()

# Create an Iceberg table directly in the database
spark.sql(f"""
CREATE TABLE IF NOT EXISTS {catalog}.{namespace}.{table} (
    name STRING, 
    age INT
)
USING iceberg
""")

df.write.format("iceberg").mode("overwrite").saveAsTable(f"{catalog}.{namespace}.{table}")

iceberg_df = spark.read.format("iceberg").load(f"{catalog}.{namespace}.{table}")
iceberg_df.show()

通过MINIO WebUI可以确认表已成功创建,但访问Nessie WebUI的表地址时,出现以下异常:

{
"error" : {
"message" : "Failed to read table metadata from s3a://ake-bucket/ake-warehouse/ake_database/ake_iceberg_table_9b043614-15b0-4b84-91b0-0d31a056632e/metadata/00001-4988857f-b819-4a96-806f-0fe6f163dd1a.metadata.json",
"type" : "RuntimeException",
"code" : 500
}
}

MINIO的Docker启动命令:

docker run -it --name minio-local -d -p 9000:9000 -p 9001:9001 \
-e "MINIO_ROOT_USER=minioadmin" \
-e "MINIO_ROOT_PASSWORD=minioadmin123" \
-v /ake-data/minio-data:/data \
quay.io/minio/minio server /data --console-address ":9001"

Nessie的Docker启动命令:

sudo docker run -d --name nessie01041 -p 19120:19120 -v /ake-data/nessie/warehouse:/warehouse -e nessie.catalog.warehouses='ake-warehouse' -e nessie.catalog.warehouses.ake-warehouse.location="s3a://ake-bucket/ake-warehouse" -e nessie.catalog.default-warehouse=ake-warehouse \
-e nessie.catalog.service.s3.default-options.endpoint=http://localhost:9000 \
-e nessie.catalog.service.s3.default-options.access-key=urn:nessie-secret:quarkus:nessie.catalog.secrets.access-key \
-e nessie.catalog.secrets.access-key.name=minioadmin \
-e nessie.catalog.secrets.access-key.secret=minioadmin123 \
-e nessie.catalog.service.s3.default-options.path-style-access=true \
ghcr.io/projectnessie/nessie:0.104.1

请求解决此无法通过Nessie访问MINIO上Iceberg表元数据的问题。


内容的提问来源于stack exchange,提问作者Ahmed Kamal ELSaman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 22:44:54