Polaris Spark 客户端
Polaris Spark 客户端
Polaris 提供了一个 Spark 客户端,用于通过 Generic Tables 管理非 Iceberg 表。
📝 注意
Spark 客户端既可以管理 Iceberg 表,也可以管理非 Iceberg 表。
只使用 Iceberg 表的用户无需使用该客户端,可直接使用 Iceberg 提供的 Spark 客户端。
本页介绍如何使用 Polaris Spark 客户端将 Spark 与 Polaris Service 连接起来。
通过本地 Polaris 服务快速上手
如果想在本地 Polaris 服务上快速体验该功能,只需检出 Polaris 代码仓库,并按照 Spark 插件快速入门 README 中的说明操作即可。
检出 Polaris 代码仓库:
git clone https://github.com/apache/polaris.git ~/polaris针对已部署的 Polaris 服务启动 Spark
在开始之前,请确保已部署的 Polaris 服务支持通用表(Generic Tables),并且已安装 Spark 3.5(版本 3.5.3 或更高)。推荐使用 Spark 3.5.6,你可以按照以下说明获取 Spark 3.5.6 发行版。
cd ~
wget https://www.apache.org/dyn/closer.lua/spark/spark-3.5.6/spark-3.5.6-bin-hadoop3.tgz?action=download
mkdir spark-3.5
tar xzvf spark-3.5.6-bin-hadoop3.tgz -C spark-3.5 --strip-components=1
cd spark-3.5使用 Polaris Spark 客户端连接 Spark
可以使用以下 CLI 命令,通过已发布的 Polaris Spark 客户端启动 Spark 并连接到已部署的 Polaris 服务。
bin/spark-shell \
--packages <polaris-spark-client-package>,org.apache.iceberg:iceberg-aws-bundle:1.10.0,io.delta:delta-spark_2.12:3.3.1 \
--conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,io.delta.sql.DeltaSparkSessionExtension \
--conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.delta.catalog.DeltaCatalog \
--conf spark.sql.catalog.<spark-catalog-name>.warehouse=<polaris-catalog-name> \
--conf spark.sql.catalog.<spark-catalog-name>.header.X-Iceberg-Access-Delegation=vended-credentials \
--conf spark.sql.catalog.<spark-catalog-name>=org.apache.polaris.spark.SparkCatalog \
--conf spark.sql.catalog.<spark-catalog-name>.uri=<polaris-service-uri> \
--conf spark.sql.catalog.<spark-catalog-name>.credential='<client-id>:<client-secret>' \
--conf spark.sql.catalog.<spark-catalog-name>.scope='PRINCIPAL_ROLE:ALL' \
--conf spark.sql.catalog.<spark-catalog-name>.token-refresh-enabled=true假设你要使用的已发布 Polaris Spark 客户端为 org.apache.polaris:polaris-spark-3.5_2.12:1.0.0,请将 polaris-spark-client-package 字段替换为该发布版本。
spark-catalog-name 是你在 Spark 中使用的目录名称,polaris-catalog-name 是 Polaris 服务所使用的目录名称,为简单起见,两者可以使用相同的名称。
请将 polaris-service-uri 替换为已部署的 Polaris 服务的 URI。例如,对于本地部署的 Polaris 服务,该 URI 为 http://localhost:8181/api/catalog。
关于 client-id 和 client-secret 的取值,你可以参考使用 Polaris获取更多详细信息。
你也可以通过以编程方式初始化 SparkSession 来建立连接,以下是 PySpark 的示例:
from pyspark.sql import SparkSession
spark = SparkSession.builder
.config("spark.jars.packages", "<polaris-spark-client-package>,org.apache.iceberg:iceberg-aws-bundle:1.10.0,io.delta:delta-spark_2.12:3.3.1")
.config("spark.sql.catalog.spark_catalog", "org.apache.spark.sql.delta.catalog.DeltaCatalog")
.config("spark.sql.extensions", "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions,io.delta.sql.DeltaSparkSessionExtension")
.config("spark.sql.catalog.<spark-catalog-name>", "org.apache.polaris.spark.SparkCatalog")
.config("spark.sql.catalog.<spark-catalog-name>.uri", <polaris-service-uri>)
.config("spark.sql.catalog.<spark-catalog-name>.token-refresh-enabled", "true")
.config("spark.sql.catalog.<spark-catalog-name>.credential", "<client-id>:<client_secret>")
.config("spark.sql.catalog.<spark-catalog-name>.warehouse", <polaris_catalog_name>)
.config("spark.sql.catalog.polaris.scope", 'PRINCIPAL_ROLE:ALL')
.config("spark.sql.catalog.polaris.header.X-Iceberg-Access-Delegation", 'vended-credentials')
.getOrCreate()与 CLI 命令类似,请确保相应字段已被正确替换。
使用 Spark 创建表
启动 Spark 后,你可以用它来创建和访问 Iceberg 表与 Delta 表。例如:
spark.sql("USE polaris")
spark.sql("CREATE NAMESPACE IF NOT EXISTS DELTA_NS")
spark.sql("CREATE NAMESPACE IF NOT EXISTS DELTA_NS.PUBLIC")
spark.sql("USE NAMESPACE DELTA_NS.PUBLIC")
spark.sql("""CREATE TABLE IF NOT EXISTS PEOPLE (
id int, name string)
USING delta LOCATION 'file:///tmp/var/delta_tables/people';
""")使用本地 Polaris Spark 客户端 jar 连接 Spark
如果你想使用目前尚未发布的 Spark 客户端版本,可以从源码在本地构建 Spark 客户端 jar。请检出 Polaris 仓库,并参阅 Spark 插件的 README 获取详细说明。
当前限制
以下说明了 Polaris Spark 客户端目前存在的限制:
通用限制
- Polaris Spark 客户端仅支持 Iceberg 表和 Delta 表,不支持 CSV、JSON 等其他表格式。
- 通用表(非 Iceberg 表)的 API 目前不支持凭证分发(credential vending)。
Delta 表限制
- Delta 表不支持选择查询建表(CTAS)。因此,
Dataframe的saveAsTable方法也不受支持,因为它依赖于 CTAS 的支持。 - 不支持在未指定位置的情况下创建 Delta 表。
- 不支持重命名 Delta 表。
- Delta 表不支持 ALTER TABLE … SET LOCATION 语句。
评论
登录后参与评论
KnowForge