

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 使用 Hive 存取 HBase 資料表
<a name="emr-hbase-access-hive"></a>

HBase 與 [Apache Hive](emr-hive.md) 緊密整合，讓您可直接對存放於 HBase 的資料執行大規模平行處理工作負載。若要透過 HBase 使用 Hive，通常您可以在相同的叢集上啟動它們。然而，您也可以在個別叢集上啟動 Hive 和 HBase。在不同的叢集上執行 HBase 和 Hive 可以提高效能，因為這可讓每個應用程式更有效率地使用叢集資源。

以下程序示範如何在使用 Hive 的叢集上連接到 HBase。

**注意**  
您只能連接一個 Hive 叢集至單一 HBase 叢集。

**連接 Hive 至 HBase**

1. 透過已安裝的 Hive 與 HBase 建立個別叢集，或透過同時安裝的 HBase 與 Hive 建立單一叢集。

1. 如果您使用不同的叢集，請修改您的安全群組，以便在這兩個主節點之間開啟 HBase 和 Hive 連接埠。

1. 使用 SSH 連線到已安裝 Hive 之叢集的主要節點。如需詳細資訊，請參閱《Amazon EMR 管理指南》**中的[使用 SSH 連接至主節點](https://docs.aws.amazon.com/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 提示執行時， 會建立外部資料表，以參考存放在名為 的 HBase 資料表中的資料`inputTable`。您可以參考在 Hive 陳述式中的 `inputTable` 來查詢和修改 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 的範例，請參閱 AWS 大數據部落格文章，[使用 Amazon EMR 上的 Apache HBase 和 Apache Hive 結合 NoSQL 和大規模平行分析](https://aws.amazon.com/blogs/big-data/combine-nosql-and-massively-parallel-analytics-using-apache-hbase-and-apache-hive-on-amazon-emr)。