网站建设分金手指排名一,wordpress 系统,企业网站seo模板,国家示范校建设网站HBase非关系型数据库 1 什么是HBase2 HBase的特点3 什么时候需要HBase4 HBase的数据模型5 HBase架构5.1 架构5.2 HBase如何列式储存 6 如何正确设计RowKey 1 什么是HBase
HBase – Hadoop Database#xff0c;是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据… HBase非关系型数据库 1 什么是HBase2 HBase的特点3 什么时候需要HBase4 HBase的数据模型5 HBase架构5.1 架构5.2 HBase如何列式储存 6 如何正确设计RowKey 1 什么是HBase
HBase – Hadoop Database是一个高可靠性、高性能、面向列、可伸缩、 实时读写的分布式数据库。HBase是一个NoSQL数据库把数据存在HDFS上低成本来存储海量的数据并且支持高并发随机写和实时查询。 HBase 的原型: Google 的 BigTable 论文
2 HBase的特点
大一个表可以有数百亿行百万列 无模式每行都有一个可排序的主键和任意多的列列可以根据需要动态的增加同一张表中不同的行可以有截然不同的列 面向列面向列族的存储和权限控制列族独立检索 稀疏空null列并不占用存储空间表可以设计的非常稀疏 数据多版本每个单元中的数据可以有多个版本默认情况下版本号自动分配是单元格插入时的时间戳 数据类型单一HBase中的数据都是字符串没有类型
3 什么时候需要HBase
为海量数据而生在需要实时读写、随机访问超大规模数据集时可以使用HBase。但是不支持随机修改查询效率低对小文件支持不友好。
其他储存为什么不行 MySQL是单机的。MySQL能存储多少数据取决于那台服务器的硬盘大小。 Kafka可以存储很大的数据且是分布式的很方便的扩展。但是持久化了的数据最常见的用法就是重新设置offset做「回溯」无法单独查询某个数据。 Redis是缓存数据库所有的读写都在内存中速度快。AOF/RDB存储的数据都会加载到内存中Redis不适合存大量的数据因为内存太贵了 Elasticsearch是一个分布式的搜索引擎主要用于检索。理论上Elasticsearch也是可以存储海量的数据分布式我们也可以将数据用『索引』来取出来。但是如果我们的数据没有经常「检索」的需求其实不必放到Elasticsearch数据写入Elasticsearch需要分词无疑会浪费资源。 每个column family存储在HDFS上的一个单独文件中空值不会被保存。Row Key 和 Version number在每个 column family中均有一份 HBase 为每个值维护了多级索引即Rowkey, column family, column name, timestamp。逻辑数据模型中空白cell在物理上是不存储的因为根本没有必要存储但是如果不指明时间将会返回最新时间的行每个最新的都会返回。
4 HBase的数据模型 HBase表的每一行中列的组成都是灵活的行与行之间的列不需要相同一个列族下可以任意添加列不受任何限制 数据写到HBase的时候都会被记录一个时间戳这个时间戳被我们当做一个版本。比如说我们修改或者删除某一条的时候本质上是往里边新增一条数据记录的版本加一了而已。在读的时候按照时间戳读最新的记录。在外界「看起来」就是把这条记录改了。 HBase本质上其实就是Key-Value的数据库Key由RowKey(行键)ColumnFamily列族Column Qualifier列修饰符TimeStamp时间戳–版本KeyType类型组成而Value就是实际上的值。
5 HBase架构
5.1 架构 1、Client客户端它提供了访问HBase的接口并且维护了对应的cache来加速HBase的访问。 2、Zookeeper存储HBase的元数据meta表无论是读还是写数据都是去Zookeeper里边拿到meta元数据告诉给客户端去哪台机器读写数据 3、HRegionServer它是处理客户端的读写请求负责与HDFS底层交互是真正干活的节点。 大致的流程client请求到Zookeeper然后Zookeeper返回HRegionServer地址给clientclient得到Zookeeper返回的地址去请求HRegionServerHRegionServer读写数据后返回给client。
4、写数据的时候是先写到内存见下面的Store内为了防止机器宕机内存的数据没刷到磁盘中就挂了。我们在写Mem store的时候还会写一份HLog。 5、HMaster会处理 HRegion 的分配或转移。如果我们HRegion的数据量太大的话HMaster会对拆分后的Region重新分配RegionServer。如果发现失效的HRegion也会将失效的HRegion分配到正常的HRegionServer中HMaster会处理元数据的变更和监控RegionServer的状态。
RegionServer 为 Region 的管理者其实现类为 HRegionServer主要作用如下: 对于数据的操作get, put, delete对于 Region 的操作splitRegion、compactRegion。 Master 是所有 RegionServer 的管理者其实现类为 HMaster主要作用如下 对于表的操作create, delete, alter对于 RegionServer的操作分配 regions 到每个 RegionServer监控每个 RegionServer 的状态负载均衡和故障转移。 Zookeeper 通过 Zookeeper 来做 Master 的高可用、RegionServer 的监控、元数据的入口以及集群配置的维护等工作。HDFS 为 HBase 提供最终的底层数据存储服务同时为 HBase 提供高可用的支持。
5.2 HBase如何列式储存
HRegion HBase一张表的数据会分到多台机器上。用RowKey来切分到不同的HRegionHRegion属于某个HRegionServer一个HRegionServer可以有多个HRegionStore HRegion下面有Store一个列族的数据存储在一个Store。
所以在物理存储层面一个列族的数据是存储在一起的 – HBase是基于列族存储的。
Store内 HBase在写数据的时候会先写到MemStore当MemStore超过一定阈值就会将内存中的数据刷写到硬盘上形成StoreFile而StoreFile底层是以HFile的格式保存HFile是HBase中KeyValue数据的存储格式。 所以说MemStore我们可以理解为内存 bufferHFile是HBase实际存储的数据格式而StoreFile只是HBase里的一个名字。
6 如何正确设计RowKey
RowKey是会按字典序排序的我们HBase表会用RowKey来横向切分表。无论是读和写我们都是用RowKey去定位到HRegion然后找到HRegionServer。定位HRegionServer的时候实际上就是定位我们这个RowKey在不在这个HRegion的start-key和end-key范围之内如果在说明我们就找到了。
在HBase里边提供了三种的查询方式
全局扫描根据一个RowKey进行查询 对RowKey散列分配到HRegion的时候就比较均匀要避免热点的问题。根据RowKey过滤的范围查询