
# 使用DLI提交Flink Jar作业
#### 操作场景
Flink Jar作业适用于需要自定义流处理逻辑、复杂的状态管理或特定库集成的数据分析场景。需要用户自行编写并构建Jar作业程序包，在提交Flink Jar作业前，将Jar作业程序包上传至OBS，并将程序包与数据和作业参数一起提交以运行作业。
本例介绍通过DLI控制台提交Flink Jar作业程序包的基本流程。由于不同的业务需求，Jar包的具体编写会有所差异。建议您参考DLI提供的示例代码，并根据实际业务场景进行相应的编辑和定制。获取[DLI样例代码](https://uquery-sdk.obs-website.cn-north-1.myhuaweicloud.com/dli-example-code_1.0.0.zip)。
#### 操作流程
使用DLI提交Flink Jar作业的操作流程请参考[表1]。
开始进行如下操作前，请务必参考[准备工作]完成必要操作。
 表1使用DLI提交Flink Jar作业的操作流程 
| 操作步骤                                                                                         | 说明                       |
|:---|:---|
| [步骤1：开发Jar包并上传数据至OBS]         | 准备Flink Jar作业程序包并上传至OBS。 |
| [步骤2：购买弹性资源池并添加队列]        | 创建提交Flink作业所需的计算资源。      |
| [步骤3：使用DEW管理访问凭据]           | 跨源分析场景中，使用DEW管理数据源的访问凭证。 |
| [步骤4：创建自定义委托允许DLI访问DEW读取凭证] | 创建允许DLI访问DEW的委托。         |
| [步骤5：创建Flink Jar作业并配置作业信息]   | 创建Flink Jar作业分析数据。       |
   
 #### 准备工作
- **已注册华为账号并开通华为云，且在使用DLI前检查账号状态，账号不能处于欠费或冻结状态。**
- **配置DLI委托访问授权。**
  DLI使用过程中涉及到OBS、VPC、SMN等服务交互，首次使用DLI需要用户配置委托授权，允许访问这些依赖服务。
  1. 使用华为云账号登录DLI管理控制台，在左侧导航栏单击"全局配置 \> 服务授权"。
  
  2. 在委托设置页面，勾选基础使用、跨源场景、运维场景的委托权限后，单击"更新委托权限"。
  
  3. 查看并了解更新委托的提示信息，单击"确定"。完成DLI委托权限的更新。
     图1配置DLI委托访问授权   
     ![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000001964093394.png "点击放大") 
  
  4. 完成配置后，在IAM控制台的委托列表中，可查看到dli_management_agency的委托信息。
    
- **配置DLI作业桶** **。**
  请务必在使用DLI提交作业前配置DLI作业桶，该桶用于存储DLI作业运行过程中产生的临时数据，例如：作业日志、作业结果。
  参考[配置DLI作业桶](https://support.huaweicloud.com/usermanual-dli/dli_01_0536.html)在DLI管理控制台的"全局配置 \> 工程配置"页面配置DLI作业桶。
  
 
 #### 步骤1：开发Jar包并上传数据至OBS
DLI控制台不提供Jar包的开发能力，您需要在线下完成Jar包的开发。Jar包的开发样例请参考Flink Jar开发基础样例。
参考[Flink作业样例代码](https://uquery-sdk.obs-website.cn-north-1.myhuaweicloud.com/dli-example-code_1.0.0.zip)开发Flink Jar作业程序，编译并打包为"flink-examples.jar"。参考以下操作步骤上传该作业程序。
提交Flink作业之前，需要在OBS中上传数据文件。
1. 登录管理控制台
2. 在服务列表中，单击"存储"中的"对象存储服务OBS"，进入OBS管理控制台页面。
3. 创建桶，这里以桶名"dli-test-obs01"为例。
   1. 单击"创建桶"。
   
   2. 进入"创建桶"页面，选择"区域"，输入"桶名称"。其他参数保持默认值或根据需要选择。
      ![](https://support.huaweicloud.com/qs-dli/public_sys-resources/note_3.0-zh-cn.png)
      创建OBS桶时，需要选择与DLI管理控制台相同的区域，不可跨区域执行操作。
      
   
   3. 单击"立即创建"。
    
4. 单击所建桶"dli-test-obs01"，进入"对象"页面。
5. 选择左侧列表中的"对象"，选择"上传对象"，将需要上传的文件，例如"flink-examples.jar"上传到指定目录，单击"确定"。 本例文件上传成功后，路径为"obs://dli-test-obs01/flink-examples.jar"。
   关于OBS管理控制台更多操作请参考《[对象存储服务用户指南](https://support.huaweicloud.com/usermanual-obs/obs_41_0003.html)》。
   
 
 #### 步骤2：购买弹性资源池并添加队列
执行跨源场景的Flink作业，不能使用系统已有的default队列，需要您创建通用队列，本例创建弹性资源池"dli_resource_pool"、队列"dli_queue_01"。
1. 登录DLI管理控制台。
2. 在左侧导航栏单击"资源管理 \> 弹性资源池"，可进入弹性资源池管理页面。
3. 在弹性资源池管理界面，单击界面右上角的"购买弹性资源池"。
4. 在"购买弹性资源池"界面，填写具体的弹性资源池参数。
   本例在华东-上海二区域购买按需计费的弹性资源池。相关参数说明如[表2]所示。
    表2参数说明 
   | 参数名称 | 参数说明                                                             | 配置样例              |
   |:---|:---|:---|
   | 计费模式 | 选择弹性资源池计费模式。                                                     | 按需计费              |
   | 区域   | 选择弹性资源池所在区域。                                                     | 华东-上海二            |
   | 项目   | 每个区域默认对应一个项目，由系统预置。                                              | 系统默认项目            |
   | 名称   | 弹性资源池名称。                                                         | dli_resource_pool |
   | 规格   | 选择弹性资源池规格。                                                       | 标准版               |
   | CU范围 | 弹性资源池最大最小CU范围。                                                   | 64-64             |
   | 网段   | 规划弹性资源池所属的网段。如需使用DLI增强型跨源，弹性资源池网段与数据源网段不能重合。**弹性资源池网段设置后不支持更改**。 | 172.16.0.0/19     |
   | 企业项目 | 选择对应的企业项目。                                                       | default           |
      
   
5. 参数填写完成后，单击"立即购买"，在界面上确认当前配置是否正确。
6. 单击"提交"完成弹性资源池的创建。
7. 在弹性资源池的列表页，选择要操作的弹性资源池，单击操作列的"添加队列"。
8. 配置队列的基础配置，具体参数信息如下。
   表3弹性资源池添加队列基础配置 
   | 参数名称 | 参数说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            | 配置样例         |
   |:---|:---|:---|
   | 名称   | 弹性资源池添加的队列名称。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   | dli_queue_01 |
   | 类型   | 选择创建的队列类型。 - 执行SQL作业请选择SQL队列。  - 执行Flink或Spark作业请选择通用队列。   | 通用队列         |
   | 企业项目 | 选择对应的企业项目。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      | default      |
      
   
9. 单击"下一步"，配置队列的扩缩容策略。 单击"新增"，可以添加不同优先级、时间段、"最小CU"和"最大CU"扩缩容策略。
   本例配置的扩缩容策略如[图2]所示。
   图2添加队列时配置扩缩容策略   
   ![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000002336300304.png "点击放大")
   表4扩缩容策略参数说明 
   | 参数名称 | 参数说明                                                                                                                           | 配置样例  |
   |:---|:---|:---|
   | 优先级  | 当前弹性资源池中的优先级数字越大表示优先级越高。本例设置一条扩缩容策略，默认优先级为1。                                                                                   | 1     |
   | 时间段  | 首条扩缩容策略是默认策略，不能删除和修改时间段配置。 即设置00-24点的扩缩容策略。 | 00-24 |
   | 最小CU | 设置扩缩容策略支持的最小CU数。                                                                                                               | 16    |
   | 最大CU | 当前扩缩容策略支持的最大CU数。                                                                                                               | 64    |
      
   
10. 单击"确定"完成添加队列配置。
 
 #### 步骤3：使用DEW管理访问凭据
跨源分析场景中，需要在connector中设置账号、密码等属性。但是账号密码等信息属于高度敏感数据，需要做加密处理，以保障用户的数据隐私安全。
密码安全中心（Data Encryption Workshop，DEW）提供了安全、可靠、简单易用隐私数据加解密方案。
本例介绍在DEW创建通用凭证的操作步骤。了解更多请参考[创建通用凭据](https://support.huaweicloud.com/usermanual-dew/dew_01_9993.html)。
1. 登录DEW管理控制台
2. 选择"凭据管理"，进入"凭据管理"页面。
3. 单击"创建凭据"，配置凭据基本信息。
   - 本例中第一行key对应的value为用户的AK（Access Key Id）
   
   - 本例中第二行key对应的value为用户的SK（Secret Access Key）
     图3在DEW中配置访问凭据   
     ![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000001956063764.png) 
    
4. 后续在DLI Flink jar作业编辑界面设置访问凭据的参数示例。
   ```
   flink.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.access.key=USER_AK_CSMS_KEY_obstest1
   flink.hadoop.fs.obs.bucket.USER_BUCKET_NAME.dew.secret.key=USER_SK_CSMS_KEY_obstest1
   flink.hadoop.fs.obs.security.provider=com.dli.provider.UserObsBasicCredentialProvider
   flink.hadoop.fs.dew.csms.secretName=obsAksK
   flink.hadoop.fs.dew.endpoint=kmsendpoint
   flink.hadoop.fs.dew.csms.version=v6
   flink.hadoop.fs.dew.csms.cache.time.second=3600
   flink.dli.job.agency.name=agencyname
   ```
   更多Flink jar 使用DEW获取访问凭证读写OBS示例请参考[Flink Jar 使用DEW获取访问凭证读写OBS](https://support.huaweicloud.com/devg-dli/dli_09_0215.html)
   
 
 #### 步骤4：创建自定义委托允许DLI访问DEW读取凭证
1. 登录管理控制台。
2. 单击右上方登录的用户名，在下拉列表中选择"统一身份认证"。
3. 在左侧导航栏中，单击"委托"。
4. 在"委托"页面，单击"创建委托"。
5. 在"创建委托"页面，设置如下参数：
   - 委托名称：按需填写，例如"dli_dew_agency_access"。
   
   - 委托类型：选择"云服务"。
   
   - 云服务：（"委托类型"选择"云服务"时出现此参数项。）在下拉列表中选择"DLI"。
   
   - 持续时间：选择"永久"。
   
   - 描述：非必选，可以填写"拥有OBS OperateAccess权限的委托"。
    
6. 配置完委托的基本信息后，单击"下一步"。
7. 授予当前委托所需的权限策略，单击"新建策略"。
8. 配置策略信息。
   1. 输入策略名称，本例：dli-dew-agency。
   
   2. 选择"JSON视图"。
   
   3. 在策略内容中粘贴自定义策略。
      ```
      {
          "Version": "1.1",
          "Statement": [
              {
                  "Effect": "Allow",
                  "Action": [
                      "csms:secretVersion:get",
                      "csms:secretVersion:list",
                      "kms:dek:decrypt"
                  ]
              }
          ]
      }
      ```
      
   
   4. 按需输入策略描述。
    
9. 新建策略完成后，单击"下一步"，返回委托授权页面。
10. 选择步骤[8]新建的自定义策略。
11. 单击"下一步"，选择委托的授权范围。本例选择"所有资源"。 了解更多授权操作说明请参考[创建用户组并授权](https://support.huaweicloud.com/usermanual-iam/iam_03_0001.html)。
    
12. 单击"确定"，完成授权。 授权后需等待15-30分钟才可生效。
    
 
 #### 步骤5：创建Flink Jar作业并配置作业信息
1. **创建Flink Jar作业。**
   
   1. 在DLI管理控制台的左侧导航栏中，单击"作业管理 \> Flink作业"，进入Flink作业列表页面。
   
   2. 单击"创建作业"，弹出"创建作业"对话框。
      本例选择Flink Jar作业类型，作业名称为Flink_Jar_for_test。
      图4新建Flink Jar作业   
      ![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000001992783073.png "点击放大") 
   
   3. 单击"确定"进入作业配置页面。
   
   
   
   
2. **配置作业的基本信息。**
   
   参考[表5]配置作业的基本信息。
    表5参数说明 
   | 名称      | 是否必选 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   |:---|:---|:---|
   | 所属队列    | 是    | 选择作业运行时使用的队列资源。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 应用程序    | 是    | 选择[步骤1：开发Jar包并上传数据至OBS]中自定义的程序包。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 主类      | 是    | 指定加载的Jar包类名。 "主类"参数用于指定Flink作业的入口，即包含main方法的类。这是Flink作业启动时首先执行的类。 当应用程序类型为.jar时，必须提供主类名称。 主类名称区分大小写，必须准确无误。 - 默认：根据Jar包文件的Manifest文件指定。  - 指定：必须输入"类名"并确定类参数列表（参数间用空格分隔）。   说明： 当类属于某个包时，需携带包路径，例如：packagePath.KafkaMessageStreaming |
   | Flink版本 | 是    | 选择作业运行时所使用的Flink的版本。 本例选择使用Flink1.15版本时请在作业中配置允许DLI访问的云服务的委托信息。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | 委托      | 否    | 选择Flink1.15版本时需要用户自行配置委托，否则可能影响作业运行。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
      
   
   
3. **Flink Jar作业的高级配置。**
   
   参考[表6]配置Flink Jar作业。
    表6Flink Jar作业的高级配置 
   | 名称            | 是否必选 | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
   |:---|:---|:---|
   | CU数量          | 是    | 一个CU为1核4G的资源量。CU数量范围为2\~400个。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | 管理单元          | 是    | 设置管理单元的CU数，支持设置1\~4个CU，默认值为1个CU。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | 并行数           | 是    | 作业中每个算子的最大并行数。 说明： - 并行数不能大于计算单元（CU数量-管理单元CU数量）的4倍。  - 并行数需要大于用户作业里设置的并发数，否则有可能提交失败。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | TaskManager配置 | 否    | 用于设置TaskManager资源参数。 勾选后需配置下列参数： - "单TM所占CU数"：每个TaskManager占用的资源数量。  - "单TM Slot"：每个TaskManager包含的Slot数量。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | 保存作业日志        | 否    | 设置是否将作业运行时的日志信息保存到OBS。 勾选后需配置下列参数： "OBS桶"：选择OBS桶用于保存用户作业日志信息。如果选择的OBS桶是未授权状态，需要单击"OBS授权"。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | 作业异常告警        | 否    | 设置是否将作业异常告警信息，如作业出现运行异常或者欠费情况，以SMN的方式通知用户。 勾选后需配置下列参数： "SMN主题"： 选择一个自定义的SMN主题。如何自定义SMN主题，请参见[《消息通知服务用户指南》](https://support.huaweicloud.com/usermanual-smn/zh-cn_topic_0043961401.html)中"创建主题"章节。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | 异常自动重启        | 否    | 设置是否启动异常自动重启功能，当作业异常时将自动重启并恢复作业。 勾选后需配置下列参数： - "异常重试最大次数"：配置异常重试最大次数。单位为"次/小时"。 - 无限：无限次重试。  - 有限：自定义重试次数。    - "从Checkpoint恢复"：从最新保存的checkpoint恢复作业。 勾选该参数后，还需要选择"Checkpoint路径"。 "Checkpoint路径"：选择checkpoint保存路径。必须和应用程序中配置的Checkpoint地址相对应。且不同作业的路径不可一致，否则无法获取准确的Checkpoint。    |
      
   
   
4. 单击右上角"保存"，保存作业和相关参数。
5. 单击右上角"启动"，进入"启动Flink作业"页面。
6. 在"启动Flink作业"页面确认作业规格和费用，单击"立即启动"，启动作业。 
   启动作业后，系统将自动跳转到Flink作业管理页面，在"状态"列中可以查看作业状态。
   作业提交成功后，状态将由"提交中"变为"运行中"。运行完成后显示"已完成"。
   如果作业状态为"提交失败"或"运行异常"，表示作业提交或运行失败。用户可以在作业列表中的"状态"列中，将鼠标移动到状态图标上查看错误信息，单击![](https://support.huaweicloud.com/qs-dli/zh-cn_image_0000001956063772.png)可以复制错误信息。根据错误信息解决故障后，重新提交。
   
   
 
