全部產品
Search
文件中心

ApsaraDB for HBase:使用冷儲存

更新時間:Jul 06, 2024

阿里雲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增強版叢集時,可在購買頁面選擇是否選購冷儲存和冷儲存的容量請參考購買叢集

方式二:

  1. 登入HBase管理主控台

  2. 叢集列表頁面,單擊叢集執行個體名稱,進入叢集詳情頁。

  3. 在左側導覽列選擇冷儲存

  4. 單擊立即開通

警告
  • 開通過程中業務訪問可能會發生抖動,建議您在業務低峰期操作。

  • 只有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中,可以顯示某一張表的冷儲存使用大小和熱儲存使用大小。User table