教學課程:在 Azure HDInsight 中使用 Apache HBase

本教學課程示範如何在 Azure HDInsight 中建立 Apache HBase 叢集、使用 Apache Hive 建立 HBase 數據表和查詢數據表。 如需一般 HBase 資訊,請參閱 HDInsight HBase 概觀

在本教學課程中,您會了解如何:

  • 建立 Apache HBase 叢集
  • 建立 HBase 數據表並插入數據
  • 使用 Apache Hive 查詢 Apache HBase
  • 使用 Curl 使用 HBase REST API
  • 檢查叢集狀態

必要條件

建立 Apache HBase 叢集

下列程式會使用 Azure Resource Manager 範本來建立 HBase 叢集。 此範本也會建立相依的預設 Azure 儲存體 帳戶。 若要瞭解程式和其他叢集建立方法中使用的參數,請參閱 在 HDInsight 中建立以 Linux 為基礎的 Hadoop 叢集。

  1. 選取下圖,以在 Azure 入口網站 中開啟範本。 範本位於 Azure 快速入門範本

    Deploy to Azure button for new cluster

  2. 從 [ 自訂部署] 對話框中,輸入下列值:

    屬性 描述
    訂用帳戶 選取用來建立叢集的 Azure 訂用帳戶。
    資源群組 建立 Azure 資源管理群組或使用現有的群組。
    Location 指定資源群組的位置。
    ClusterName 輸入 HBase 叢集的名稱。
    叢集登入名稱和密碼 預設登入名稱為 admin
    SSH 使用者名稱和密碼 預設的使用者名稱為 sshuser

    其他參數都是選擇性的。

    每個叢集都有 Azure 儲存體 帳戶相依性。 刪除叢集之後,數據會保留在記憶體帳戶中。 叢集預設記憶體帳戶名稱是附加 「store」 的叢集名稱。 範本變數區段中會硬式編碼。

  3. 選取 [我同意上述條款及條件],然後選取 [ 購買]。 大約需要 20 分鐘的時間來建立叢集。

刪除 HBase 叢集之後,您可以使用相同的預設 Blob 容器來建立另一個 HBase 叢集。 新的叢集會挑選您在原始叢集中建立的 HBase 數據表。 若要避免不一致,建議您先停用 HBase 數據表,再刪除叢集。

建立數據表並插入數據

您可以使用 SSH 連線到 HBase 叢集,然後使用 Apache HBase Shell 來建立 HBase 數據表、插入數據和查詢數據。

對大多數人而言,資料會以表格形式出現:

HDInsight Apache HBase tabular data.

在 HBase (實作 Cloud BigTable) 中,相同的資料看起來如下:

HDInsight Apache HBase BigTable data.

使用 HBase 殼層

  1. 使用 ssh 命令來連線至您的 HBase 叢集。 編輯以下命令並將 CLUSTERNAME 取代為您叢集的名稱,然後輸入命令:

    ssh sshuser@CLUSTERNAME-ssh.azurehdinsight.net
    
  2. 使用 hbase shell 命令來啟動 HBase 互動式殼層。 在您的 SSH 連線中輸入下列命令:

    hbase shell
    
  3. 使用 create 命令來建立含兩個資料行系列的 HBase 資料表。 數據表和數據行名稱會區分大小寫。 輸入下列命令:

    create 'Contacts', 'Personal', 'Office'
    
  4. 使用 list 命令來列出 HBase 中的所有資料表。 輸入下列命令:

    list
    
  5. 使用 put 命令來將值插入特定資料表中之指定資料列的指定資料行。 輸入下列命令:

    put 'Contacts', '1000', 'Personal:Name', 'John Dole'
    put 'Contacts', '1000', 'Personal:Phone', '1-425-000-0001'
    put 'Contacts', '1000', 'Office:Phone', '1-425-000-0002'
    put 'Contacts', '1000', 'Office:Address', '1111 San Gabriel Dr.'
    
  6. 使用 scan 命令來掃描並傳回 Contacts 資料表資料。 輸入下列命令:

    scan 'Contacts'
    

    HDInsight Apache Hadoop HBase shell.

  7. 使用 get 命令來擷取資料列的內容。 輸入下列命令:

    get 'Contacts', '1000'
    

    您會看到與使用 scan 命令類似的結果,因為只有一個數據列。

    如需 HBase 資料表結構描述的詳細資訊,請參閱 Apache HBase 結構描述設計簡介 \(英文\)。 如需其他 HBase 命令,請參閱 Apache HBase 參考指南 \(英文\)。

  8. 使用 exit 命令來停止 HBase 互動式殼層。 輸入下列命令:

    exit
    

若要將數據大量載入聯繫人 HBase 數據表

HBase 包含數種將數據載入數據表的方法。 如需詳細資訊,請參閱 大量載入

您可以在公用 Blob 容器中找到範例資料檔。 wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt 資料檔案的內容如下:

8396 Calvin Raji 230-555-0191 230-555-0191 5415 San Gabriel Dr.

16600 Karen Wu 646-555-0113 230-555-0192 9265 La Paz

4324 Karl Xie 508-555-0163 230-555-0193 4912 La Vuelta

16891 Jonn Jackson 674-555-0110 230-555-0194 40 Ellis St.

3273 Miguel Miller 397-555-0155 230-555-0195 6696 Anchor Drive

3588 Osa Agbonile 592-555-0152 230-555-0196 1873 Lion Circle

10272 Julia Lee 870-555-0110 230-555-0197 3148 Rose Street

4868 Jose Hayes 599-555-0171 230-555-0198 793 Crawford Street

4761 Caleb Alexander 670-555-0141 230-555-0199 4775 Kentucky Dr.

16443 Terry Chander 998-555-0171 230-555-0200 771 Northridge Drive

您可以選擇性地建立文本檔,並將檔案上傳至您自己的記憶體帳戶。 如需指示,請參閱 在 HDInsight 中上傳 Apache Hadoop 作業的數據。

此程式會使用 Contacts 您在最後一個程式中建立的 HBase 數據表。

  1. 從開啟的 SSH 連線中,執行下列命令,將數據檔轉換成 StoreFiles,並儲存在 所 Dimporttsv.bulk.output指定的相對路徑。

    hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns="HBASE_ROW_KEY,Personal:Name,Personal:Phone,Office:Phone,Office:Address" -Dimporttsv.bulk.output="/example/data/storeDataFileOutput" Contacts wasb://hbasecontacts@hditutorialdata.blob.core.windows.net/contacts.txt
    
  2. 執行下列命令,將資料從 /example/data/storeDataFileOutput 上傳至 HBase 資料表:

    hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles /example/data/storeDataFileOutput Contacts
    
  3. 您可以開啟 HBase 殼層,並使用 scan 命令來列出資料表內容。

使用 Apache Hive 查詢 Apache HBase

您可以使用 Apache Hive 查詢 HBase 數據表中的數據。 在本節中,您會建立對應至 HBase 數據表的 Hive 數據表,並用它來查詢 HBase 數據表中的數據。

  1. 從開啟的 SSH 連線中,使用下列命令啟動 Beeline:

    beeline -u 'jdbc:hive2://localhost:10001/;transportMode=http' -n admin
    

    如需 Beeline 的詳細資訊,請參閱 在 HDInsight 中搭配 Beeline 搭配 Hadoop 使用 Hive。

  2. 執行下列 HiveQL 腳本來建立對應至 HBase 數據表的 Hive 數據表。 在執行此語句之前,請先確定您已使用 HBase 殼層建立本文稍早參考的範例數據表。

    CREATE EXTERNAL TABLE hbasecontacts(rowkey STRING, name STRING, homephone STRING, officephone STRING, officeaddress STRING)
    STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
    WITH SERDEPROPERTIES ('hbase.columns.mapping' = ':key,Personal:Name,Personal:Phone,Office:Phone,Office:Address')
    TBLPROPERTIES ('hbase.table.name' = 'Contacts');
    
  3. 執行下列 HiveQL 腳本來查詢 HBase 資料表中的數據:

    SELECT count(rowkey) AS rk_count FROM hbasecontacts;
    
  4. 若要結束 Beeline,請使用 !exit

  5. 若要結束 SSH 連線,請使用 exit

分隔Hive和 Hbase 叢集

存取 HBase 數據的 Hive 查詢不需要從 HBase 叢集執行。 Hive 隨附的任何叢集(包括 Spark、Hadoop、HBase 或互動式查詢)都可以用來查詢 HBase 數據,前提是下列步驟已完成:

  1. 這兩個叢集都必須連結至相同的 虛擬網絡 和子網
  2. 從 HBase 叢集前端節點複製到 /usr/hdp/$(hdp-select --version)/hbase/conf/hbase-site.xml Hive 叢集前端節點和背景工作節點。

保護叢集

您也可以使用已啟用 ESP 的 HBase 從 Hive 查詢 HBase 資料:

  1. 遵循多重叢集模式時,這兩個叢集都必須啟用ESP。
  2. 若要允許Hive查詢 HBase 資料,請確定 hive 使用者已獲授與許可權,以透過 Hbase Apache Ranger 外掛程式存取 HBase 數據
  3. 使用個別且啟用ESP的叢集時,HBase 叢集前端節點的內容 /etc/hosts 必須附加至 /etc/hosts Hive叢集前端節點和背景工作節點。

注意

調整任一叢集之後, /etc/hosts 必須再次附加

透過 Curl 使用 HBase REST API

HBase REST API 會透過 基本身份驗證來保護。 您應該一律使用安全 HTTP (HTTPS) 提出要求,以協助確保您的認證安全地傳送至伺服器。

  1. 若要在 HDInsight 叢集中啟用 HBase REST API,請將下列自定義啟動腳本新增至 [腳本動作] 區段。 您可以在建立叢集或建立叢集之後新增啟動腳本。 針對 [ 節點類型],選取 [ 區域伺服器 ],以確保腳本只會在 HBase 區域伺服器中執行。

    #! /bin/bash
    
    THIS_MACHINE=`hostname`
    
    if [[ $THIS_MACHINE != wn* ]]
    then
        printf 'Script to be executed only on worker nodes'
        exit 0
    fi
    
    RESULT=`pgrep -f RESTServer`
    if [[ -z $RESULT ]]
    then
        echo "Applying mitigation; starting REST Server"
        sudo python /usr/lib/python2.7/dist-packages/hdinsight_hbrest/HbaseRestAgent.py
    else
        echo "REST server already running"
        exit 0
    fi
    
  2. 設定環境變數以方便使用。 將 取代 MYPASSWORD 為叢集登入密碼,以編輯下列命令。 將取代 MYCLUSTERNAME 為您的 HBase 叢集名稱。 然後輸入命令。

    export PASSWORD='MYPASSWORD'
    export CLUSTER_NAME=MYCLUSTERNAME
    
  3. 使用下列命令來列出現有的 HBase 資料表:

    curl -u admin:$PASSWORD \
    -G https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/
    
  4. 使用下列命令建立具有兩個資料列系列的新 HBase 資料表:

    curl -u admin:$PASSWORD \
    -X PUT "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/schema" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "{\"@name\":\"Contact1\",\"ColumnSchema\":[{\"name\":\"Personal\"},{\"name\":\"Office\"}]}" \
    -v
    

    架構是以 JSon 格式提供。

  5. 使用下列命令插入一些資料:

    curl -u admin:$PASSWORD \
    -X PUT "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/false-row-key" \
    -H "Accept: application/json" \
    -H "Content-Type: application/json" \
    -d "{\"Row\":[{\"key\":\"MTAwMA==\",\"Cell\": [{\"column\":\"UGVyc29uYWw6TmFtZQ==\", \"$\":\"Sm9obiBEb2xl\"}]}]}" \
    -v
    

    Base64 編碼 -d 參數中指定的值。 在下列範例中:

    • MTAwMA==: 1000

    • UGVyc29uYWw6TmFtZQ==: Personal: Name

    • Sm9obiBEb2xl: John Dole

      false-row-key 可讓您插入多個 (批次) 值。

  6. 使用下列命令來取得資料欄:

    curl -u admin:$PASSWORD \
    GET "https://$CLUSTER_NAME.azurehdinsight.net/hbaserest/Contacts1/1000" \
    -H "Accept: application/json" \
    -v
    

如需 HBase Rest 的詳細資訊,請參閱 Apache HBase 參考指南

注意

Thrift 不受 HDInsight 中的 HBase 所支援。

在使用 Curl 或與 WebHCat 進行任何其他 REST 通訊時,您必須提供 HDInsight 叢集系統管理員的使用者名稱和密碼來驗證要求。 您也必須使用叢集名稱作為用來將要求傳送至伺服器的統一資源識別碼 (URI) 的一部分:

curl -u <UserName>:<Password> \

-G https://<ClusterName>.azurehdinsight.net/templeton/v1/status

您應該會收到類似下列回應的回應:

{"status":"ok","version":"v1"}

檢查叢集狀態

HDInsight 中的 HBase 隨附 Web UI 來監視叢集。 使用 Web UI,您可以要求有關區域的統計數據或資訊。

存取 HBase 主要 UI

  1. 登入Ambari Web UI, https://CLUSTERNAME.azurehdinsight.net 其中 CLUSTERNAME 是 HBase 叢集的名稱。

  2. 從左側功能表中選取 [HBase ]。

  3. 選取 頁面頂端的 [快速連結 ],指向使用中的 Zookeeper 節點鏈接,然後選取 [HBase 主要 UI]。 UI 在另一個瀏覽器索引標籤中開啟:

    HDInsight Apache HBase HMaster UI.

    HBase 主要 UI 包含下列各節:

    • 區域伺服器
    • 備份主機
    • 資料表
    • 工作
    • 軟體屬性

叢集娛樂

刪除 HBase 叢集之後,您可以使用相同的預設 Blob 容器來建立另一個 HBase 叢集。 新的叢集會挑選您在原始叢集中建立的 HBase 數據表。 不過,若要避免不一致,建議您先停用 HBase 數據表,再刪除叢集。

您可以使用 HBase 指令 disable 'Contacts'

清除資源

如果您不打算繼續使用此應用程式,請刪除您使用下列步驟建立的 HBase 叢集:

  1. 登入 Azure 入口網站
  2. 在頂端的 [搜尋] 方塊中,輸入 HDInsight
  3. 在 [服務] 底下,選取 [HDInsight 叢集]
  4. 在顯示的 HDInsight 叢集清單中,按下 您為此教學課程建立的叢集旁的 ...
  5. 按一下刪除。 按一下 [是] 。

下一步

在本教學課程中,您已瞭解如何建立Apache HBase 叢集。 以及如何從 HBase 殼層建立數據表並檢視這些數據表中的數據。 您也瞭解如何對 HBase 數據表中的數據使用 Hive 查詢。 以及如何使用 HBase C# REST API 來建立 HBase 數據表,並從數據表擷取數據。 若要深入了解,請參閱: