在 HBase 中執行效能評定

已完成

Yahoo! Cloud Serving Benchmark (YCSB) 是一個開放原始碼規格和程式套件,可用來評估 NoSQL 資料庫管理系統的相對效能。 在此練習中,您將對兩個 HBase 叢集的效能執行效能評定 (其中之一使用加速型寫入功能)。 您的工作是要了解這兩個選項之間的效能差異。 練習必要條件

如果您想要執行練習中的步驟,請確定您具有下列各項:

  • 有權建立 HDInsight HBase 叢集的 Azure 訂用帳戶。
  • 存取 SSH 用戶端,例如 Putty(Windows)/Terminal(Mac book)

使用 Azure 管理入口網站佈建 HDInsight HBase 叢集

若要在 Azure 管理入口網站上佈建具有新體驗的 HDInsight HBase,請執行下列步驟。

  1. 前往 Azure 入口網站。 使用您的 Azure 帳戶認證登入。

    Logging into the Azure Portal.

  2. 我們將從建立進階區塊 Blob 儲存體帳戶開始著手。 在 [新增] 頁面中,按一下 [儲存體帳戶]

    Create a storage account in the Azure Portal.

  3. 在 [建立儲存體帳戶] 頁面中,填入下列欄位

    • 訂用帳戶:應以訂用帳戶詳細資料自動填入

    • 資源群組:輸入用來保存 HDInsight HBase 部署的資源群組

    • 儲存體帳戶名稱:輸入您的儲存體帳戶名稱,以便在進階叢集中使用。

    • 區域:輸入部署區域的名稱,(請確定叢集與儲存體帳戶位於相同的區域中)

    • 效能:進階

    • 帳戶種類:BlockBlobStorage

    • 複寫:本地備援儲存體 (LRS)

    • 叢集登入使用者名稱:輸入叢集管理員的使用者名稱 (預設值:admin)

      Create storage account screen in the Azure Portal.

  4. 將所有其他索引標籤保留為預設值,然後按一下 [檢閱 + 建立] 以建立儲存體帳戶。

  5. 在儲存體帳戶建立後,按一下左側的 [存取金鑰],然後複製 key1。 我們稍後將在叢集建立程序中加以使用。

    Storage account Access Keys in the Azure Portal.

  6. 現在,我們將開始部署具有加速型寫入的 HDInsight HBase 叢集。 選取 [建立資源] -> [分析] -> [HDInsight]

    Screenshot shows Azure H D insight highlighted in Analytics in the Azure Marketplace.

  7. 在 [基本] 索引標籤上填入下列欄位,以建立 HBase 叢集。

    • 訂用帳戶:應以訂用帳戶詳細資料自動填入

    • 資源群組:輸入用來保存 HDInsight HBase 部署的資源群組

    • 叢集名稱:輸入叢集名稱。 如果叢集名稱可供使用,將會出現綠色勾號。

    • 區域:輸入部署區域的名稱

    • 叢集類型:叢集類型 - HBase。 版本 - HBase 2.0.0(HDI 4.0)

    • 叢集登入使用者名稱:輸入叢集管理員的使用者名稱 (預設值:admin)

    • 叢集登入密碼:輸入叢集登入的密碼 (預設值:sshuser)

    • 確認叢集登入密碼:確認在上一個步驟中輸入的密碼

    • 安全殼層 (SSH) 使用者名稱:輸入 SSH 登入使用者 (預設值:sshuser)

    • 使用 SSH 的叢集登入密碼:勾選此方塊,可在 SSH 登入和 Ambari 登入中使用相同的密碼

      Define Azure HDInsight settings in the Azure Portal.

  8. 按 [下一步:儲存體] 以啟動 [儲存體] 索引標籤,並填入下列欄位

    • 主要儲存體類型:Azure 儲存體。

    • 選取方法:選擇選項按鈕 [使用存取金鑰]

    • 儲存體帳戶名稱:輸入先前建立的進階區塊 Blob 儲存體帳戶的名稱

    • 存取金鑰:輸入您先前複製的 key1 存取金鑰

    • 容器:HDInsight 應該會建議預設的容器名稱。 您可以選擇此名稱,或自行建立名稱。

      Define Storage settings for Azure HDInsight in the Azure Portal.

  9. 將其餘選項保持不變,並向下捲動,以勾選 [啟用 HBase 加速型寫入] 核取方塊。(請注意,我們稍後將使用相同的步驟,但不勾選此方塊,建立不具加速型寫入的第二個叢集。)

    Enable HBase accelerated writes in Azure HDInsight in the Azure Portal.

  10. 將 [安全性 + 網路] 刀鋒視窗保留為預設設定而不進行任何變更,然後移至 [設定 + 定價] 索引標籤。

  11. 在 [設定 + 定價] 索引標籤中,您會看到 [節點設定] 區段現在具有標題為每個背景工作角色節點的進階磁碟的明細項目。

  12. 選擇將 [區域節點] 設為 10,並將 [節點大小] 設為 DS14v2 (您可以選擇較少 VM 和較小的 VM SKU,但請確定兩個叢集必須有相同數目的節點和 VM SKU,以確保比較時的同位性)

    Configuring nodes in Azure HDInsight in the Azure Portal.

  13. 按 [下一步:檢閱 + 建立]

  14. 在 [檢閱及建立] 索引標籤中,確定已在 [儲存體] 區段底下啟用 [HBase 加速型寫入]

    Azure HDInsight validation in the Azure Portal.

  15. 按一下 [建立],開始部署具有加速型寫入的第一個叢集。

  16. 再次重複相同的步驟以建立第二個 HDInsight HBase 叢集,但這次不具加速型寫入。 請注意下列變更

    • 使用預設建議的一般 Blob 儲存體帳戶

    • 在 [儲存體] 索引標籤上,將 [啟用加速型寫入] 核取方塊保留為未勾選。

      Screenshot shows Enable Accelerated Writes checkbox unchecked, in the Create H D Insight cluster page.

  17. 在此叢集的 [設定 + 定價] 索引標籤中,您會看到 [節點設定] 區段沒有 [每個背景工作節點的進階磁碟] 明細項目。

  18. 選擇將 [區域節點] 設為 10,並將 [節點大小] 設為 DS14v2。(另請注意和先前一樣缺少 DS 系列 VM 類型的狀況)。 (您可以選擇較少 VM 和較小的 VM SKU,但請確定兩個叢集必須有相同數目的節點和 VM SKU,以確保比較時的同位性)

    Configure nodes on Azure HDInsight in the Azure Portal.

  19. 按一下 [建立],開始部署不具加速型寫入的第二個叢集。

  20. 現在我們已完成叢集部署,在下一節中,我們將在這兩個叢集上設定和執行 YCSB 測試。

執行 YCSB 測試

  1. 登入 HDInsight 殼層

    • 在兩個叢集上設定和執行 YCSB 測試的步驟都相同。

    • 在 Azure 入口網站的 [叢集] 頁面上,瀏覽至 [SSH + 叢集登入],並使用主機名稱和 SSH 路徑透過 SSH 連線至叢集中。 路徑應具有下列格式。

    • ssh <sshuser>@<clustername>.azurehdinsight.net

      Connecting to the Azure HDInsight cluster in the Azure Portal.

  2. 建立資料表

    • 執行下列步驟建立 HBase 資料表,用以載入資料集

    • 啟動 HBase 殼層,並設定資料表分割數目的參數。 設定資料表分割 (10 * 區域伺服器數目)

    • 建立用來執行測試的 HBase 資料表

    • 結束 HBase 殼層

        hbase(main):018:0> n_splits = 100
        hbase(main):019:0> create 'usertable', 'cf', {SPLITS => (1..n_splits).map {|i| "user#{1000+i*(9999-1000)/n_splits}"}}
        hbase(main):020:0> exit
      
  3. 下載 YSCB 存放庫

    • 從下列目的地下載 YCSB 存放庫

        $ curl -O --location https://github.com/brianfrankcooper/YCSB/releases/download/0.17.0/ycsb-0.17.0.tar.gz 
      
    • 將資料夾解壓縮以存取其內容

        $ tar xfvz ycsb-0.17.0.tar.gz 
      
    • 這會建立 ycsb-0.17.0 資料夾。 移至此資料夾中

  4. 在兩個叢集中執行大量寫入工作負載

    • 使用下列命令搭配以下參數,起始大量寫入工作負載

      • workloads/workloada:表示需要執行附加 workload/workloada

      • 資料表:填入您先前建立的 HBase 資料表名稱

      • columnfamily:從您已建立之資料表中的 HBase columfamily 名稱的值

      • recordcount:要插入的記錄數目 (我們使用 100 萬)

      • threadcount:執行緒數目 (可能會不同,但在不同實驗間需保有持續性)

      • -cp /etc/hbase/conf:HBase 組態設定的指標

      • -s | tee -a:提供用以寫入輸出的檔案名稱。

          bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat
        
    • 執行大量寫入工作負載,將 100 萬個資料列載入至先前建立的 HBase 資料表。

    注意

    略過您在提交命令後可能會看到的警告。

具有加速型寫入的 HDInsight HBase 的範例結果

  1. 執行以下命令:

     ```CMD
     $ bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat 
     ```
    
  2. 讀取結果:

     ```CMD
     2020-01-10 16:21:40:213 10 sec: 15451 operations; 1545.1 current ops/sec; est completion in 10 minutes [INSERT: Count=15452, Max=120319, Min=1249, Avg=2312.21, 90=2625, 99=7915, 99.9=19551, 99.99=113855]
     2020-01-10 16:21:50:213 20 sec: 34012 operations; 1856.1 current ops/sec; est completion in 9 minutes [INSERT: Count=18560, Max=305663, Min=1230, Avg=2146.57, 90=2341, 99=5975, 99.9=11151, 99.99=296703]
     ....
     2020-01-10 16:30:10:213 520 sec: 972048 operations; 1866.7 current ops/sec; est completion in 15 seconds [INSERT: Count=18667, Max=91199, Min=1209, Avg=2140.52, 90=2469, 99=7091, 99.9=22591, 99.99=66239]
     2020-01-10 16:30:20:214 530 sec: 988005 operations; 1595.7 current ops/sec; est completion in 7 second [INSERT: Count=15957, Max=38847, Min=1257, Avg=2502.91, 90=3707, 99=8303, 99.9=21711, 99.99=38015]
     ...
     ...
     2020-01-11 00:22:06:192 564 sec: 1000000 operations; 1792.97 current ops/sec; [CLEANUP: Count=8, Max=80447, Min=5, Avg=10105.12, 90=268, 99=80447, 99.9=80447, 99.99=80447] [INSERT: Count=8512, Max=16639, Min=1200, Avg=2042.62, 90=2323, 99=6743, 99.9=11487, 99.99=16495]
     [OVERALL], RunTime(ms), 564748
     [OVERALL], Throughput(ops/sec), 1770.7012685303887
     [TOTAL_GCS_PS_Scavenge], Count, 871
     [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 3116
     [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.5517505152740692
     [TOTAL_GCS_PS_MarkSweep], Count, 0
     [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
     [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
     [TOTAL_GCs], Count, 871
     [TOTAL_GC_TIME], Time(ms), 3116
     [TOTAL_GC_TIME_%], Time(%), 0.5517505152740692
     [CLEANUP], Operations, 8
     [CLEANUP], AverageLatency(us), 10105.125
     [CLEANUP], MinLatency(us), 5
     [CLEANUP], MaxLatency(us), 80447
     [CLEANUP], 95thPercentileLatency(us), 80447
     [CLEANUP], 99thPercentileLatency(us), 80447
     [INSERT], Operations, 1000000
     [INSERT], AverageLatency(us), 2248.752362
     [INSERT], MinLatency(us), 1120
     [INSERT], MaxLatency(us), 498687
     [INSERT], 95thPercentileLatency(us), 3623
     [INSERT], 99thPercentileLatency(us), 7375
     [INSERT], Return=OK, 1000000
     ```
    
  3. 探索測試的結果。 上述結果中的某些範例觀察可能包含:

    • 執行測試花費了 538663 毫秒 (8.97 分鐘)
    • Return=OK, 1000000 表示 100 萬個輸入全都已成功寫入,**
    • 寫入輸送量為每秒 1856 個作業
    • 95% 的插入有 3389 毫秒的延遲
    • 少數插入耗費較多時間,可能是因工作負載較高而遭到區域伺服器封鎖所致

不具加速型寫入的 HDInsight HBase 的範例結果

  1. 執行以下命令:

     $ bin/ycsb load hbase12 -P workloads/workloada -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloada.dat 
    
  2. 讀取結果:

     2020-01-10 23:58:20:475 2574 sec: 1000000 operations; 333.72 current ops/sec; [CLEANUP: Count=8, Max=79679, Min=4, Avg=9996.38, 90=239, 99=79679, 99.9  =79679, 99.99=79679] [INSERT: Count=1426, Max=39839, Min=6136, Avg=9289.47, 90=13071, 99=27535, 99.9=38655, 99.99=39839]
     [OVERALL], RunTime(ms), 2574273
     [OVERALL], Throughput(ops/sec), 388.45918828344935
     [TOTAL_GCS_PS_Scavenge], Count, 908
     [TOTAL_GC_TIME_PS_Scavenge], Time(ms), 3208
     [TOTAL_GC_TIME_%_PS_Scavenge], Time(%), 0.12461770760133055
     [TOTAL_GCS_PS_MarkSweep], Count, 0
     [TOTAL_GC_TIME_PS_MarkSweep], Time(ms), 0
     [TOTAL_GC_TIME_%_PS_MarkSweep], Time(%), 0.0
     [TOTAL_GCs], Count, 908
     [TOTAL_GC_TIME], Time(ms), 3208
     [TOTAL_GC_TIME_%], Time(%), 0.12461770760133055
     [CLEANUP], Operations, 8
     [CLEANUP], AverageLatency(us), 9996.375
     [CLEANUP], MinLatency(us), 4
     [CLEANUP], MaxLatency(us), 79679
     [CLEANUP], 95thPercentileLatency(us), 79679
     [CLEANUP], 99thPercentileLatency(us), 79679
     [INSERT], Operations, 1000000
     [INSERT], AverageLatency(us), 10285.497832
     [INSERT], MinLatency(us), 5568
     [INSERT], MaxLatency(us), 1307647
     [INSERT], 95thPercentileLatency(us), 18751
     [INSERT], 99thPercentileLatency(us), 33759
     [INSERT], Return=OK, 1000000
    
  3. 比較結果:

    參數 Unit 具有加速型寫入 不具加速型寫入
    [OVERALL], RunTime(ms) 毫秒 567478 2574273
    [OVERALL], Throughput(ops/sec) 作業/秒 1770 388
    [INSERT], Operations 作業數目 1000000 1000000
    [INSERT], 95thPercentileLatency(us) 微秒 3623 18751
    [INSERT], 99thPercentileLatency(us) 微秒 7375 33759
    [INSERT], Return=OK 記錄數目 1000000 1000000
  4. 可由比較組成的範例觀察包括:

    • [OVERALL], RunTime(ms):總執行時間 (毫秒)
    • [OVERALL], Throughput(ops/sec):所有執行緒間每秒作業數
    • [INSERT], Operations:插入作業總數,下方還有相關聯的平均值、最小值、最大值、第 95 個和第 99 個百分位數延遲
    • [INSERT], 95thPercentileLatency(us):95% 的插入作業具有低於此值的資料點
    • [INSERT], 99thPercentileLatency(us):99% 的插入作業具有低於此值的資料點
    • [INSERT], Return=OK:Record OK 表示所有插入作業都已成功,並隨附計數
  5. 請考慮嘗試以設定範圍的其他工作負載來進行比較。 範例包含:

    • 大多為讀取 (95% 讀取、5% 寫入):workloadb

      bin/ycsb run hbase12 -P workloads/workloadb -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=100000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloadb.dat
      
    • 唯讀 (100% 讀取、0% 寫入):workloadc

      bin/ycsb run hbase12 -P workloads/workloadc -p table=usertable -p columnfamily=cf -p recordcount=1000000 -p operationcount=100000 -p threadcount=4 -cp /etc/hbase/conf -s | tee -a workloadc.dat