
# 配置SparkSQL业务用户权限
#### 操作场景
在进行SparkSQL业务开发时，还可能需要关联使用其他组件，例如在使用Spark on HBase时，还需要HBase的相关权限。接下来将详细介绍如何配置SparkSQL与HBase服务之间的关联操作。
#### 前提条件
- 完成Spark客户端的安装，例如安装目录为"/opt/client"。
- 获取一个拥有MRS集群管理员权限的用户，例如"admin"。
 
#### Spark on HBase授权
用户如果需要使用类似SQL语句的方式来操作HBase表，授予权限后可以使用SparkSQL访问HBase表。以授予用户在SparkSQL中查询HBase表的权限为例，操作步骤如下：
1. 登录Manager页面，选择"集群 \> 服务 \> Spark \> 配置 \> 全部配置"，搜索参数"spark.yarn.security.credentials.hbase.enabled"，并修改参数值为"true"。
2. 在Manager角色界面创建一个角色，例如"hive_hbase_create"，并授予创建HBase表的权限。 在"配置资源权限"的表格中选择"*待操作集群的名称* \> HBase \> HBase Scope \> global"，勾选命名空间"default"的"创建"，单击"确定"保存。
   本例中建表是保存在Hive的"default"数据库中，默认具有"default"数据库的"建表"权限。如果Hive的数据库不是"default"，则还需要执行以下步骤：
   在"配置资源权限"的表格中选择"*待操作集群的名称* \> Hive \> Hive读写权限"，勾选所需指定的数据库的"建表"，单击"确定"保存。
   
3. 在Manager角色界面创建一个角色，例如"hive_hbase_submit"，并授予提交任务到Yarn的队列的权限。 在"配置资源权限"的表格中选择"*待操作集群的名称* \> Yarn \> 调度队列 \> root"，勾选队列"default"的"提交"，单击"确定"保存。
   
4. 在Manager用户界面创建一个"人机"用户，例如"hbase_creates_user"，加入"hive"组，绑定角色"hive_hbase_create"和"hive_hbase_submit"，用于创建SparkSQL表和HBase表。
5. 以客户端安装用户登录安装客户端的节点。
6. 执行以下命令，配置环境变量。 加载环境变量：
   ```
   source /opt/client/bigdata_env
   ```
   加载组件环境变量：
   ```
   source /opt/client/Spark/component_env
   ```
   
7. 执行以下命令，认证用户。
   ```
   kinit hbase_creates_user
   ```
   
8. 执行以下命令，进入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.<系统域名>@<系统域名>;"
   ```
   
9. 执行以下命令，同时在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"。
   
10. 在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的"查询"，单击"确定"保存。
     
11. 在Manager用户界面创建一个"人机"用户，例如"hbase_select_user"，加入"hive"组，绑定角色"hive_hbase_select"，用于查询SparkSQL表和HBase表。
12. 执行以下命令，配置环境变量。 加载环境变量：
    ```
    source /opt/client/bigdata_env
    ```
    加载组件环境变量：
    ```
    source /opt/client/Spark/component_env
    ```
    
13. 执行以下命令，认证用户。
    ```
    kinit hbase_select_user
    ```
    
14. 执行以下命令，进入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.<系统域名>@<系统域名>;"
    ```
    
15. 执行以下命令，使用SparkSQL语句查询HBase表的数据。
    ```
    select * from hbaseTable;
    ```
    
 
