You need to enable JavaScript to run this app.
导航

Spark Jar 作业开发

最近更新时间2023.05.22 19:34:10

首次发布时间2021.12.10 19:32:08

1. 概述

为满足用户更加定制化的数据查询分析需求,LAS 提供了 Spark Jar 任务的查询方式。用户可以通过编写自己的 Spark 应用程序来进行定制化的数据分析工作,同时 LAS 会管控用户对数据集访问的权限与平台现有权限一致。

2. Spark Tunnel 使用方式

LAS Spark Jar 任务通过 Spark Tunnel,使用户在使用原生的 Spark SQL API 无感知的情况下(即无需改变现有代码),完成对用户操作和访问数据集权限的控制。

2.1 依赖说明

在 Spark 中使用 Tunnel 时,依赖社区 Spark 的 3.0.1 版本,Scope 为 provided。Tunnel 的操作对用户是透明的,用户使用普通的 API 即可通过 Tunnel 实现对表的读写操作。

Tunnel 的相关依赖在 Runtime 时由 Spark 的 Image 提供。

2.2 参数说明

通过 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

2.3 AK/SK 获取

Spark Tunnel 参数需要指定 Tunnel 的 AK/SK,可通过以下方式进行获取。

进入火山引擎首页后,点击右上角 个人头像 - 密钥管理,进入密钥管理页面:

image.png

在密钥管理页可以进行查看或添加 AK/SK,填入对应的参数配置中即可。

image.png

2.4 Endpoint 获取

将 100.96.4.12:80 填入对应的参数配置中。

2.5 作业示例

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();
  }
}

3. 参数配置

由于 LAS 统一使用 CU 作为计量单位,目前 Spark 资源相关参数已被禁用。如需调整内存,需要使用 las.job.driver.culas.job.executor.cu(默认值均为 4)这两个参数来控制 core 和 memory,计算规则如下:

内部计算规则如下:

spark.driver.cores = lasJobDriverCU
spark.driver.memory = lasJobDriverCU * 4g
spark.executor.cores = lasJobExecutorCU
spark.executor.memory = lasJobExecutorCU * 4g
4. 相关限制

目前 Spark Jar 任务支持 Java/Scala,暂不支持 Python。