使用冷存储

重要

本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。

阿里云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