更新时间:2024-11-12 GMT+08:00

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会明文暴露在配置文件中,请谨慎使用。

  • 为了提高数据写入性能,可以在Manager页面选择“集群 > 服务 > 需要修改的服务名称 > 配置”,修改对应服务的配置参数“fs.obs.buffer.dir”的值为数据盘目录。
  • 大数据存算分离场景,请务必使用OBS并行文件系统(并行文件系统),使用普通对象桶会对集群性能产生较大影响。
  • 在MRS 3.2.0-LTS.1及后续版本中,MRS集群内组件默认支持数据防误删策略,即组件用户删除的文件数据并不会直接被删除,而是会保存到OBS文件系统内的用户回收站目录中。

    为节省OBS使用空间,需参考配置MRS集群组件回收站目录清理策略配置定时自动清理OBS回收站目录中的文件数据。

  • 配置文件中包含认证密码信息可能存在安全风险,建议当前场景执行完毕后删除相关配置文件或加强安全管理。
  • 命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。

获取AK/SK和Endpoint信息

使用AK/SK方式对接OBS前,需参考以下操作获取对接OBS的AK、SK和Endpoint信息。

  • 获取AK/SK
    1. 登录华为云管理控制台,在“控制台”页面,鼠标移动至右上方的用户名,在下拉列表中选择“我的凭证”。
    2. 单击“访问密钥”页签,您可以在访问密钥列表中查看访问密钥ID(AK),在下载的.csv文件中查看秘密访问密钥(SK).
      若没有可用的访问密钥,需单击“新增访问密钥”,输入验证码或密码。单击“确定”,生成并下载访问密钥。
      • 请及时下载保存,弹窗关闭后将无法再次获取该密钥信息,但您可重新创建新的密钥。
      • 为了账号安全性,建议您妥善保管并定期修改访问密钥,修改访问密钥的方法为删除旧访问密钥,然后重新生成。
  • 获取EndPoint

    终端节点(Endpoint)获取方式请参考地区和终端节点

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客户端安装详细操作请参见安装客户端
    <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”文件,增加以上内容。

    在文件中设置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及之后版本,登录FusionInsight Manager页面,具体请参见访问MRS集群Manager,选择“集群 > 服务 > 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信息
    • 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

  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及之后版本,登录FusionInsight Manager页面,具体请参见访问MRS集群Manager,选择“集群 > 服务 > 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参数
    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. 搜索并配置如下参数。

    若当前集群中搜索不到如上两个参数,请在左侧导航选择“Presto > Hive”,在自定义参数“core.site.customized.configs”中增加如上两个参数。

  4. 保存配置并重启Presto服务。
  5. 选择“组件管理 > Hive > 服务配置”。
  6. 将“基础配置”切换为“全部配置”。
  7. 搜索并配置如下参数。

  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

在MRS客户端的Flink配置文件“客户端安装路径/Flink/flink/conf/flink-conf.yaml”中,增加如下内容。
fs.obs.access.key: 获取AK/SK和Endpoint信息准备的AK  
fs.obs.secret.key: 获取AK/SK和Endpoint信息准备的SK  
fs.obs.endpoint: 获取AK/SK和Endpoint信息准备的Endpoint

在文件中设置AK/SK会明文暴露在配置文件中,请谨慎使用。

添加配置后无需手动添加AK/SK、Endpoint就可以直接访问OBS上的数据。