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 的 操作权限,详细操作请参考:权限管理

使用限制

  1. 单个 SQL 语句或者 Spark 任务访问的 lance 表,目前必须要处于同一个 las catalog 下。
  2. Lance Catalog 中的表可与 Hive Catalog 中的 Hive 表执行 join 操作。但需注意的是,当前该功能暂不支持跨多个 Lance Catalog 进行关联操作。
  3. 单个任务需要访问的Lance表必须且只能存放在一个固定的TOS桶中。
  4. 当前仅支持使用PySpark和自定义作业访问。
  5. 下面文档里面的镜像仅支持北京地区,其它地区请联系火山引擎技术同学提供自定义镜像。
  6. 暂不支持对 Spark 计算组的访问操作,其中通过 Kyubbi 组件的访问方式亦在不支持范围内。
  7. 暂不支持 alter table add/drop column。

SparkSQL 操作指南

参数配置

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

--{}部分需要用户根据实际情况填写。

-- 固定值
set tqs.query.engine.type = sparkcli;
set spark.sql.storeAssignmentPolicy = ANSI;

-- las catalog 配置
set spark.hadoop.hive.hms.client.is.public.cloud=true;
set spark.hadoop.hive.metastore.execute.setugi=false;
set spark.hadoop.hive.client.las.region.name=cn-beijing;
set spark.hadoop.hive.client.las.ak={your ak};
set spark.hadoop.hive.client.las.sk={your sk};
set spark.hadoop.hive.metastore.uris=thrift://lakeformation.las.cn-beijing.ivolces.com:48869;
set spark.hadoop.metastore.catalog.default={las_catalog_name};

-- lance 配置
set serverless.spark.lance.enabled=true;
set emr.serverless.spark.custom.parse.enabled = true;
set spark.sql.catalog.lance=com.lancedb.lance.spark.LanceNamespaceSparkCatalog;
set spark.sql.extensions=com.lancedb.lance.spark.extensions.LanceSparkSessionExtensions;
set spark.sql.catalog.lance.impl=las2;
set spark.sql.catalog.lance.storage.virtual_hosted_style_request=true;
set spark.sql.catalog.lance.storage.enable_virtual_host_style=true;
set spark.sql.catalog.lance.storage.transform_tos_to_s3=true;
set spark.sql.catalog.lance.storage.aws_region=cn-beijing;
set spark.sql.catalog.lance.storage.aws_endpoint=https://{bucket}.tos-s3-cn-beijing.ivolces.com;
set spark.sql.catalog.lance.storage.access_key_id={your ak};
set spark.sql.catalog.lance.storage.secret_access_key={your sk};

参数说明:

spark.hadoop.hive.client.las.region.name

您当前服务所在的 region

spark.hadoop.hive.client.las.ak

可以访问 LAS AI 数据湖的 AK

spark.hadoop.hive.client.las.sk

可以访问 LAS AI 数据湖的 SK

spark.hadoop.hive.metastore.uris

LAS AI 数据湖的服务地址

spark.hadoop.metastore.catalog.default

作业中默认访问的 LAS Catalog

serverless.spark.lance.enabled

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

emr.serverless.spark.custom.parse.enabled

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

spark.sql.catalog.lance

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

spark.sql.extensions

固定值 com.lancedb.lance.spark.extensions.LanceSparkSessionExtensions

spark.sql.catalog.lance.impl

固定值 las2

spark.sql.catalog.lance.storage.virtual_hosted_style_request

固定值 true

spark.sql.catalog.lance.storage.enable_virtual_host_style

固定值 true

spark.sql.catalog.lance.storage.transform_tos_to_s3

固定值 true

spark.sql.catalog.lance.storage.aws_region

您的 TOS Bucket 所在 Region 。
目前,Lance 使用 S3 协议访问 TOS,因此,这里使用 aws_region 参数。

spark.sql.catalog.lance.storage.aws_endpoint

您的 TOS Bucket S3 协议的服务地址。

spark.sql.catalog.lance.storage.access_key_id

您的 TOS AK

spark.sql.catalog.lance.storage.secret_access_key

您的 TOS SK

创建表

说明

在 Serverless Spark 中 ,使用时可以通过lance.{db_name}.{tbl_name}这样的三段式来直接引用。参数如下:

  • db_name:Lance 表存储 DataBase 名称。
  • tbl_name:Lance 表存储 Table 名称。

假设在 hive 这个 catalog 下面有一个 lance_db 的数据库

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

-- 配置必要参数

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

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

Image

写入数据

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

-- 配置必要参数

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

查询数据

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

-- 配置必要参数

select * from lance.lance_db.my_table;

Image

其它地区配置模板

如果您的配置在华东地区,可以使用下面的配置模板,把 cn-beijing 替换为 cn-shanghai 即可。例如 SQL 模板更改如下。

--{}部分需要用户根据实际情况填写。

-- 固定值
set tqs.query.engine.type = sparkcli;
set spark.sql.storeAssignmentPolicy = ANSI;

-- las catalog 配置
set spark.hadoop.hive.hms.client.is.public.cloud=true;
set spark.hadoop.hive.metastore.execute.setugi=false;
set spark.hadoop.hive.client.las.region.name=cn-shanghai;
set spark.hadoop.hive.client.las.ak={your ak};
set spark.hadoop.hive.client.las.sk={your sk};
set spark.hadoop.hive.metastore.uris=thrift://lakeformation.las.cn-shanghai.ivolces.com:48869;
set spark.hadoop.metastore.catalog.default={las_catalog_name};

-- lance 配置
set serverless.spark.lance.enabled=true;
set emr.serverless.spark.custom.parse.enabled = true;
set spark.sql.catalog.lance=com.lancedb.lance.spark.LanceNamespaceSparkCatalog;
set spark.sql.extensions=com.lancedb.lance.spark.extensions.LanceSparkSessionExtensions;
set spark.sql.catalog.lance.impl=las2;
set spark.sql.catalog.lance.storage.virtual_hosted_style_request=true;
set spark.sql.catalog.lance.storage.enable_virtual_host_style=true;
set spark.sql.catalog.lance.storage.transform_tos_to_s3=true;
set spark.sql.catalog.lance.storage.aws_region=cn-shanghai;
set spark.sql.catalog.lance.storage.aws_endpoint=https://{bucket}.tos-s3-cn-shanghai.ivolces.com;
set spark.sql.catalog.lance.storage.access_key_id={your ak};
set spark.sql.catalog.lance.storage.secret_access_key={your sk};
最近更新时间:2026.04.20 17:39:52
这个页面对您有帮助吗?
有用
有用
无用
无用