在 HBase 中執行效能評定
Yahoo! Cloud Serving Benchmark (YCSB) 是一個開放原始碼規格和程式套件,可用來評估 NoSQL 資料庫管理系統的相對效能。 在此練習中,您將對兩個 HBase 叢集的效能執行效能評定 (其中之一使用加速型寫入功能)。 您的工作是要了解這兩個選項之間的效能差異。 練習必要條件
如果您想要執行練習中的步驟,請確定您具有下列各項:
- 有權建立 HDInsight HBase 叢集的 Azure 訂用帳戶。
- 存取 SSH 用戶端,例如 Putty(Windows)/Terminal(Mac book)
使用 Azure 管理入口網站佈建 HDInsight HBase 叢集
若要在 Azure 管理入口網站上佈建具有新體驗的 HDInsight HBase,請執行下列步驟。
前往 Azure 入口網站。 使用您的 Azure 帳戶認證登入。
我們將從建立進階區塊 Blob 儲存體帳戶開始著手。 在 [新增] 頁面中,按一下 [儲存體帳戶]。
在 [建立儲存體帳戶] 頁面中,填入下列欄位
訂用帳戶:應以訂用帳戶詳細資料自動填入
資源群組:輸入用來保存 HDInsight HBase 部署的資源群組
儲存體帳戶名稱:輸入您的儲存體帳戶名稱,以便在進階叢集中使用。
區域:輸入部署區域的名稱,(請確定叢集與儲存體帳戶位於相同的區域中)
效能:進階
帳戶種類:BlockBlobStorage
複寫:本地備援儲存體 (LRS)
叢集登入使用者名稱:輸入叢集管理員的使用者名稱 (預設值:admin)
將所有其他索引標籤保留為預設值,然後按一下 [檢閱 + 建立] 以建立儲存體帳戶。
在儲存體帳戶建立後,按一下左側的 [存取金鑰],然後複製 key1。 我們稍後將在叢集建立程序中加以使用。
現在,我們將開始部署具有加速型寫入的 HDInsight HBase 叢集。 選取 [建立資源] -> [分析] -> [HDInsight]
在 [基本] 索引標籤上填入下列欄位,以建立 HBase 叢集。
訂用帳戶:應以訂用帳戶詳細資料自動填入
資源群組:輸入用來保存 HDInsight HBase 部署的資源群組
叢集名稱:輸入叢集名稱。 如果叢集名稱可供使用,將會出現綠色勾號。
區域:輸入部署區域的名稱
叢集類型:叢集類型 - HBase。 版本 - HBase 2.0.0(HDI 4.0)
叢集登入使用者名稱:輸入叢集管理員的使用者名稱 (預設值:admin)
叢集登入密碼:輸入叢集登入的密碼 (預設值:sshuser)
確認叢集登入密碼:確認在上一個步驟中輸入的密碼
安全殼層 (SSH) 使用者名稱:輸入 SSH 登入使用者 (預設值:sshuser)
使用 SSH 的叢集登入密碼:勾選此方塊,可在 SSH 登入和 Ambari 登入中使用相同的密碼
按 [下一步:儲存體] 以啟動 [儲存體] 索引標籤,並填入下列欄位
主要儲存體類型:Azure 儲存體。
選取方法:選擇選項按鈕 [使用存取金鑰]
儲存體帳戶名稱:輸入先前建立的進階區塊 Blob 儲存體帳戶的名稱
存取金鑰:輸入您先前複製的 key1 存取金鑰
容器:HDInsight 應該會建議預設的容器名稱。 您可以選擇此名稱,或自行建立名稱。
將其餘選項保持不變,並向下捲動,以勾選 [啟用 HBase 加速型寫入] 核取方塊。(請注意,我們稍後將使用相同的步驟,但不勾選此方塊,建立不具加速型寫入的第二個叢集。)
將 [安全性 + 網路] 刀鋒視窗保留為預設設定而不進行任何變更,然後移至 [設定 + 定價] 索引標籤。
在 [設定 + 定價] 索引標籤中,您會看到 [節點設定] 區段現在具有標題為每個背景工作角色節點的進階磁碟的明細項目。
選擇將 [區域節點] 設為 10,並將 [節點大小] 設為 DS14v2 (您可以選擇較少 VM 和較小的 VM SKU,但請確定兩個叢集必須有相同數目的節點和 VM SKU,以確保比較時的同位性)
按 [下一步:檢閱 + 建立]
在 [檢閱及建立] 索引標籤中,確定已在 [儲存體] 區段底下啟用 [HBase 加速型寫入]。
按一下 [建立],開始部署具有加速型寫入的第一個叢集。
再次重複相同的步驟以建立第二個 HDInsight HBase 叢集,但這次不具加速型寫入。 請注意下列變更
使用預設建議的一般 Blob 儲存體帳戶
在 [儲存體] 索引標籤上,將 [啟用加速型寫入] 核取方塊保留為未勾選。
在此叢集的 [設定 + 定價] 索引標籤中,您會看到 [節點設定] 區段沒有 [每個背景工作節點的進階磁碟] 明細項目。
選擇將 [區域節點] 設為 10,並將 [節點大小] 設為 DS14v2。(另請注意和先前一樣缺少 DS 系列 VM 類型的狀況)。 (您可以選擇較少 VM 和較小的 VM SKU,但請確定兩個叢集必須有相同數目的節點和 VM SKU,以確保比較時的同位性)
按一下 [建立],開始部署不具加速型寫入的第二個叢集。
現在我們已完成叢集部署,在下一節中,我們將在這兩個叢集上設定和執行 YCSB 測試。
執行 YCSB 測試
登入 HDInsight 殼層
在兩個叢集上設定和執行 YCSB 測試的步驟都相同。
在 Azure 入口網站的 [叢集] 頁面上,瀏覽至 [SSH + 叢集登入],並使用主機名稱和 SSH 路徑透過 SSH 連線至叢集中。 路徑應具有下列格式。
ssh <sshuser>@<clustername>.azurehdinsight.net
建立資料表
執行下列步驟建立 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
下載 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 資料夾。 移至此資料夾中
在兩個叢集中執行大量寫入工作負載
使用下列命令搭配以下參數,起始大量寫入工作負載
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 的範例結果
執行以下命令:
```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 ```
讀取結果:
```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 ```
探索測試的結果。 上述結果中的某些範例觀察可能包含:
- 執行測試花費了 538663 毫秒 (8.97 分鐘)
- Return=OK, 1000000 表示 100 萬個輸入全都已成功寫入,**
- 寫入輸送量為每秒 1856 個作業
- 95% 的插入有 3389 毫秒的延遲
- 少數插入耗費較多時間,可能是因工作負載較高而遭到區域伺服器封鎖所致
不具加速型寫入的 HDInsight HBase 的範例結果
執行以下命令:
$ 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
讀取結果:
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
比較結果:
參數 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 可由比較組成的範例觀察包括:
- [OVERALL], RunTime(ms):總執行時間 (毫秒)
- [OVERALL], Throughput(ops/sec):所有執行緒間每秒作業數
- [INSERT], Operations:插入作業總數,下方還有相關聯的平均值、最小值、最大值、第 95 個和第 99 個百分位數延遲
- [INSERT], 95thPercentileLatency(us):95% 的插入作業具有低於此值的資料點
- [INSERT], 99thPercentileLatency(us):99% 的插入作業具有低於此值的資料點
- [INSERT], Return=OK:Record OK 表示所有插入作業都已成功,並隨附計數
請考慮嘗試以設定範圍的其他工作負載來進行比較。 範例包含:
大多為讀取 (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