使用DLI提交Spark Jar作业
操作场景
DLI允许用户提交编译为Jar包的Spark作业,Jar包中包含了Jar作业执行所需的代码和依赖信息,用于在数据查询、数据分析、机器学习等特定的数据处理任务中使用。在提交Spark Jar作业前,将程序包上传至OBS,并将程序包与数据和作业参数一起提交以运行作业。
本例介绍通过DLI控制台提交Jar作业程序包的基本流程。由于不同的业务需求,Jar包的具体编写会有所差异。建议您参考DLI提供的示例代码,并根据实际业务场景进行相应的编辑和定制。获取DLI样例代码。
操作流程
使用DLI提交Spark Jar作业的操作流程如表1所示。
开始进行如下操作前,请务必参考准备工作完成必要操作。
步骤1:上传数据至OBS
参考Spark作业样例代码开发Spark Jar作业程序,编译并打包为“spark-examples.jar”。参考以下操作步骤上传该作业程序。
提交Spark作业之前,需要在OBS中上传数据文件。
- 登录管理控制台
- 在服务列表中,单击“存储”中的“对象存储服务OBS”,进入OBS管理控制台页面。
- 创建桶,这里以桶名“dli-test-obs01”为例。
- 单击“创建桶”。
- 进入“创建桶”页面,选择“区域”,输入“桶名称”。其他参数保持默认值或根据需要选择。
创建OBS桶时,需要选择与DLI管理控制台相同的区域,不可跨区域执行操作。
- 单击“立即创建”。
- 单击所建桶“dli-test-obs01”,进入“对象”页面。
- 选择左侧列表中的“对象”,选择“上传对象”,将需要上传的文件,例如“spark-examples.jar”上传到指定目录,单击“确定”。
本例文件上传成功后,文件路径为“obs://dli-test-obs01/spark-examples.jar”。
关于OBS管理控制台更多操作请参考《对象存储服务用户指南》。
步骤2:创建弹性资源池并添加队列
- 登录DLI管理控制台。
- 在左侧导航栏单击“资源管理 > 弹性资源池”,可进入弹性资源池管理页面。
- 在弹性资源池管理界面,单击界面右上角的“购买弹性资源池”。
- 在“购买弹性资源池”界面,填写具体的弹性资源池参数。
- 本例在华东-上海二区域购买按需计费的弹性资源池。相关参数说明如表2所示。
- 参数填写完成后,单击“立即购买”,在界面上确认当前配置是否正确。
- 单击“提交”完成弹性资源池的创建。
- 在弹性资源池的列表页,选择要操作的弹性资源池,单击操作列的“添加队列”。
- 配置队列的基础配置,具体参数信息如下。
表3 弹性资源池添加队列基础配置 参数名称
参数说明
配置样例
名称
弹性资源池添加的队列名称。
dli_queue_01
类型
选择创建的队列类型。
- 执行SQL作业请选择SQL队列。
- 执行Flink或Spark作业请选择通用队列。
_
执行引擎
SQL队列可以选择队列引擎为Spark或者Trino。
_
企业项目
选择对应的企业项目。
default
- 单击“下一步”,配置队列的扩缩容策略。
单击“新增”,可以添加不同优先级、时间段、“最小CU”和“最大CU”扩缩容策略。
本例配置的扩缩容策略如图2所示。表4 扩缩容策略参数说明 参数名称
参数说明
配置样例
优先级
当前弹性资源池中的优先级数字越大表示优先级越高。本例设置一条扩缩容策略,默认优先级为1。
1
时间段
首条扩缩容策略是默认策略,不能删除和修改时间段配置。
即设置00-24点的扩缩容策略。
00-24
最小CU
设置扩缩容策略支持的最小CU数。
16
最大CU
当前扩缩容策略支持的最大CU数。
64
- 单击“确定”完成添加队列配置。
步骤3:使用DEW管理访问凭证
Spark Jar作业的输出数据写入到OBS时,需要配置AKSK访问OBS,为了确保AKSK数据安全,您可以用过数据加密服务(Data Encryption Workshop,DEW)、云凭据管理服务(Cloud Secret Management Service,CSMS),对AKSK统一管理,有效避免程序硬编码或明文配置等问题导致的敏感信息泄露以及权限失控带来的业务风险。
- 登录DEW管理控制台
- 选择“凭据管理”,进入“凭据管理”页面。
- 单击“创建凭据”。配置凭据基本信息。
- 本例中第一行key对应的value为用户的AK(Access Key Id)
- 本例中第二行key对应的value为用户的SK(Secret Access Key)
图3 在DEW中配置访问凭据
- 后续在DLI Spark jar作业编辑界面设置访问凭据的参数示例。
spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.access.key= USER_AK_CSMS_KEY_obstest1 spark.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.secret.key= USER_SK_CSMS_KEY_obstest1 spark.hadoop.fs.obs.security.provider=com.dli.provider.UserObsBasicCredentialProvider spark.hadoop.fs.dew.csms.secretName=obsAkSkspark.hadoop.fs.dew.endpoint=kmsendpoint spark.hadoop.fs.dew.csms.version=v3spark.dli.job.agency.name=agencyname
步骤4:创建自定义委托允许DLI访问DEW读取凭证
- 登录管理控制台。
- 单击右上方登录的用户名,在下拉列表中选择“统一身份认证”。
- 在左侧导航栏中,单击“委托”。
- 在“委托”页面,单击“创建委托”。
- 在“创建委托”页面,设置如下参数:
- 委托名称:按需填写,例如“dli_dew_agency_access”。
- 委托类型:选择“云服务”。
- 云服务:(“委托类型”选择“云服务”时出现此参数项。)在下拉列表中选择“DLI"。
- 持续时间:选择“永久”。
- 描述:非必选,可以填写“拥有OBS OperateAccess权限的委托”。
- 配置完委托的基本信息后,单击“下一步”。
- 授予当前委托所需的权限策略,单击“新建策略”。
- 配置策略信息。
- 输入策略名称,本例:dli-dew-agency。
- 选择“JSON视图”。
- 在策略内容中粘贴自定义策略。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "csms:secretVersion:get", "csms:secretVersion:list", "kms:dek:decrypt" ] } ] }
- 按需输入策略描述。
- 新建策略完成后,单击“下一步”,返回委托授权页面。
- 选择步骤8新建的自定义策略。
- 单击“下一步”,选择委托的授权范围。本例选择“所有资源”。
了解更多授权操作说明请参考创建用户组并授权。
- 单击“确定”,完成授权。
步骤5:提交Spark作业
- 在DLI管理控制台,单击左侧导航栏中的“作业管理 > Spark作业”,单击“创建作业”,进入创建Spark作业页面。
- 在Spark作业编辑页面配置作业参数信息:
- 队列:选择步骤2:创建弹性资源池并添加队列中创建的队列。
- Spark版本:选择Spark引擎版本。本例选择3.3.1版本。
- 应用程序:选择步骤1:上传数据至OBS创建的程序包。
- 委托:请选择步骤4:创建自定义委托允许DLI访问DEW读取凭证创建的委托,用于访问DEW中存储的凭证。
其他参数请参考创建Spark作业中关于Spark作业编辑页面的说明。
- 单击Spark作业编辑页面右上方“执行”,阅读并同意隐私协议,单击“确定”。提交作业,页面显示“作业提交成功”。
- (可选)可到“作业管理”>“Spark作业”页面查看提交作业的状态及日志。
在DLI管理控制台第一次单击“执行”操作时,需要阅读隐私协议,同意确定后,后续操作将不会再提示。