
# 配置Yarn通过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后，即可在集群客户端执行Yarn任务访问OBS。
#### 前提条件
如果参考[配置Guardian服务启用Ranger OBS路径鉴权](https://support.huaweicloud.com/usermanual-mrs/mrs_01_300419.html)完成Guardian对接OBS，还需参考[Ranger权限配置]在Ranger中为组件操作用户赋予OBS路径的"Read"和"Write"权限。
#### Yarn对接OBS
1. 以客户端安装用户登录安装了Yarn客户端的节点。
2. 执行以下命令，切换到客户端安装目录。 
   ```
   cd 客户端安装目录
   ```
   
   
3. 执行以下命令配置环境变量。 
   ```
   source bigdata_env
   ```
   
   
4. 如果集群开启了Kerberos认证，执行以下命令进行用户认证，该用户需具有OBS目录的读写权限。未开启Kerberos认证的集群无需执行用户认证。 
   ```
   kinit HDFS组件操作用户
   ```
   
   
5. 在Yarn命令行显式添加要访问的OBS文件系统。 
   - 使用以下命令访问OBS文件系统。
     ```
     hdfs dfs -ls obs://OBS并行文件系统名称/路径
     ```
     
   
   - 使用以下命令创建OBS文件系统下的目录：
     ```
     hdfs dfs -mkdir obs://OBS并行文件系统名称/hadoop1
     ```
     
   
   - 执行以下Yarn任务访问OBS：
     ```
     yarn jar 客户端安装目录/HDFS/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi -Dmapreduce.job.hdfs-servers=NAMESERVICE -fs obs://OBS并行文件系统名称 1 1
     ```
     其中"NAMESERVICE"为HDFS文件系统中的NameService，默认为"hdfs://hacluster"，如有多个NameService， 以"**,**"分隔。
     例如：
     ```
     yarn jar /opt/hadoopclient/HDFS/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar pi -Dmapreduce.job.hdfs-servers=hdfs://hacluster -fs obs://bucketname 1 1
     ```
     
   
   
   
   - 执行以下命令写入数据到OBS：
     ```
     yarn jar 客户端安装目录/HDFS/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar teragen 100  obs://OBS并行文件系统名称/hadoop1/teragen1
     ```
     
   
   - 执行以下命令将OBS下的数据复制到HDFS：
     ```
     hadoop distcp obs://OBS并行文件系统名称/hadoop1/teragen1 /tmp
     ```
     
   
   
   
   
 
#### 修改OBS客户端日志级别
OBS文件系统打印大量日志可能导致读写性能受影响，可通过调整OBS客户端日志级别优化，日志调整方式如下：
1. 切换至"hadoop"目录下：
   ```
   cd 客户端安装目录/HDFS/hadoop/etc/hadoop
   ```
   
2. 编辑"log4j.properties"文件：
   ```
   vi  log4j.properties
   ```
   在文件中添加以下OBS日志级别配置，并保存：
   ```
   log4j.logger.org.apache.hadoop.fs.obs=WARN
   log4j.logger.com.obs=WARN
   ```
   
3. 可执行以下命令查看：
   ```
   tail -4 log4j.properties
   ```
   查看到的结果如[图1](https://support.huaweicloud.com/usermanual-mrs/mrs_01_248996.html#mrs_01_248996__fig13385335251)所示，表示修改日志级别成功。
   图1添加OBS日志级别   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000002349446852.png) 
 
 #### Ranger权限配置
1. 登录MRS集群Manager界面，选择"系统 \> 权限 \> 用户组 \> 添加用户组"，创建一个空角色的用户组，例如"obs_hadoop1"。
   
   登录集群Manager界面请参考[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)。
   
   
2. 选择"系统 \> 权限 \> 用户 \> 添加用户"，创建一个只关联用户组"obs_hadoop1"，关联角色"default"的用户，例如"hadoopuser1"。
3. 使用**rangeradmin**用户登录Ranger管理页面。
4. 在首页中单击"EXTERNAL AUTHORIZATION"区域的组件插件名称"OBS"。
5. 单击"Add New Policy"，为[步骤 1]新建的用户组添加相应OBS路径的"Read"和"Write"权限。
   
   例如，为用户组"obs_hadoop1"添加"obs://OBS并行文件系统名称/hadoop1"的"Read"和"Write"权限：
   图2为新建用户组赋予OBS路径读和写的权限   
   ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001879581160.png "点击放大")
   对接OBS后，如需通过Ranger配置组件关于OBS相关路径的权限策略，需确保OBS服务已开启AccessLabel功能，若未开启，需手动开启，详细操作请联系OBS服务运维人员。
   
   
 
