You need to enable JavaScript to run this app.
文档中心
E-MapReduce

E-MapReduce

复制全文
下载 pdf
生态与集成
EMR Serveless Spark 与 Lance 集成
复制全文
下载 pdf
EMR Serveless Spark 与 Lance 集成

当前 Lance 已实现对 Spark 和 Ray 两大计算引擎的支持。其中,Ray 计算能力主要通过 pylance 模块进行功能封装与逻辑实现。为充分展示计算引擎与数据仓库的协同能力,以及 SQL 语言在复杂业务逻辑实现中的优势,本文将重点围绕 Spark 计算引擎,详细阐述其与 Hive 数仓表的集成流程及 SQL 应用场景。

前提条件

开通 EMR Serveless 队列

确认用户已开通 EMR Serveless 队列权限,详情请参见 队列权限。
Image

开通元数据权限

确认用户已开通相应 Catalog 的 操作权限,详细操作请参考:权限管理。

SparkSQL 操作指南

参数配置

操作 Lance 表需要依赖如下参数:

set spark.executorEnv.JAVA_HOME=/usr/local/jdk17u;
set spark.kubernetes.driverEnv.JAVA_HOME=/usr/local/jdk17u;
set spark.driver.extraJavaOptions=-Xss4m -XX:+ExitOnOutOfMemoryError -XX:+UseG1GC -XX:+ParallelRefProcEnabled -Dscala.concurrent.context.numThreads=x5 -Dscala.concurrent.context.maxThreads=x100 -XX:+UnlockDiagnosticVMOptions -XX:GCLockerRetryAllocationCount=100 -XX:UseAVX=2 -XX:StartAggressiveSweepingAt=1 -Dio.netty.tryReflectionSetAccessible=true -Djdk.reflect.useDirectMethodHandle=false -Djdk.module.illegalAccess=permit;
set spark.executor.extraJavaOptions=-XX:+UseG1GC -XX:+UnlockDiagnosticVMOptions -Xss4m -XX:+ExitOnOutOfMemoryError -XX:GCLockerRetryAllocationCount=100 -XX:UseAVX=2 -XX:StartAggressiveSweepingAt=1 -Dio.netty.tryReflectionSetAccessible=true -Djdk.reflect.useDirectMethodHandle=false -Djdk.module.illegalAccess=permit;

set tqs.query.engine.type = sparkcli;
set spark.sql.storeAssignmentPolicy = ANSI;
set emr.serverless.spark.custom.parse.enabled = true;

set serverless.spark.lance.enabled=true;
set spark.sql.catalog.lance=org.lance.spark.LanceNamespaceSparkCatalog;
set spark.sql.extensions=org.lance.spark.extensions.LanceSparkSessionExtensions;
set spark.sql.catalog.lance.impl=las2;

参数说明:

参数

配置说明

emr.serverless.spark.custom.parse.enabled

固定值 true, 可以支持 Lance 的 Spark SQL 扩展

serverless.spark.lance.enabled

固定值 true , 表示开启 Lance 特性

spark.sql.catalog.lance

固定值 com.lancedb.lance.spark.LanceNamespaceSparkCatalog

spark.sql.extensions

必须加上 com.lancedb.lance.spark.extensions.LanceSparkSessionExtensions
如果同一个任务里同时访问 Lance 表和 Iceberg 表,可以配置为 org.lance.spark.extensions.LanceSparkSessionExtensions,org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions

spark.sql.catalog.lance.impl

固定值 las2 。表示表的元信息从 AI 数据湖元数据中心读取和保存。

创建表

说明

在 Serverless Spark 中 ,通过 lance.{catalog_name}.{db_name}.{table_name} 四段式来直接引用某张表。Catalog 和 Database 在 AI 数据湖的元数据中心里定义,详细操作参看:元数据管理。

假设在 hive 这个 catalog 下面有一个 lance_db 的数据库。
Image
在 EMR Serverless 控制台 **** > 队列 >作业提交 > SparkSQL 编辑器中,提交如下作业:

set tqs.query.engine.type = sparkcli;
set spark.sql.storeAssignmentPolicy = ANSI;
set emr.serverless.spark.custom.parse.enabled = true;

set serverless.spark.lance.enabled=true;
set spark.sql.catalog.lance=org.lance.spark.LanceNamespaceSparkCatalog;
set spark.sql.extensions=org.lance.spark.extensions.LanceSparkSessionExtensions;
set spark.sql.catalog.lance.impl=las2;

create table lance.hive.lance_db.my_table (id int) using lance;

该操作会在 lance_db 库下创建一张表 my_table。
Image

写入数据

在 EMR Serverless 控制台 **** > 队列 >作业提交 > SparkSQL 编辑器中,提交如下作业:

set tqs.query.engine.type = sparkcli;
set spark.sql.storeAssignmentPolicy = ANSI;
set emr.serverless.spark.custom.parse.enabled = true;

set serverless.spark.lance.enabled=true;
set spark.sql.catalog.lance=org.lance.spark.LanceNamespaceSparkCatalog;
set spark.sql.extensions=org.lance.spark.extensions.LanceSparkSessionExtensions;
set spark.sql.catalog.lance.impl=las2;

insert into lance.hive.lance_db.my_table values(1);

查询数据

在 EMR Serverless 控制台 **** > 队列 >作业提交 > SparkSQL 编辑器中,提交如下作业:

set tqs.query.engine.type = sparkcli;
set spark.sql.storeAssignmentPolicy = ANSI;
set emr.serverless.spark.custom.parse.enabled = true;

set serverless.spark.lance.enabled=true;
set spark.sql.catalog.lance=org.lance.spark.LanceNamespaceSparkCatalog;
set spark.sql.extensions=org.lance.spark.extensions.LanceSparkSessionExtensions;
set spark.sql.catalog.lance.impl=las2;

select * from lance.hive.lance_db.my_table;

Image

最近更新时间:2026.08.26 19:17:43
这个页面对您有帮助吗?
有用
有用
无用
无用