HBase 并不快,只是当数据量很大的时候它慢的不明显。
不适合使用 HBase 的场景:
- 主要需求是数据分析,比如做报表。
- 单表数据量不超过千万。
适合使用 HBase 的场景:
- 单表数据量超千万,而且并发还挺高。
- 数据分析需求较弱,或者不需要那么灵活或者实时。
查询,插入,删除数据
client->zookeeper->regionserver
regionserver:存放数据
zookeeper:存储描述信息,比如数据存放在哪个regionserver上,zookeeper挂掉,节点都无法连接
需要一提:查询数据不涉及master,master上只是管理表的结构信息,master挂了依然可以查询,不过表管理的能力会丧失。
master
功能:建表、删表、移动 Region、合并等操作
特性:跨regionserver的操作,单独regionserver无法进行的交给master
好处:master宕机,集群依然可以进行核心工作
重要性:zookeeper>master
压缩器
启用压缩器,建议snappy
hbase> alter 'mytable',{NAME =>'mycf',COMPRESSION=>'snappy'}
共享 Hadoop 内置的压缩器
hbase --config $HBASE_HOME/conf org.apache.hadoop.util.NativeLibraryChecker
报错
util.NativeCodeLoader: Unable to load native-hadoop library for your platform...
using builtin-java classes where applicable
Native library checking:
hadoop: false
zlib: false
snappy: false
1z4: false
bzip2: false
解决方法hbase-env.sh
加入下列语句
export HBASE_LIBRARY_PATH=Hadoop的Native包所在路径
各个压缩器的对比
Snappy 是 Google 开发的压缩器,有以下特点:
快速:压缩速度达到 250MB/s;
稳定:已经用于 Google 多个产品长达数年;
健壮:Snappy 的解压器可以保证在数据被损坏的时候也不会太糟;
免费开源。
安装完成后,需要在hbase-env.sh
加入下面的语句:
export HBASE_LIBRARY_PATH=编码器so文件所在路径:$HBASE_LIBRARY_PATH
GZ 压缩器
一般情况下如果不是对速度要求很低的归档文件,一般不建议使用GZ压缩器,GZ 压缩器的特点:
GZ 压缩器拥有最高的压缩比;
速度较慢,占用较多CPU;
安装简单。
Java 已经自带了一个 GZ 压缩器,所以 GZ 压缩器虽然不是性能最好的,但是却是最容易使用的,你什么都不需要设置,只需要直接修改列族的 COMPRESSION 属性为 GZ 即可。
alter test1',{NAME=>'mycf',COMPRESSION=>'GZ'}
LZO 压缩器
LZ4 的特点:
拥有低丢失率;
速度很快,可以达到400M/s每核。
LZ4 比 Snappy 更快,LZ4 压缩器已经集成在 libhadoop.so 中,所以只需要让 HBase 加载Hadoop 自带的原生库即可。
数据块编码和压缩器在以后建表时候还是可以考虑的,官方推荐的 Snappy 压缩器以及前缀编码都是即简单又有效的调优方法。