HBase简介-1

HBase简介

什么是HBase?

谈到HBase,必有五点:

1.基于Google的BigTable论文实现 
2.分布式数据库 
3.列式存储 
4.nosql型 
5.基于HDFS和Zookeeper

为什么要使用HBase?

高效的分布式数据库

高并发写入 
随机读转化为顺序读操作 
列式存储,没有数据绝不会多占一丝空间 
海量数据的存储 
易扩展的分布式构架

社区成熟并得到了大范围的应用实践

HBase作为一个开源的分布式数据库,其社区有大量的工程师进行开发、维护和fix bug,是一个非常成熟的产品,针对各种不同的情况提供了各种不同的工具 
国内外知名大公司的海量业务都在使用HBase,坑人家都帮你踩好了你为什么不用呢~

基本构架

Zookeeper

zk集群管理着HBase的.ROOT表、Master和RegionServer的信息,协调active状态的Master,并为RegionServer提供容灾操作等

Master

通过zk与RegionServer进行交互,管理table和region信息,响应用户的操作

RegionServer

执行用户的IO请求,将其转化为HDFS的读写操作

HBase表属性

在hbase shell或者通过api创建表的时候会有各种各样的属性设置,了解这些属性的意义有助于之后原理的探索

常见表属性

属性名 含义
READONLY 表是否只读
MEMSTORE_FLUSHSIZE 待探究
MAX_FILESIZE 待探究
DEFERRED_LOG_FLUSH 待探究

常见列属性

属性名 含义 常用值/默认值 备注
DATA_BLOCK_ENCODINF 保存key-value数据块的压缩属性 PREFIX_TREE 当列较少,重复内容较少比较不好用
COMPRESSION 最后存储的文件压缩属性 SNAPPY、LZO 最后存储在HDFS上文件的压缩设置
BLOOMFILTER 查找记录时根据指定值判断记录是否存在文件中 NONE,ROW,ROWCOL 三个选项分别对应无,使用RowKey,使用RowKey+列名进行过滤,粒度越细产生的文件越大,可以避免不必要的读取操作
REPLICATION_SCOPE 配置REPLICATION的目标 0 类似mysql的主从同步
VERSIONS 最多保存多少数据版本 1  
TTL Time to leave FOREVER 超过这个设置就会删除最早的版本数据
MIN_VERSIONS 保存的最小的版本数 1  
KEEP_DELETE_CELLS 是否保留删除的数据 false 设置为true则可以继续访问到已删除的数据
BLOCKSIZE 保存数据的数据块大小 65536  
BLOCKCACHE 列族数据是否使用缓存 true  
IN_MEMORY 缓存中是否有较高的优先级 false  

配置文件相关属性

有些配置是早期版本的注意对应

hbase-env.sh

属性名 作用
HBASE_JMX_BASE+HBASE_*_OPTS 开启jmx端口用于debug,可以开发基于jmx的监控
HBASE_LOG_DIR 日志目录
HBASE_PID_DIR hbase进程pid文件保存目录
HBASE_MANAGER_ZK true或者false表示是否使用hbase自带的zk
HBASE_HOME hbase安装目录
HBASE_CONF_DIR hbase配置文件目录
HBASE_HEAPSIZE hbase堆大小

hbase-site.xml

属性名 作用
ipc.server.tcpnodelay/hbase.ipc.server.tcpnodelay ture禁用tcp写缓冲,主要影响心跳的请求,因为会把一定量的tcp请求打包之后才发送
hbase.regionserver.handler.count 100,regionserver响应请求的线程数,和cpu核数比值过高之后意义不太大
hbase.regionserver.metahandler.count 50,处理meta表请求的线程数
hfile.block.cache.size 0.2,缓存占用HBASE_HEAPSIZE的比例,对于随机读操作较多的业务应该调高一点
hbase.regionserverReport.timeout 6000slave和master通信的超时时间,regionserver比较多的时候可以调高
hbase.region.server.missed.report.timeout 60000早期版本的心跳超时时间
dfs.support.broken.append true,早期版本的hdfs需要配置启用append操作
hbase.regionserver.enable.serverside.profiling false,早期版本禁用客户端请求的profile(统计信息等)
hbase.regionserver.results.max.size/hbase.client.keyvalue.maxsize 1073741824,早期版本中result最大返回值
zookeeper.znode.parent+hbase.rootdir zk根节点位置和hbase在hdfs上的根目录,可以在同一个hdfs中启动两个hbase集群
hbase.zookeeper.quorum 建议5或者7个zk
*.port 各类端口
hbase.regions.slop 负载均衡的阈值,(每个节点region平均值-实际节点上的region值)/平均值,计算的值超过阈值就开始负载均衡

log4j.properties

属性名 作用
hbase.log.maxfilesize 256MB,日志文件最大大小
habse.log.maxbackupindex 20,最多保存的日志文件数

Scan中的Filter

HBase在取数据的时候提供了丰富的过滤器操作,种类太多,这里仅给出一个参考的列表,各个过滤器的详细使用将会在之后实践中体现出来

名称 作用
CulomnCountGetFilter 取每行的前n个值
ColumnPaginationFilter 每行从列的byte比较,大于等于offset的列开始去取n个值
CollumnPrefixFilter 取每行的满足列命前缀的列的值
ColumnRangeFilter 取每行列名在指定范围内的值
DependentColumnFilter 指定一个列,过滤结果中与其时间戳不同的列,指定列可以不包含在结果中
FamilyFilter 指定列族过滤
FilterList 过滤器组合,可以将多个过滤器组合起来
FirstKeyOnlyFilter 只取每行的第一个值
FirstKeyValueMatchingQualifiersFilter 只取符合指定列名的第一个值
FuzzyRowFilter 对Rowkey进行模糊匹配,参数需要提供一个List>的参数,第一个byte数组是匹配的模式,第二个为0或者1表示该模式要不要匹配
InclusiveStopFilter 扫描到指定行停止
KeyOnlyFilter 只返回key不返回value,如:rowkey,列族,列名,时间戳
MultiColumnPrefixFilter 可以指定多个列名前缀
PageFilter 分页过滤器
PrefixFilter 指定rowkey的前缀
QualifierFilter 根据列名的比较结果确定是否保存返回值
RowFilter 根据rowkey的比较结果确定是否保留值
ValueFilter 根据值的比较结果确定是否保存该值
SingleColumnValueExcludeFilter/SingleColumnValueFilter 根据指定的列值判断是否保留行
RandomRowFilter 随机过滤行
SkipFilter 包装过滤器,遇到符合的过滤整行
WhileMatchFilter 包装的过滤器,当遇到过滤器的条件时停止扫描
TimestampsFilter 只取指定时间戳

不适用HBase的场景

HBase虽然高效,但是也有其短板所在,在某些场合使用HBase反而不能提高效率,例如: 
由于HBase是列式存储的数据库所以对join、union、group by等关联查询的支持十分薄弱,如果业务大量使用到关联查询,请谨慎考虑 
由于HBase是分布式的数据库所以对事务的支持也十分有限,因为分布式事务很难实现 
由于HBase将随机读操作转化为顺序读所以对于一些高并发随机读的场景也不太适合,因为HBase的底层数据结构支持有限

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值