阿里云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中,可以显示某一张表的冷存储使用大小和热存储使用大小。