当前 Lance 已实现对 Spark 和 Ray 两大计算引擎的支持。其中,Ray 计算能力主要通过 pylance 模块进行功能封装与逻辑实现。为充分展示计算引擎与数据仓库的协同能力,以及 SQL 语言在复杂业务逻辑实现中的优势,本文将重点围绕 Spark 计算引擎,详细阐述其与 Hive 数仓表的集成流程及 SQL 应用场景。
确认用户已开通 EMR Serveless 队列权限。
确认用户已开通相应 Catalog 的 操作权限,详细操作请参考:权限管理。
操作 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 。 |
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}这样的三段式来直接引用。参数如下:
假设在 hive 这个 catalog 下面有一个 lance_db 的数据库
在 EMR Serverless 控制台 > 队列 >作业提交 > SparkSQL 编辑器中,提交如下作业:
-- 配置必要参数 create table lance.lance_db.my_table (id int);
该操作会在 lance_db 库下创建一张表 my_table
在 EMR Serverless 控制台 > 队列 >作业提交 > SparkSQL 编辑器中,提交如下作业:
-- 配置必要参数 insert into lance.lance_db.my_table values(1);
在 EMR Serverless 控制台 > 队列 >作业提交 > SparkSQL 编辑器中,提交如下作业:
-- 配置必要参数 select * from lance.lance_db.my_table;
如果您的配置在华东地区,可以使用下面的配置模板,把 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};