阿里雲HBase針對冷資料存放區的情境,提供一種新的冷儲存介質,其儲存成本僅為高效雲端硬碟的1/3,寫入效能與雲端硬碟相當,並能保證資料隨時可讀。
背景資訊
使用者可以在購買雲HBase執行個體時選擇冷儲存作為一個附加的儲存空間,並通過建表語句指定將冷資料存放在冷儲存介質上面,同時HBase增強版還基於冷儲存實現了在同一張表內的冷熱分離功能,能夠自動將表中熱資料放到讀寫速度快的熱儲存中,而把不常訪問的資料放到冷儲存中降低成本。
注意事項
冷儲存的讀IOPS能力很低(每個節點上限為25),所以冷儲存只適合低頻查詢情境。
寫入吞吐上,冷儲存和基於高效雲端硬碟的熱儲存相當,可以放心寫入資料。
冷儲存不適合并發大量讀請求,如果有這種行為可能會導致請求異常。
購買冷儲存空間特別大的客戶可以酌情調整 “讀IOPS 能力”,可以工單諮詢。
建議平均每個core節點管理冷資料不要超過30T。如果需要單個core節點管理更巨量資料量的冷資料,可以工單諮詢最佳化建議。
前提條件
HBase增強版2.1.8版本以上才支援冷儲存,如果低於此版本在開通過程中會自動升級到最新版本,用戶端依賴要求AliHBase-Connector 1.0.7/2.0.7以上,Shell要求alihbase-2.0.7-bin.tar.gz以上。
使用情境
冷儲存適用於資料歸檔、訪問頻率較低的歷史資料等各種冷資料情境。
開通冷儲存
方式一:建立HBase增強版叢集時,可在購買頁面選擇是否選購冷儲存和冷儲存的容量請參考購買叢集。
方式二:
登入HBase管理主控台。
在叢集列表頁面,單擊叢集執行個體名稱,進入叢集詳情頁。
在左側導覽列選擇冷儲存。
單擊立即開通。
開通過程中業務訪問可能會發生抖動,建議您在業務低峰期操作。
只有HBase增強版2.1.8版本以上才支援冷儲存,如果低於此版本在開通過程中會自動升級到最新版本。
使用冷儲存
HBase增強版支援在ColumnFamily(列簇)層級設定儲存屬性。可以將表的某個列簇(或者所有列簇)的Storage設為冷儲存。一旦設定為冷儲存後,那麼這個表中該列簇(或者所有列簇)的資料,都會儲存在冷儲存中,並不會佔用該叢集的HDFS空間。設定的方法可以在建表時指定,也可以在建好表後,對列簇的屬性進行修改。
建表和修改表屬性均可以使用Java API和HBase Shell完成,在使用Java API前請按照使用Java API訪問增強版叢集文檔完成Java SDK安裝和參數配置。在使用HBase Shell前,請按照使用HBaseue Shell訪問增強版叢集文檔完成Shell的下載和配置。
建表時指定冷儲存
HBase Shell
hbase(main):001:0> create 'coldTable', {NAME => 'f', STORAGE_POLICY => 'COLD'}
Java API
Admin admin = connection.getAdmin();
HTableDescriptor descriptor = new HTableDescriptor(TableName.valueOf("coldTable"));
HColumnDescriptor cf = new HColumnDescriptor("f");
cf.setValue("STORAGE_POLICY", AliHBaseConstants.STORAGETYPE_COLD);
descriptor.addFamily(cf);
admin.createTable(descriptor);
修改表屬性指定冷儲存
如果表已經建立後,可以通過修改表中列簇的屬性來設定冷儲存的列簇。如果這個列簇中已經有資料,那麼只有在major compaction之後,資料才會進入到冷儲存。
HBase Shell
hbase(main):011:0> alter 'coldTable', {NAME=>'f', STORAGE_POLICY => 'COLD'}
Java API
Admin admin = connection.getAdmin();
TableName tableName = TableName.valueOf("coldTable");
HTableDescriptor descriptor = admin.getTableDescriptor(tableName);
HColumnDescriptor cf = descriptor.getFamily("f".getBytes());
// 設定表的儲存類型為冷儲存
cf.setValue("STORAGE_POLICY", AliHBaseConstants.STORAGETYPE_COLD);
admin.modifyTable(tableName, descriptor);
更改表屬性為熱儲存
如果表的列儲存類型為冷儲存,想更改為熱儲存,可以通過修改表屬性的方式實現。如果這個列簇中已經有資料,那麼只有在major compaction之後,資料才會回到熱儲存中
HBase Shell
hbase(main):014:0> alter 'coldTable', {NAME=>'f', STORAGE_POLICY => 'DEFAULT'}
Java API
// 建立串連
Admin admin = connection.getAdmin();
TableName tableName = TableName.valueOf("coldTable");
HTableDescriptor descriptor = admin.getTableDescriptor(tableName);
HColumnDescriptor cf = descriptor.getFamily("f".getBytes());
// 設定表的儲存類型為預設儲存,預設儲存為熱儲存
cf.setValue("STORAGE_POLICY", AliHBaseConstants.STORAGETYPE_DEFAULT);
admin.modifyTable(tableName, descriptor);
查看冷儲存使用方式
在控制台的冷儲存介面,可以查看整體的冷儲存使用狀況,並可以單擊冷儲存擴容進行擴容。在叢集管理系統的表Tab中,可以顯示某一張表的冷儲存使用大小和熱儲存使用大小。