

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 使用 Hive 访问 HBase 表
<a name="emr-hbase-access-hive"></a>

HBase 并[Apache Hive](emr-hive.md)紧密集成，允许您直接对存储在中的 HBase数据运行大规模并行处理工作负载。要将 Hive 与配合使用 HBase，您通常可以在同一个集群上启动它们。但是，您可以在单独的集群 HBase 上启动 Hive 和。在不同的集群上分别运行 HBase 和 Hive 可以提高性能，因为这样可以让每个应用程序更有效地使用集群资源。

以下过程说明如何使用 Hiv HBase e 连接到集群。

**注意**  
您只能将 Hive 集群连接到单个 HBase 集群。

**将 Hive 连接到 HBase**

1. 使用并 HBase 安装了 Hive 创建单独的集群，或者创建一个同时安装了 Hive HBase 和 Hive 的单个集群。

1. 如果您使用的是单独的集群，请修改您的安全组 HBase ，以便在这两个主节点之间打开 Hive 端口。

1. 使用 SSH 连接到安装了 Hive 的集群的主节点。有关更多信息，请参阅《Amazon EMR 管理指南**》中的[使用 SSH 连接到主节点](https://docs.amazonaws.cn/emr/latest/ManagementGuide/emr-connect-master-node-ssh.html)。

1. 通过以下命令启动 Hive shell。

   ```
   hive
   ```

1. （可选）如果 HBase 和 Hive 位于同一个集群上，则无需执行此操作。将 Hive 集群上的 HBase 客户端连接到包含您的数据的 HBase 集群。在以下示例中，替换{{public-DNS-name}}为 HBase 群集主节点的公有 DNS 名称，例如：`ec2-50-19-76-67.compute-1.amazonaws.com`。

   ```
   set hbase.zookeeper.quorum={{public-DNS-name}};
   ```

1. 根据需要继续对您的 HBase 数据运行 Hive 查询，或者查看下一个过程。

**从 Hive 访问 HBase 数据**
+ 在 Hive 和 HBase 集群之间建立连接后（如前面的过程所示），您可以通过在 Hive 中创建外部表来访问存储在 HBase集群上的数据。

  以下示例从主节点上的 Hive 提示符运行时，会创建一个外部表，该表引用存储在名`inputTable`为的 HBase 表中的数据。然后，您可以`inputTable`在 Hive 语句中引用以查询和修改存储在 HBase 集群中的数据。

  ```
  set hbase.zookeeper.quorum=ec2-107-21-163-157.compute-1.amazonaws.com;
  
  create external table inputTable (key string, value string)
       stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
        with serdeproperties ("hbase.columns.mapping" = ":key,f1:col1")
        tblproperties ("hbase.table.name" = "t1");
  
  select count(key) from inputTable ;
  ```

有关更高级的用例和组合 HBase 和 Hive 的示例，请参阅 Amazon 大数据博客文章《在 Amazon EM [R 上使用 Apache 和 HBase Apache Hive 将 NoSQL 与大规模并行分析相结合](https://www.amazonaws.cn/blogs/big-data/combine-nosql-and-massively-parallel-analytics-using-apache-hbase-and-apache-hive-on-amazon-emr)》。