分布式数据库HBase
一、HBase简介(基于bigtable):
bigtable的用处: bigtable支持pb级别数据,高可扩展性,可扩展到几千个服务器的分布式存储。存储非结构化和半结构化数据。
bigtable的原理:
HBase相比于关系型数据库具备自动分片能力、良好的水平可扩展性。
二、HBase数据模型
HBase由行键、列族,列限定符,时间戳四个元素组成。旧的版本保留,新的生成时间错,列族为存储的基本单元。四个元素维度定位唯一数据。
HBase概念视图和物理视图:
面向行存储:
**优点:**每次写入一个完记录,事务型操作多优势。
**缺点:**去除某列时不得不扫描整行数据。因此做分析时代价很高,因为分析时都是针对一列分析。HBase一般应用于列的分析高效。
二、HBase实现原理
客户端一般不从master上存取数据,而是从master上获取region的位置信息,然后再直接和相应的region服务器获取数据。
自动拆分只是改写指向信息,region最佳大小一般在1g到2g,大小取决于单台服务器的有效处理能力,一个region不会被拆分到不同的region服务器上去。一台region服务器大概存储10到1000个region
加速寻址,缓存地址信息,再次寻址解决缓存失效。
三、HBase运行机制
一个region服务器由一个日志Hlog管理,每个store都是一个列族。先写入memstore缓存,再写入storefile中。
用户写数据过程:
照顾到一般服务时的写快捷,一台服务器多个region共用一个hlog,故障发生概率比较低。
HBase应用方案
- 1.时间戳排序,最近数据最快命中。
- 2.设置最大版本数,只保存最新数据设置为1即可。
- 3.设置timetolive,过期自动清除。
- 4.ambari可以监控HBase运行情况。
- 5.可以借助Hive或者phoenix的sql引擎整合HBase操作。
- 6.原生的HBase不支持对其他列构建索引,引入coprocessor机制构建二级索引,一旦有更新数据就通过observer同步更新索引。为了节省类似频繁操作带来的开销,将索引缓存写入Redis数据库中。通过solr构建针对其他列的索引。
- 7.启动hadoop再启动HBase,关闭顺序相反。zookeeper负责集群管理。
编程实践
将HBase的lib下所有的jar考入java工程。关闭连接是先关闭admin后关闭connection,包裹在try catch中。
整体代码架构
HBase创建表
HBase添加数据