配置 Gravitino Lance REST 服务
作者:Qi Yu 在本教程中,您将学习如何配置和使用 Gravitino Lance REST 服务。完成本指南后,您将拥有一个功能完整的 Lance REST 服务,使 Lance 客户端能够通过 HTTP API 与 Gravitino 交互。 Gravitino Lance REST 服务为管理 Lance 数据集提供 RESTful 接口,实现标准的 Lance REST API。它充当集中式 catalog 服务,允许 Lance 客户端(如 Spark 和 Ray)发现和访问由 Gravitino 管理的 Lance 数据集。 核心概念: REST 端点基础路径为 开始本教程之前,您需要: 系统要求: 必需组件: 可选组件: 继续之前,请验证您的 Python 安装并安装所需包: 架构概述: 如果您希望将 Lance REST 服务嵌入到完整的 Gravitino 服务器中(包括 Web UI、统一 REST API 等),请使用此方法。 1. 安装 Gravitino 服务器发行版 按照之前的教程 2. 启用 Lance REST 作为辅助服务 修改 3. 启动 Gravitino 服务器 4. 创建 Metalake(如果不存在) 5. 检查服务器日志(可选) 测试服务端点 您可以通过以下命令验证服务是否正在运行: 成功时,您应该看到包含 namespace 信息的 JSON 响应。 创建 catalog namespace 创建一个 catalog namespace(例如 如果成功,它会返回 namespace 信息。 配置您的 PySpark 会话以使用 Lance REST catalog。 前提条件: 执行示例操作 运行以下 Python 脚本: 您还可以使用 Ray 与 Lance Ray 集成来访问 Spark 创建的数据。 前提条件: 执行示例操作 常见问题及其解决方案: 服务连接问题: 客户端连接问题: 配置问题: 您已成功完成 Gravitino Lance REST 服务配置! 您现在拥有一个功能完整的 Lance REST 服务,包括: 有关更高级配置和详细文档: Apache Gravitino 正在快速发展,本文基于最新版本 1.1.0 编写。如果您遇到问题,请参考官方文档或在 GitHub 上提交问题。配置 Gravitino Lance REST 服务
最后更新:2026-01-23概述
http://<host>:<port>/lance/。前提条件
02-setup-guide/README.md)python --version
pip install pyspark==3.5.0 lance-ray==0.1.0 lance-namespace
[gravitino-lance-rest-architecture]设置
步骤 1:启动带有 Lance REST 服务的 Gravitino 服务器
配置 Lance REST 作为辅助服务
02-setup-guide/README.md 下载或构建 Gravitino 服务器包。conf/gravitino.conf 以启用 lance-rest 服务并进行配置:# 启用 Lance REST 服务
gravitino.auxService.names = lance-rest
gravitino.lance-rest.httpPort = 9101
gravitino.lance-rest.host = 0.0.0.0
gravitino.lance-rest.namespace-backend = gravitino
gravitino.lance-rest.gravitino-uri = http://localhost:8090
gravitino.lance-rest.gravitino-metalake = lance_metalake注意:当您访问 Lance REST 服务时,
lance_metalake 应该在 Gravitino 中存在。如果不存在,您可以在启动 Gravitino 服务器后通过 Gravitino REST API 或 Web UI 创建它。./bin/gravitino.sh startcurl -X POST -H "Content-Type: application/json" \
-d '{"name":"lance_metalake","comment":"comment"}' \
http://localhost:8090/api/metalakestail -f logs/gravitino-server.log步骤 2:验证 Lance REST 端点并创建 catalog namespace
curl -X GET http://localhost:9101/lance/v1/namespace/$/list \
-H 'Content-Type: application/json'lance_catalog),它将用于包含您的 Lance Schema 和 Table:curl -X POST http://localhost:9101/lance/v1/namespace/lance_catalog/create \
-H 'Content-Type: application/json' \
-d '{
"id": ["lance_catalog"],
"mode": "exist_ok"
}'步骤 3:从 Spark 中连接
配置 Spark
pip install pyspark==3.5.0lance-spark bundle jar(例如 lance-spark-bundle-3.5_2.12-0.0.15.jar)from pyspark.sql import SparkSession
import os
# 设置 lance-spark bundle 的路径
os.environ["PYSPARK_SUBMIT_ARGS"] = (
"--jars /path/to/lance-spark-bundle-3.5_2.12-0.0.15.jar "
"--conf \"spark.driver.extraJavaOptions=--add-opens=java.base/sun.nio.ch=ALL-UNNAMED\" "
"--conf \"spark.executor.extraJavaOptions=--add-opens=java.base/sun.nio.ch=ALL-UNNAMED\" "
"--master local[1] pyspark-shell"
)
spark = SparkSession.builder \
.appName("lance_rest_demo") \
.config("spark.sql.catalog.lance", "com.lancedb.lance.spark.LanceNamespaceSparkCatalog") \
.config("spark.sql.catalog.lance.impl", "rest") \
.config("spark.sql.catalog.lance.uri", "http://localhost:9101/lance") \
.config("spark.sql.catalog.lance.parent", "lance_catalog") \
.config("spark.sql.defaultCatalog", "lance") \
.getOrCreate()
# 创建 schema 和 table
spark.sql("CREATE DATABASE IF NOT EXISTS demo_schema")
spark.sql("""
CREATE TABLE demo_schema.test_table (id INT, value STRING)
USING lance
LOCATION '/tmp/lance_catalog/demo_schema/test_table'
""")
# 插入和查询数据
spark.sql("INSERT INTO demo_schema.test_table VALUES (1, 'test')")
spark.sql("SELECT * FROM demo_schema.test_table").show()步骤 4:使用 Ray 连接
使用 Lance REST catalog 配置 Ray
pip install lance-ray==0.1.0 lance-namespaceimport ray
import lance_namespace as ln
from lance_ray import read_lance, write_lance
ray.init()
# 连接到 Lance REST
namespace = ln.connect("rest", {"uri": "http://localhost:9101/lance"})
# 读取 Spark 创建的 table
# 注意:Table ID 是 [catalog, schema, table]
ds = read_lance(namespace=namespace, table_id=["lance_catalog", "demo_schema", "test_table"])
print(f"Row count: {ds.count()}")
ds.show()
# 执行过滤操作
result = ds.filter(lambda row: row["id"] < 100).count()
print(f"Filtered row count: {result}")故障排除
logs/gravitino-server.log 中的启动错误和配置问题gravitino.lance-rest.httpPort(默认 9101)是否开放且可访问curl 返回 404:确认 Lance REST 基础路径是 /lance,端口与配置匹配lance-spark-bundle jar 在 PYSPARK_SUBMIT_ARGS 或 --jars 中正确引用lance_catalog)lance-ray 和 lance-namespace 包已安装,REST 端点可访问gravitino.lance-rest.gravitino-metalake 中指定的 metalake 在 Gravitino 中存在恭喜
进一步阅读
下一步























