配置Spark通过Guardian访问OBS
参考配置Guardian服务对接OBS完成Guardian对接OBS后,即可在Spark客户端创建Location为OBS路径的表。
Spark对接OBS
MRS集群支持Spark服务在创建表时指定Location为OBS文件系统路径,也支持基于Hive Metastore方式对接OBS。
- 建表时指定Location为OBS路径:
- 配置Spark基于Hive MetaStore方式对接OBS:
- 已完成配置Hive基于MetaStore方式对接OBS相关配置操作。
- 登录FusionInsight Manager,选择“集群 > 服务 > Spark > 配置 > 全部配置 ”。
- 在左侧的导航列表中选择“SparkResource > 自定义”。在自定义配置项中,给参数“custom”添加配置项“spark.sql.warehouse.location.first”,设置值为“true”。
图1 spark.sql.warehouse.location.first配置
- 在左侧的导航列表中选择“JDBCServer > 自定义”。在自定义配置项中,在参数“custom”添加配置项“spark.sql.warehouse.location.first”,设置值为“true”。
图2 spark.sql.warehouse.location.first配置
- 单击“保存”,保存配置,然后单击“概览”,选择“更多 > 重启服务”,输入密码,单击“确定”后再次单击“确定”,重启Spark服务。
- Spark重启成功后,选择“更多 > 下载客户端”,重新下载并安装Spark客户端,详细操作请参考安装客户端章节,并执行7。
如果不重新下载并安装客户端,则直接执行以下步骤更新Spark客户端配置文件(例如:客户端目录为“/opt/client”,具体以实际为准):
- 以root用户登录Spark客户端所在的节点,切换到客户端安装目录。
cd /opt/client
- 执行以下命令修改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>
- 执行以下命令修改Spark客户端配置文件目录下的“spark-defaults.conf”,添加“spark.sql.warehouse.location.first = true”配置。
vi Spark/spark/conf/spark-defaults.conf
- 以root用户登录Spark客户端所在的节点,切换到客户端安装目录。
- 安全集群需参考Ranger权限配置完成组件操作用户的OBS目录权限配置。
- 进入SparkSQL CLI命令行和spark-beeline,创建表并查看表的Location是否为OBS路径。
kinit 业务用户(普通模式请跳过此步骤)
Ranger权限配置
- 登录FusionInsight Manager,选择“系统 > 权限 > 用户组 > 添加用户组”。
- 创建一个空角色的用户组,例如,名称为“obs_spark”,并将该用户组绑定给对应用户。
- 使用rangeradmin用户登录Ranger管理页面。
- 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。
- 单击“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”权限。
- 登录FusionInsight Manager,选择“系统 > 权限 > 用户组 > 添加用户组”。
- 创建一个空角色的用户组,例如“obs_cdl”,并将该用户组绑定给对应CDL业务用户,例如“cdluser”。
- 使用rangeradmin用户登录Ranger管理页面。
- 在首页中单击“EXTERNAL AUTHORIZATION”区域的组件插件名称“OBS”。
- 单击“Add New Policy”,为新建的用户组添加相应OBS路径的“Read”和“Write”权限,OBS目录若不存在则需要提前创建,且不允许带通配符*。
例如,为用户组“obs_cdl”添加“obs://OBS并行文件系统名称/cdldata”的“Read”和“Write”权限:
图6 为CDL用户组赋予OBS路径的读和写权限