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

配置Spark通过Guardian访问OBS

参考配置Guardian服务对接OBS完成Guardian对接OBS后,即可在Spark客户端创建Location为OBS路径的表。

Spark对接OBS

MRS集群支持Spark服务在创建表时指定Location为OBS文件系统路径,也支持基于Hive Metastore方式对接OBS。

  • 建表时指定Location为OBS路径:
    1. 以客户端安装用户登录安装客户端的节点,并进入spark-sql客户端:

      cd 客户端安装目录

      kinit 组件操作用户

      spark-sql --master yarn

    2. 在创建表时指定Location为OBS文件系统路径。

      例如,创建一个表“test”,该表的Location为“obs://obs-test/test/数据库名/表名”:

      create external table testspark(name string) location "obs://obs-test/test/数据库名/表名";

  • 配置Spark基于Hive MetaStore方式对接OBS:
    1. 已完成配置Hive基于MetaStore方式对接OBS相关配置操作。
    2. 登录FusionInsight Manager,选择“集群 > 服务 > Spark > 配置 > 全部配置 ”。
    3. 在左侧的导航列表中选择“SparkResource > 自定义”。在自定义配置项中,给参数“custom”添加配置项“spark.sql.warehouse.location.first”,设置值为“true”。
      图1 spark.sql.warehouse.location.first配置
    4. 在左侧的导航列表中选择“JDBCServer > 自定义”。在自定义配置项中,在参数“custom”添加配置项“spark.sql.warehouse.location.first”,设置值为“true”。
      图2 spark.sql.warehouse.location.first配置
    5. 单击“保存”,保存配置,然后单击“概览”,选择“更多 > 重启服务”,输入密码,单击“确定”后再次单击“确定”,重启Spark服务。
    6. Spark重启成功后,选择“更多 > 下载客户端”,重新下载并安装Spark客户端,详细操作请参考安装客户端章节,并执行7
      如果不重新下载并安装客户端,则直接执行以下步骤更新Spark客户端配置文件(例如:客户端目录为“/opt/client”,具体以实际为准):
      1. root用户登录Spark客户端所在的节点,切换到客户端安装目录。

        cd /opt/client

      2. 执行以下命令修改Spark客户端配置文件目录下的“hive-site.xml”。

        vi Spark/spark/conf/hive-site.xml

        将“hive.metastore.warehouse.dir”的值修改为对应的OBS路径,例如“obs://hivetest/user/hive/warehouse/”。

        <property>
        <name>hive.metastore.warehouse.dir</name>
        <value>obs://hivetest/user/hive/warehouse/<value>
        </property>
      3. 执行以下命令修改Spark客户端配置文件目录下的“spark-defaults.conf”,添加“spark.sql.warehouse.location.first = true”配置。

        vi Spark/spark/conf/spark-defaults.conf

    7. 安全集群需参考Ranger权限配置完成组件操作用户的OBS目录权限配置。
    8. 进入SparkSQL CLI命令行和spark-beeline,创建表并查看表的Location是否为OBS路径。

      source bigdata_env

      kinit 业务用户(普通模式请跳过此步骤)

      • 进入SparkSQL CLI命令行:

        spark-sql

        create table d(a int);

        desc formatted d;

        如下图则表示表“d”的Location已经在指定的OBS路径下。

        图3 查看表d的Location
      • 进入spark-beeline:

        spark-beeline

        create table e(a int);

        desc formatted e;

        如下图则表示表“e”的Location已经在指定的OBS路径下。

        图4 查看表e的Location

Ranger权限配置

  1. 登录FusionInsight Manager,选择“系统 > 权限 > 用户组 > 添加用户组”。
  2. 创建一个空角色的用户组,例如,名称为“obs_spark”,并将该用户组绑定给对应用户。
  3. 使用rangeradmin用户登录Ranger管理页面。
  4. 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。
  5. 单击“Add New Policy”,为2新建的用户组添加相应OBS路径的“Read”和“Write”权限,OBS目录若不存在则需要提前创建,且不允许带通配符*

    图5 为Spark用户组赋予OBS路径的读和写权限

  • 不支持对视图表进行级联授权。
  • 仅支持对数据库/表进行级联授权操作,不支持对分区做级联权限,如果分区路径不在表路径下,则需要用户手动授权分区路径。
  • 不支持对Hive Ranger策略中的“Deny Conditions”进行级联授权,即“Deny Conditions”的权限仅限制表权限,不能生成HDFS存储源端的权限。
  • 级联授权生成的HDFS存储源端的权限弱于HDFS Ranger策略的权限,即如果已经对表的HDFS存储源设置了HDFS Ranger权限,则级联权限将不会生效。

CDL业务用户权限配置

集群已启用Kerberos认证(安全模式)若需在对接OBS成功后,使用CDL实现实时数据入湖选择存储到OBS时,则需参考以下操作为对应用户赋予相应OBS路径的“Read”和“Write”权限。

  1. 登录FusionInsight Manager,选择“系统 > 权限 > 用户组 > 添加用户组”。
  2. 创建一个空角色的用户组,例如“obs_cdl”,并将该用户组绑定给对应CDL业务用户,例如“cdluser”。
  3. 使用rangeradmin用户登录Ranger管理页面。
  4. 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。
  5. 单击“Add New Policy”,为新建的用户组添加相应OBS路径的“Read”和“Write”权限,OBS目录若不存在则需要提前创建,且不允许带通配符*

    例如,为用户组“obs_cdl”添加“obs://OBS并行文件系统名称/cdldata”的“Read”和“Write”权限:

    图6 为CDL用户组赋予OBS路径的读和写权限