
# 配置Flink通过Guardian访问OBS
参考[配置Guardian服务不启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300579.html)或[配置Guardian服务启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300419.html)完成Guardian对接OBS后，即可在Flink任务中访问OBS并行文件系统并运行作业，本章节以通过提交一个Flink WordCount作业为例进行介绍。
#### 前提条件
- 由于Flink作业是On Yarn运行，在配置Flink对接OBS文件系统之前需要确保Yarn对接OBS文件系统功能是正常的。
- OBS并行文件系统名称/文件名称：OBS文件路径需写至目录层级。
- 如果参考[配置Guardian服务启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300419.html)完成Guardian对接OBS，还需参考[Ranger权限配置]在Ranger中为组件操作用户赋予OBS路径的"Read"和"Write"权限。
 
#### Flink对接OBS
1. 使用安装客户端的用户登录Flink客户端安装节点。 
   下载并安装集群客户端的具体操作，请参考[安装MRS集群客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0089.html)。
   
   
2. 执行如下命令初始化环境变量。 
   ```
   source 客户端安装目录/bigdata_env
   ```
   
   
3. 配置好Flink客户端，具体配置参考[从零开始使用Flink](https://support.huaweicloud.com/cmpntguide-mrs/mrs_01_0473.html)的步骤1至步骤5。
4. 如果是安全集群且为Guardian方式访问OBS的场景，Flink客户端需要在flink-conf.yaml文件中添加配置。 
   执行以下命令，编辑flink-conf.yaml文件
   ```
   vim 客户端安装目录/Flink/flink/conf/flink-conf.yaml
   ```
   在flink-conf.yaml文件添加如下配置：
   ```
   security.kerberos.access.hadoopFileSystems: hdfs://xxx;obs://xxx
   ```
   例如：
   ```
   security.kerberos.access.hadoopFileSystems: hdfs://hacluster;obs://guardian-obs
   ```
   
   
5. MRS 3.6.0-LTS之前版本，启动session。 
   - 普通集群（未开启Kerberos认证）
     ```
     yarn-session.sh -nm "session-name" -d
     ```
     
   
   - 安全集群（开启Kerberos认证）
     - "flink.keystore"和"flink.truststore"文件路径为相对路径时： 在"ssl"的同级目录下执行如下命令启动session，其中"ssl/"是相对路径。
       切换到"conf"目录：
       ```
       cd 客户端安装目录/Flink/flink/conf/
       ```
       启动session：
       ```
       yarn-session.sh -t ssl/ -nm "session-name" -d
       ```
       session启动成功：
       ```
       ...
       Cluster started: Yarn cluster with application id application_1624937999496_0017
       JobManager Web Interface: http://192.168.1.150:32261
       ```
       
     
     - "flink.keystore"和"flink.truststore"文件路径为绝对路径时，执行如下命令启动session： 切换到"conf"目录：
       ```
       cd 客户端安装目录/Flink/flink/conf/
       ```
       启动session：
       ```
       yarn-session.sh -nm "session-name" -d
       ```
       
      
   
   
   
   
6. 如果集群启用了Kerberos认证，使用以下命令进行用户认证，如果当前集群未启用Kerberos认证，则无需执行此命令。 
   ```
   kinit 用户名
   ```
   
   
7. 在Flink命令行显式添加要访问的OBS文件系统，并执行分析程序。 
   1. 在"/tmp/test"目录下创建"test"文件：
      ```
      echo -e 'test' >/tmp/test
      ```
      
   
   2. 在OBS并行文件系统中创建存放"test"文件的目录：
      ```
      hdfs dfs -mkdir -p obs://并行文件系统名称/tmp/flinkjob
      ```
      
   
   3. 将"test"文件上传至OBS并行文件系统中：
      ```
      hdfs dfs -put /tmp/test/ obs://并行文件系统名称/tmp/flinkjob/
      ```
      
   
   4. 执行以下命令运行"WordCount.jar"：
      MRS 3.6.0-LTS之前版本：
      ```
      flink run 客户端安装目录/Flink/flink/examples/batch/WordCount.jar -input obs://并行文件系统名称/tmp/flinkjob/test -output obs://并行文件系统名称/tmp/flinkjob/output
      ```
      MRS 3.6.0-LTS及之后版本：
      - 集群已启用Kerberos认证（安全模式）：
        ```
        flink run-application -t yarn-application -Dyarn.ship-files="ssl/" 客户端安装目录/Flink/flink/examples/batch/WordCount.jar -input obs://并行文件系统名称/tmp/flinkjob/test -output obs://并行文件系统名称/tmp/flinkjob/output
        ```
        
      
      - 集群未启用Kerberos认证（普通模式）**：**
        ```
        flink run-application -t yarn-application 客户端安装目录/Flink/flink/examples/batch/WordCount.jar -input obs://并行文件系统名称/tmp/flinkjob/test -output obs://并行文件系统名称/tmp/flinkjob/output
        ```
        
       
   
   
   
   
8. 登录[OBS管理控制台](https://console.huaweicloud.com/obs/)。
9. 在[7.d]配置的输出路径下即可查看"WordCount.jar"运行结果。
 
 #### Ranger权限配置
1. 登录MRS集群Manager界面。 
   登录集群Manager界面请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"系统 \> 权限 \> 用户组 \> 添加用户组"。
3. 创建一个空角色的用户组，例如，名称为"obs_flink"，并将该用户组绑定给对应用户。
4. 使用**rangeradmin**用户登录Ranger管理页面。
5. 在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"。
6. 单击"Add New Policy"，为[3]新建的用户组添加相应OBS路径的"Read"和"Write"权限，OBS目录若不存在则需要提前创建，且不允许带通配符**\*** 。
   
   图1为Flink用户组新增OBS路径读和写的权限   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001925620853.png "点击放大")
   对接OBS后，如需通过Ranger配置组件关于OBS相关路径的权限策略，需确保OBS服务已开启AccessLabel功能，若未开启，需手动开启，详细操作请联系OBS服务运维人员。
   
   
