
# MRS集群客户端如何通过AK/SK信息对接OBS
MRS 1.9.2及之后的版本支持使用obs://的方式对接OBS服务，当前主要支持的组件为Hadoop、Hive、Spark、Presto、Flink。其中HBase组件使用obs://的方式对接OBS服务暂不支持。
该章节主要介绍MRS集群组件如何通过AK/SK（Access Key ID/Secret Access Key，即访问密钥ID/秘密访问密钥）信息对接OBS，AK/SK会明文暴露在配置文件中，请谨慎使用。
![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/notice_3.0-zh-cn.png)
- 为了提高数据写入性能，可以在Manager页面选择"集群 \> 服务 \> *需要修改的服务名称* \> 配置"，修改对应服务的配置参数"fs.obs.buffer.dir"的值为数据盘目录。
- 大数据存算分离场景，请务必使用OBS并行文件系统（[并行文件系统](https://support.huaweicloud.com/usermanual-obs/obs_13_0007.html)），使用普通对象桶会对集群性能产生较大影响。
- **在MRS 3.2.0-LTS.1及后续版本中，MRS集群内组件默认支持数据防误删策略，即组件用户删除的文件数据并不会直接被删除，而是会保存到OBS文件系统内的用户回收站目录中。**
  **同时由于OBS的[多段上传](https://support.huaweicloud.com/usermanual-obs/obs_41_0021.html)机制，写入数据到OBS的任务中断或失败时，会在OBS中产生OBS文件碎片**。
  为节省OBS使用空间，避免产生额外费用，需参考[配置MRS集群组件回收站目录和OBS碎片生命周期](https://support.huaweicloud.com/usermanual-mrs/mrs_01_249150.html)配置定时自动清理OBS回收站目录中的文件数据和OBS碎片。
  
- 配置文件中包含认证密码信息可能存在安全风险，建议当前场景执行完毕后删除相关配置文件或加强安全管理。
- 命令中如果携带认证密码信息可能存在安全风险，在执行命令前建议关闭系统的**history**命令记录功能，避免信息泄露。
 
 #### 获取AK/SK和Endpoint信息
使用AK/SK方式对接OBS前，需参考以下操作获取对接OBS的AK、SK和Endpoint信息。
- 获取AK/SK
  1. 登录[MRS管理控制台](https://console.huaweicloud.com/mrs/)。
  
  2. 在"控制台"页面，鼠标移动至右上方的用户名，在下拉列表中选择"我的凭证"。
  
  3. 单击"访问密钥"页签，您可以在访问密钥列表中查看访问密钥ID（AK），在下载的.csv文件中查看秘密访问密钥（SK）。 若没有可用的访问密钥，需单击"新增访问密钥"，输入验证码或密码。单击"确定"，生成并下载访问密钥。
     - 请及时下载保存，弹窗关闭后将无法再次获取该密钥信息，但您可重新创建新的密钥。
     
     - 为了账号安全性，建议您妥善保管并定期修改访问密钥，修改访问密钥的方法为删除旧访问密钥，然后重新生成。
      
   
- 获取EndPoint 终端节点（Endpoint）获取方式请参考[地区和终端节点](https://console.huaweicloud.com/apiexplorer/#/endpoint/MRS)。
  
 
 #### 配置Hadoop访问OBS
Hadoop支持在HDFS客户端安装目录中的"core-site.xml"文件中添加AK/SK和Endpoint信息对接OBS，也支持在执行Hadoop令时手动添加AK/SK和Endpoint信息对接OBS。
- 在HDFS客户端的"*客户端安装目录* /HDFS/hadoop/etc/hadoop"目录中修改"core-site.xml"文件，增加如下内容。MRS客户端安装详细操作请参见[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_24212.html)。
  ```
  <property>
      <name>fs.obs.access.key</name>
      <value>获取AK/SK和Endpoint信息准备的AK</value>
  </property>
  <property>
      <name>fs.obs.secret.key</name>
      <value>获取AK/SK和Endpoint信息准备的SK</value>
  </property>
  <property>
      <name>fs.obs.endpoint</name>
      <value>获取AK/SK和Endpoint信息准备的OBS Endpoint</value>
  </property>
  ```
  如果使用**distcp** 等需要提交作业到Yarn的命令，需要在MRS客户端的Yarn目录（*客户端安装目录*/Yarn/config）中同步修改"core-site.xml"文件，增加以上内容。
  ![](https://support.huaweicloud.com/usermanual-mrs/public_sys-resources/warning_3.0-zh-cn.png)
  在文件中设置AK/SK会明文暴露在配置文件中，请谨慎使用。
  添加配置后无需手动添加AK/SK、Endpoint就可以直接访问OBS上的数据。例如执行如下命令查看文件系统**obs-test** 下面的文件夹**test_obs_orc**的文件列表。
  **cd** *客户端安装目录*
  **source bigdata_env**
  **kinit** *组件操作用户*（集群未开启Kerberos认证请跳过该操作）
  hadoop fs -ls "obs://obs-test/test_obs_orc"
  
- 每次在命令行中手动添加AK/SK、Endpoint访问OBS上的数据。 **cd** *客户端安装目录*
  **source bigdata_env**
  **kinit** *组件操作用户*（集群未开启Kerberos认证请跳过该操作）
  **hadoop fs -Dfs.obs.endpoint=** *[获取AK/SK和Endpoint信息]准备的Endpoint* **-Dfs.obs.access.key=** *[获取AK/SK和Endpoint信息]准备的AK* **-Dfs.obs.secret.key=** *[获取AK/SK和Endpoint信息]准备的SK* **-ls "obs://** *obs-test/ test_obs_orc* **"**
  
 
 #### 配置Hive访问OBS
1. 登录服务配置页面。 
   - 针对MRS 3.x之前版本，登录集群详情页面，选择"组件管理 \> Hive \> 服务配置"。
   
   - 针对MRS 3.x及之后版本，登录MRS集群Manager界面，具体请参见[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)，选择"集群 \> 服务 \> Hive \> 配置"。
   
   
   
   
2. 将"基础配置"切换为"全部配置"。
3. 配置OBS的AK和SK。 
   - MRS 3.x之前版本，选择"Hive \> 自定义"，在自定义参数"core.site.customized.configs"中新增"fs.obs.access.key"和"fs.obs.secret.key"参数，值分别配置为[获取AK/SK和Endpoint信息]准备的AK和SK。
     图1配置OBS的AK/SK信息   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001879580684.png "点击放大") 
   
   - MRS 3.x及之后版本，选择"Hive（服务） \> 自定义"，在自定义参数"core.site.customized.configs"中新增"fs.obs.access.key"和"fs.obs.secret.key"参数，值分别配置为[获取AK/SK和Endpoint信息]准备的AK和SK。
     图2配置OBS的AK/SK   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001925499701.png "点击放大") 
   
   
   
   
4. 保存配置并重启Hive服务。
5. 在**beeline** 中直接使用OBS的目录进行访问。例如，执行如下命令创建Hive表并指定数据存储在test-bucket文件系统的test_obs目录中。
   
   **cd** *客户端安装目录*
   **source bigdata_env**
   **kinit** *组件操作用户*（集群未开启Kerberos认证请跳过该操作）
   **create table test_obs(a int, b string) row format delimited fields terminated by "," stored as textfile location "obs://** *test-bucket/test_obs* **";**
   
   
 
#### 配置Spark访问OBS
由于SparkSQL依赖Hive，所以在Spark上配置OBS时，需要同时修改[配置Hive访问OBS]的OBS配置。
MRS 3.3.0-LTS及之后的版本中，Spark2x服务改名为Spark，服务包含的角色名也有差异，例如JobHistory2x变更为JobHistory。相关涉及服务名称、角色名称的描述和操作请以实际版本为准。
- spark-beeline和spark-sql 可使用spark-beeline或spark-sql登录Spark客户端执行以下命令配置AK、SK信息访问OBS：
  **set fs.obs.access.key=** *[获取AK/SK和Endpoint信息]准备的* *AK;*
  **set fs.obs.secret.key=** **[获取AK/SK和Endpoint信息]准备的*SK*;
  **set fs.obs.endpoint=** **[获取AK/SK和Endpoint信息]准备的*Endpoint;*
  
- spark-beeline
  spark-beeline也可以通过在Manager中配置服务参数实现访问OBS。操作如下：
  1. 登录服务配置页面。
     - 针对MRS 3.x之前版本，登录集群详情页面，选择"组件管理 \> Spark \> 服务配置"。
     
     - 针对MRS 3.x及之后版本，登录MRS集群Manager界面，具体请参见[访问MRS集群Manager](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0128.html)，选择"集群 \> 服务 \> Spark2x \> 配置"。
      
  
  2. 将"基础配置"切换为"全部配置"。
  
  3. 选择"JDBCServer \> OBS"配置"fs.obs.access.key"、"fs.obs.secret.key参数"。 若当前集群中没有如上两个参数，请在左侧导航选择"JDBCServer \> 自定义"，在自定义参数"spark.core-site.customized.configs"中增加如上两个参数，参数值为[获取AK/SK和Endpoint信息]准备的AK和SK。
     图3自定义添加OBS参数   
     ![](https://support.huaweicloud.com/usermanual-mrs/zh-cn_image_0000001925620033.png "点击放大") 
  
  4. 保存配置并重启Spark服务。
  
  5. 在spark-beeline中访问OBS，例如访问obs://obs-demo-input/table/目录： create table test(id int) location 'obs://obs-demo-input/table/';
     
    
- spark-sql和spark-submit spark-sql和spark-submit都可通过修改"core-site.xml"配置文件访问OBS，即修改"*客户端安装目录*/Spark/spark/conf"目录下的"core-site.xml"文件，增加如下内容：
  ```
  <property>
      <name>fs.obs.access.key</name>
      <value>获取AK/SK和Endpoint信息准备的AK</value>
  </property>
  <property>
      <name>fs.obs.secret.key</name>
      <value>获取AK/SK和Endpoint信息准备的SK</value>
  </property>
  <property>
      <name>fs.obs.endpoint</name>
      <value>获取AK/SK和Endpoint信息准备的Endpoint</value>
  </property>
  ```
  
 
#### 配置Presto访问OBS
1. 登录集群详情页面，选择"组件管理 \> Presto \> 服务配置"。
2. 将"基础配置"切换为"全部配置"。
3. 搜索并配置如下参数。 
   - "fs.obs.access.key"配置为[获取AK/SK和Endpoint信息]准备的AK。
   
   - "fs.obs.secret.key"配置为[获取AK/SK和Endpoint信息]准备的SK。
   
   
   若当前集群中搜索不到如上两个参数，请在左侧导航选择"Presto \> Hive"，在自定义参数"core.site.customized.configs"中增加如上两个参数。
   
   
4. 保存配置并重启Presto服务。
5. 选择"组件管理 \> Hive \> 服务配置"。
6. 将"基础配置"切换为"全部配置"。
7. 搜索并配置如下参数。 
   - "fs.obs.access.key"配置为[获取AK/SK和Endpoint信息]准备的AK。
   
   - "fs.obs.secret.key"配置为[获取AK/SK和Endpoint信息]准备的SK。
   
   
   
   
8. 保存配置并重启Hive服务。
9. 在Presto客户端中执行语句创建Schema，指定Location为OBS路径，例如： 
   **presto_cli.sh**
   **CREATE SCHEMA hive.demo WITH (location = 'obs://obs-demo/presto-demo/');**
   
   
10. 在该Schema中建表，表的数据即会存储在OBS文件系统内，例如： 
    **USE** **hive.demo** **;**
    **CREATE TABLE** *表名* **(id int)** **;**
    **INSERT INTO** *表名* **VALUES (*2*)** **;** 命令中的2为示例，请根据实际表中数值修改。
    **CREATE TABLE hive.demo.demo_table WITH (format = 'ORC') AS SELECT \* FROM tpch.sf1.customer;**
    
    
 
#### 配置Flink访问OBS
1. 参考[配置Hadoop访问OBS]完成Hadoop对接OBS。
2. 刷新Flink客户端，配置Flink对接OBS。 
   1. 以**root**用户登录客户端安装节点。
   
   2. 进入客户端安装的目录，执行以下命令更新配置文件： **cd** *客户端安装目录*
      **sh autoRefreshConfig.sh**
      
   
   3. 按照提示输入Manager管理员用户名、密码以及Manager界面浮动IP地址。 Manager界面浮动IP地址可通过登录主OMS节点并执行**ifconfig**命令获取。
      
   
   4. 输入需要更新配置的组件名，例如"Flink"，组件名之间使用","分隔。如需更新所有组件配置，可直接单击回车键。 界面显示以下信息表示配置更新成功：
      ```
      Succeed to refresh components client config.
      ```
      
   
   
   
   
 
