php使用hbase

哪吒的狗腿子發表於2021-11-04

github.com/aliyun/aliyun-apsaradb-... phpsdkdemo

雲資料庫HBase增強版,是由雲原生多模資料庫Lindorm的寬表引擎雲原生多模資料庫Lindorm的寬表引擎提供的、完全相容HBase的雲上託管資料庫

  1. 問題:正式上線後三天、log每天200G資料寫入到hbase後變成了2TB資料

  2. 排查路線:排查到日誌原始儲存大小和和hbase中記憶體大小差異過大、使用阿里雲shell工具檢視錶結構

  3. 表結構存在問題、遇到大資料量容易崩潰

  4. 沒有設定列簇的壓縮

  5. 沒有設定冷熱儲存

  6. 沒有設定資料過期時間自動刪除機制

  7. 列簇過多設計不合理

  8. 解決方案:

// 設定列簇的壓縮
disable ‘test_logs’
// 刪除列簇
alter ‘test_logs’,’delete’=>’test_info’
// 設定列簇的壓縮
alter ‘test_logs’ ,{NAME=>’test’,COMPRESSION=>’LZ4’,DATA_BLOCK_ENCODING => ‘DIFF’}
// 設定設定冷熱儲存、資料過期時間自動刪除機制
alter ‘test_logs’ , {NAME=>’test’, COLD_BOUNDARY=>’604800’,TTL=>2592000}
// 啟用table
enable ‘test_logs’
// 壓縮編碼並不會立即生效,需要major_compact,此會耗時較長,注意在業務低峰期進行。
major_compact ‘test_logs’

  1. 效果: hbase從1.5TB降到70G左右
  2. COMPRESSION 壓縮演算法方式、DATA_BLOCK_ENCODING 壓縮演算法
  3. 目前阿里雲平臺支援壓縮演算法有: LZO、ZSTD、GZ、LZ4、SNAPPY NONE,其中NONE就代表不開啟壓縮。不同壓縮演算法在不同場景的壓縮比,及解壓速度對比如下,都是來自線上真實場景。
  4. 阿里雲介面文件:help.aliyun.com/document_detail/59...

| 業務型別 | 無壓縮表大小 | LZO(壓縮率/解壓速度MB/s) | ZSTD(壓縮率/解壓速度MB/s) | LZ4(壓縮率/解壓速度MB/s) |
| 監控類 | 419.75T | 5.82/372 | 13.09/256 | 5.19/463.8 |
| 日誌類 | 77.26T | 4.11/333 | 6.0/287 | 4.16/496.1 |
| 風控類 | 147.83T | 4.29/297.7 | 5.93/270 | 4.19/441.38 |
| 消費記錄 | 108.04T | 5.93/316.8 | 10.51/288.3 | 5.55/520.3 |

  1. COLD_BOUNDARY 資料在熱儲存的週期,之後存入冷儲存
  2. TTL 資料過期時間單位(秒)
  3. 存活時間
  4. 列簇可以設定TTL秒數,HBase在超時後將自動刪除資料,HBase裡面TTL時間時區是UTC。

儲存檔案僅包含有過期的行(expired rows),它們可通過minor compaction刪除。將hbase.store.delete.expired.storefile設定為false,可禁用此功能;將最小版本數設定成非0值也可達到同樣的效果。

  1. HBase的最新版本還支援將設定的時間存放在每個結構單元。TTL單元通過Mutation#setTTL作為更變請求(Appends, Increments, Puts, etc.)的一個屬性提交,如果TTL的屬性被設定了,它將會應用到由於該變更操作更新的所有單元上。Cell TTL handling和ColumnFamily TTLs間有兩個顯著的差別:

  2. Cell TTLs的數量級是毫秒而不是秒。

  3. 一個Cell TTL不能超出ColumnFamily TTLs設定的有效時間。

  4. major_compact

  5. 合併檔案

  6. 清除刪除、過期、多餘版本的資料

  7. 提高讀寫資料的效率

  8. 資料什麼時候進冷存?

  9. Lindorm通過compaction機制非同步得將冷資料從熱存中歸檔到冷存,觸發時間預設為冷熱分界的一半,最小為1天。比如您設定冷熱邊界是3天,那麼預設1.5天就會自動觸發一次compaction;如果設定冷熱邊界為1天,後臺會1天觸發一次compaction。

  10. 我可以手動強制觸發compaction嗎?

  11. 可以的,您可以通過HBase shell對錶執行 major_compact ‘tableName’ 命令來強制觸發major compaction,不僅把熱存中的冷資料歸檔到冷存中,同時也會合並所有冷區熱區的檔案。但請不要頻繁使用該命令,它會加重IO負載。

  12. 為什麼我的表冷資料歸檔的慢?

  13. 請檢查您的Lindorm版本,如果版本不大於2.1.20,可以升級到最新的版本,冷資料會根據 1中提到的週期進入冷存。如果您選擇暫緩升級,可以聯絡專家服務來幫您優化引數。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章