
# 配置SparkSQL业务用户权限
#### 操作场景
SparkSQL业务还可能需要关联使用其他组件，例如spark on HBase需要HBase权限。以下介绍SparkSQL关联HBase服务的操作。
#### 前提条件
- 完成Spark客户端的安装，例如安装目录为"/opt/client"。
- 获取一个拥有MRS集群管理员权限的用户，例如"admin"。
 
#### 操作步骤
- **Spark on HBase授权**
  用户如果需要使用类似SQL语句的方式来操作HBase表，授予权限后可以使用SparkSQL访问HBase表。以授予用户在SparkSQL中查询HBase表的权限为例，操作步骤如下：
  ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
  设置"spark.yarn.security.credentials.hbase.enabled"为"true"。
  1. 在Manager角色界面创建一个角色，例如"hive_hbase_create"，并授予创建HBase表的权限。 在"配置资源权限"的表格中选择"*待操作集群的名称* \> HBase \> HBase Scope \> global"，勾选命名空间"default"的"创建"，单击"确定"保存。
     ![](https://support.huaweicloud.com/cmpntguide-mrs/public_sys-resources/note_3.0-zh-cn.png)
     本例中建表是保存在Hive的"default"数据库中，默认具有"default"数据库的"建表"权限。如果Hive的数据库不是"default"，则还需要执行以下步骤：
     在"配置资源权限"的表格中选择"*待操作集群的名称* \> Hive \> Hive读写权限"，勾选所需指定的数据库的"建表"，单击"确定"保存。
     
  
  2. 在Manager角色界面创建一个角色，例如"hive_hbase_submit"，并授予提交任务到Yarn的队列的权限。 在"配置资源权限"的表格中选择"*待操作集群的名称* \> Yarn \> 调度队列 \> root"，勾选队列"default"的"提交"，单击"确定"保存。
     
  
  3. 在Manager用户界面创建一个"人机"用户，例如"hbase_creates_user"，加入"hive"组，绑定角色"hive_hbase_create"和"hive_hbase_submit"，用于创建SparkSQL表和HBase表。
  
  4. 以客户端安装用户登录安装客户端的节点。
  
  5. 执行以下命令，配置环境变量。 **source /opt/client/bigdata_env**
     **source /opt/client/Spark2x/component_env**
     
  
  6. 执行以下命令，认证用户。 *kinit hbase_creates_user*
     
  
  7. 执行以下命令，进入Spark JDBCServer客户端shell环境： **/opt/client/Spark2x/spark/bin/beeline -u "jdbc:hive2://\<zkNode1_IP\>:\<zkNode1_Port\>,\<zkNode2_IP\>:\<zkNode2_Port\>,\<zkNode3_IP\>:\<zkNode3_Port\>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;user.principal=spark2x/hadoop.** *\<系统域名\>* **@** *\<系统域名\>* **;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.** *\<系统域名\>* **@** *\<系统域名\>* **;"**
     
  
  8. 执行以下命令，同时在SparkSQL和HBase中创建表。例如创建表hbaseTable。 **create table hbaseTable (id string, name string, age int) using org.apache.spark.sql.hbase.HBaseSource options (hbaseTableName "table1", keyCols "id", colsMapping = ", name=cf1.cq1, age=cf1.cq2");**
     创建好的SparkSQL表和HBase表分别保存在Hive的数据库"default"和HBase的命名空间"default"。
     
  
  9. 在Manager角色界面创建一个角色，例如"hive_hbase_select"，并授予查询SparkSQL on HBase表hbaseTable和HBase表hbaseTable的权限。
     - 在"配置资源权限"的表格中选择"*待操作集群的名称* \> HBase \> HBase Scope \> global \> default"，勾选表hbaseTable的"读"，单击"确定"保存，授予HBase角色查询表的权限。
     
     - 编辑角色，在"配置资源权限"的表格中选择"*待操作集群的名称* \> HBase \> HBase Scope \> global \> hbase"，勾选表"hbase:meta"的"执行"，单击"确定"保存。
     
     - 编辑角色，在"配置资源权限"的表格中选择"*待操作集群的名称* \> Hive \> Hive读写权限 \> default"，勾选表hbaseTable的"查询"，单击"确定"保存。
      
  
  10. 在Manager用户界面创建一个"人机"用户，例如"hbase_select_user"，加入"hive"组，绑定角色"hive_hbase_select"，用于查询SparkSQL表和HBase表。
  
  11. 执行以下命令，配置环境变量。 **source /opt/client/bigdata_env**
      **source /opt/client/Spark2x/component_env**
      
  
  12. 执行以下命令，认证用户。 **kinit hbase_select_user**
      
  
  13. 执行以下命令，进入Spark JDBCServer客户端shell环境： **/opt/client/Spark2x/spark/bin/beeline -u "jdbc:hive2://\<zkNode1_IP\>:\<zkNode1_Port\>,\<zkNode2_IP\>:\<zkNode2_Port\>,\<zkNode3_IP\>:\<zkNode3_Port\>/;serviceDiscoveryMode=zooKeeper;zooKeeperNamespace=sparkthriftserver2x;user.principal=spark2x/hadoop.** *\<系统域名\>* **@** *\<系统域名\>* **;saslQop=auth-conf;auth=KERBEROS;principal=spark2x/hadoop.** *\<系统域名\>* **@** *\<系统域名\>* **;"**
      
  
  14. 执行以下命令，使用SparkSQL语句查询HBase表的数据。 **select \* from hbaseTable;**
      
   
 
