最近更新时间:2023.05.22 19:34:10
首次发布时间:2021.12.10 19:32:08
为满足用户更加定制化的数据查询分析需求,LAS 提供了 Spark Jar 任务的查询方式。用户可以通过编写自己的 Spark 应用程序来进行定制化的数据分析工作,同时 LAS 会管控用户对数据集访问的权限与平台现有权限一致。
LAS Spark Jar 任务通过 Spark Tunnel,使用户在使用原生的 Spark SQL API 无感知的情况下(即无需改变现有代码),完成对用户操作和访问数据集权限的控制。
在 Spark 中使用 Tunnel 时,依赖社区 Spark 的 3.0.1 版本,Scope 为 provided。Tunnel 的操作对用户是透明的,用户使用普通的 API 即可通过 Tunnel 实现对表的读写操作。
Tunnel 的相关依赖在 Runtime 时由 Spark 的 Image 提供。
通过 spark conf 的方式传入 tunnel 相关配置。
参数 | 是否必填 | 默认值 | 说明 |
spark.sql.tunnel.enabled | 必填为 true | false | 是否启用 tunnel,需设置为 true 启用 tunnel |
spark.sql.tunnel.access.key.id | 是 | 使用 tunnel 的 ak | |
spark.sql.tunnel.secret.access.key | 是 | 使用 tunnel 的 sk | |
spark.sql.tunnel.endpoint | 是 | 连接 tunnel 的 endpoint | |
spark.sql.tunnel.service.region | 是 | tunnel 集群所在 region,线上隔离环境为 cn-beijing | |
spark.sql.tunnel.chunk.size | 否 | 100 * 1024 | 每个 chunk 的大小,单位 byte |
spark.sql.tunnel.cache.size | 否 | 100 | client 缓存的未发送 chunk 数量 |
spark.sql.tunnel.transfer.rpc.timeout | 否 | 180 | RPC 请求超时时间(s) |
spark.sql.extensions | 是 | 需配置为 org.apache.spark.sql.LASExtension |
Spark Tunnel 参数需要指定 Tunnel 的 AK/SK,可通过以下方式进行获取。
进入火山引擎首页后,点击右上角 个人头像 - 密钥管理,进入密钥管理页面:
在密钥管理页可以进行查看或添加 AK/SK,填入对应的参数配置中即可。
将 100.96.4.12:80 填入对应的参数配置中。
import org.apache.spark.sql.SparkSession; public class TunnelExmaple { public static void main(String[] args) { SparkSession spark = SparkSession.builder().enableHiveSupport().appName("TunnelExmaple").getOrCreate(); // db.tunnel_test schema: // id bigint, // msg string // partition cols: // date string spark.sql("insert into db.tunnel_test partition (date='1') select id, id as msg from range(10000)") spark.sql("select * from db.tunnel_test where date='1'").show() spark.stop(); } }
由于 LAS 统一使用 CU 作为计量单位,目前 Spark 资源相关参数已被禁用。如需调整内存,需要使用 las.job.driver.cu
和 las.job.executor.cu
(默认值均为 4)这两个参数来控制 core 和 memory,计算规则如下:
内部计算规则如下:
spark.driver.cores = lasJobDriverCU spark.driver.memory = lasJobDriverCU * 4g spark.executor.cores = lasJobExecutorCU spark.executor.memory = lasJobExecutorCU * 4g
目前 Spark Jar 任务支持 Java/Scala,暂不支持 Python。