
# 配置Hive访问HBase数据
#### 操作场景
Hive on HBase即是允许用户通过Hive的SQL接口查询和操作存储在HBase中的数据，将HBase的高效存储和实时读写能力与Hive的SQL查询能力相结合，提供了一种灵活且高效的数据处理方式。
在MRS中，Hive支持通过内部表和外部表两种方式来访问和处理存储在HBase中的数据。本文通过示例为您介绍，如何使用MRS上的Hive处理MRS HBase数据。
#### 前提条件
- 已安装集群客户端，具体请参考[安装客户端](https://support.huaweicloud.com/usermanual-mrs/mrs_01_0090.html)章节。例如安装目录为"/opt/hadoopclient"，以下操作的客户端目录只是举例，请根据实际安装目录修改。
- 集群已启用Kerberos认证（安全模式），需准备用于创建Hive on HBase表的用户，该用户需属于"hive"用户组，并配置HBase相关权限：
  - 如果HBase启用了Ranger鉴权，则需参考[添加HBase的Ranger访问权限策略](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1857.html)为该用户配置创建表、写入数据和读取数据的权限。
  
  - 如果HBase未启用Ranger鉴权，则需参考[创建HBase用户并绑定角色](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_1608.html)为该用户配置创建表、写入数据和读取数据的权限。
   
 
#### Hive通过内表访问HBase
如果HBase中没有已经创建好的表，则可以在Hive中创建表，Hive会自动把表结构和数据写入到HBase中。以下示例为在Hive中新建表访问HBase。
1. 以客户端安装用户登录安装客户端的节点，执行以下命令配置环境变量并认证用户。 
   切换至客户端安装目录：
   ```
   cd 客户端安装目录
   ```
   加载环境变量：
   ```
   source bigdata_env
   ```
   认证用户，未开启Kerberos认证的集群请跳过该步骤：
   ```
   kinit Hive业务用户
   ```
   
   
2. 执行以下命令登录Hive客户端： 
   ```
   beeline
   ```
   
   
3. 在Hive中创建HBase表，插入并查看表数据。 
   1. 执行以下命令，在Hive中创建HBase表，例如"hive_hbase_table"：
      ```
      create table hive_hbase_table(id int, name string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties ("hbase.columns.mapping" = ":key,cf1:name") tblproperties ("hbase.table.name" = "hive_hbase_table");
      ```
      
   
   2. 执行以下命令，向表中插入数据：
      ```
      insert into table hive_hbase_table values(12,'abab');
      ```
      
   
   3. 执行以下命令，查看表数据：
      ```
      select * from hive_hbase_table;
      ```
      查看到的表数据为：
      图1查看Hive表数据   
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002305682072.png "点击放大") 
   
   
   
   
4. 执行以下命令退出Hive客户端： 
   ```
   !q
   ```
   
   
5. 执行以下命令登录HBase客户端： 
   ```
   hbase shell
   ```
   
   
6. 执行以下命令，查看是否已经通过Hive在HBase中创建了表： 
   ```
   describe 'hive_hbase_table'
   ```
   命令执行后，回显结果[图2]所示，即表示已经通过Hive在HBase中创建了表"hive_hbase_table"。
   图2查看HBase表   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002305524292.png "点击放大")
   
   
7. 执行以下命令，在HBase中查看Hive写的数据是否已存在： 
   ```
   scan 'hive_hbase_table'
   ```
   查看到的数据与[3.b]插入的数据一致，则说明已成功在Hive中创建了HBase表。
   图3查看HBase表数据   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002305685880.png "点击放大")
   
   
 
#### Hive通过外表访问HBase
如果已经在HBase中创建了表，想通过Hive访问，则可以使用Hive外表的方式与HBase中的表建立映射关系，进而通过Hive访问HBase中已经存在的表。
1. 以客户端安装用户登录安装客户端的节点，执行以下命令配置环境变量并认证用户。 
   切换至客户端安装目录：
   ```
   cd 客户端安装目录
   ```
   加载环境变量：
   ```
   source bigdata_env
   ```
   认证用户，未开启Kerberos认证的集群请跳过该步骤：
   ```
   kinit Hive业务用户
   ```
   
   
2. 执行以下命令登录HBase客户端： 
   ```
   hbase shell
   ```
   
   
3. 在HBase中创建并查询表数据。 
   1. 执行以下命令，在HBase中创建表：
      ```
      create 'hbase_table','f'
      ```
      
   
   2. 执行以下命令，向表中插入数据：
      ```
      put 'hbase_table','12','f:col1','hello'
      ```
      
   
   3. 执行以下命令，查看表数据：
      ```
      scan 'hbase_table'
      ```
      图4查看HBase表数据   
      ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002305896288.png "点击放大") 
   
   
   
   
4. 执行**Ctrl + C** 退出HBase客户端**。**
5. 执行以下命令登录Hive客户端： 
   ```
   beeline
   ```
   
   
6. 在Hive中创建外表，并与HBase中的表建立映射关系。 
   ```
   create external table hbase_table(key int,col1 string,col2 string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping" = "f:col1,f:col2") tblproperties("hbase.table.name" = "hbase_table", "hbase.mapred.output.outputtable" = "hbase_table");
   ```
   
   
7. 执行以下命令，在Hive中查看"hbase_table"数据： 
   ```
   select * from hbase_table;
   ```
   查看到的数据与[3.b]插入的数据一致，则说明已成功在Hive中创建了HBase外表。
   图5查看Hive表数据   
   ![](https://support.huaweicloud.com/cmpntguide-lts-mrs/zh-cn_image_0000002339819753.png "点击放大")
   
   
 
#### 相关文档
- 配置跨集群互信后，如需使用Hive on HBase，具体操作请参见[配置Hive访问跨集群的HBase数据](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_24293.html)。
- 如需清除Hive对应的HBase表中符合条件的一条或者多条数据，具体操作请参见[删除Hive on HBase表中的单行记录](https://support.huaweicloud.com/cmpntguide-lts-mrs/mrs_01_0956.html)。
 
