hbase学习笔记8-管理模块
主要介绍Hbase提供的管理(Administrative)模块,可以让我们完成类似RDBMS中的DDL操作,即,表定义、管理表结构、管理集群状态等。下面介绍的API都出自HBaseAdmin对象。
一、表定义
在Hbase的API中,代表一个表结构的类叫HTableDescriptor。
HTableDescriptor(String name)
HTableDescriptor(byte[] name)
一个Hbase的表有许多的关键性的属性,可以再HTableDescriptor中指定,下面我们将逐一介绍。
簇(Column Family),这是表的基本属性,一个簇代表很多列的集合,Hbase可以有成百万上千万的列,这些列并不需要我们预定义好,在定义表的时候我们只需要指定列簇,而列则可以在插入数据的时候临时加入。
最大文件大小(Maximum file size),Hbase是基于HDFS的,底层也是一个一个的文件,当数据过多,Hbase底层的文件将会变得过大,这时Hbase就会自动的分裂这个文件,这个属性指定的是底层文件分裂的阀值。关于文件分裂涉及到性能调优等问题,这些会在后面详细介绍。
只读(Read-Only), 默认的所有的表都是可读可写的,当然,如果有需求,我们可以把表定义为只读,这时表就不可写了。
缓存大小(Memstore Flush Size),并不是每一个请求被提交到RegionServer后都会立刻引起磁盘IO,服务器端有一个缓存,当达到缓存的阀值以后才会引起磁盘IO。内存操作比磁盘操作要快很多,所以,设置一个很大的缓存可以提高操作性能,但是过大的缓存也会引起问题,当触发写磁盘的操作以后要一次性写入大量的缓存,这将花费很长的时间,这段时间服务器将不可用。
协处理器,定义表的时候可以指定协处理器,这点已经在上一篇有过介绍。
void addFamily(HColumnDescriptor family);
boolean hasFamily(byte[] c);
HColumnDescriptor[] getColumnFamilies();
long getMaxFileSize();
void setMasxFileSize(long maxFileSize);
boolean isReadOnly();
void setReadOnly(boolean readOnly);
long getMemStoreFlushSize();
void setMemStoreFlushSize(long memStoreFlushSize)
String getValue(String key);
void setValue(String key, String value);
在添加簇的API中我们可以看到Hbase中代表簇的对象是HColumnDescriptor。
簇也有一些属性需要我们来了解。
最大版本数(Max Versions),最大版本数定义了簇内列的最大的版本数。
压缩(Compression),定义数据时候压缩,用什么方式压缩。
块大小和块缓存,这是涉及调优方面的属性。
TTL, 版本数据存活的时间。
二、表结构管理
表操作包括表的增删查改。
新创建一个表,需要我们创建一个HTableDescriptor实例作为参数,Hbase就可以根据类中的信息来创建一个表。另外,创建表操作中我们可以手动的指定key和region server分布的映射,当然,这个操作也可以叫给Hbase自动完成。
void creatTable(HTableDescriptor desc)
void creatTable(HTableDescriptor desc, byte[] startkey, byte[] endkey, int numRegions)
void creatTable(HTableDescriptor desc, byte[][] splitKeys)
void creatTableAsync(HTableDescriptor desc, byte[][] splitKeys)
第二个方法就是指定开始和结束的key和要分的region数量,Hbase会根据参数来计算key的区间和region的映射;第三个方法是直接指定区间的分界点;第四个方法是一个同步的方法。创建操作本身是一个异步的操作,这个同步的方法是简单在异步的基础上循环检测操作有没有执行完成。
除了创建之外,还可以删除和暂停(Disable)表,在删除一个表之前,必须要先暂停。暂停可能要花费一定的时间,因为暂停的操作将强制刷新缓存入磁盘。相应的还有启用表的操作。同创建表一样,暂停和启用的操作也有相应的同步的方法。
void deleteTable(String tableName);
void disableTable(String tableName);
void disableTableAsnc(String tableName);
void enableTale(String tableName);
void enableTableAsnc(String tableName);
表也支持修改,这里主要是对列簇的操作。
void addColumn(String tableName, HColumnDescriptor column);
void deleteColumn(String tableName, String columnName);
void modifyColumn(String tableName, HColumnDescriptor column)
三、集群操作
通过HBaseAdmin对象,我们可以获取到集群中每个RegionServer的信息,例如负载、状态、IP、Port等,还可以对集群进行操作,比如手动的对Region进行分裂,压缩、刷新缓存等。