大理网站推广,贵阳做网站好的公司,台州企业网站,无锡网络公司找哪家一、HBase简介1、Apache HBase™是Hadoop数据库#xff0c;是一个分布式#xff0c;可扩展的大数据存储。2、当您需要对大数据进行随机#xff0c;实时读/写访问时#xff0c;请使用Apache HBase™。 该项目的目标是托管非常大的表#xff08; 数十亿的行*百万的列 #…一、HBase简介1、Apache HBase™是Hadoop数据库是一个分布式可扩展的大数据存储。2、当您需要对大数据进行随机实时读/写访问时请使用Apache HBase™。 该项目的目标是托管非常大的表 数十亿的行*百万的列 在商品硬件集群上。 Apache HBase是一个开源的分布式的版本化的非关系数据库3、利用Hadoop HDS 作为其文件存储系统利用Hadoop MapReduce来处理HBASE中的海量数据利用ZOOKEEPER作为其分布式协同服务4、主要用来存储非结构化和半结构化的松散数据二、HBASE数据模型1、Rowkeyrowkey类似于关系型数据库的主键是一行记录的唯一标识。rowkey是按照字典序自动排序的rowkey只能存储64K的字节数据2、Column Family列族 CFHBase表中的每个列都归属于某个列族列族必须作为表模式(schema)定义的一部分预先给出。如 create ‘test’, ‘course’列名以列族作为前缀每个“列族”都可以有多个列成员(column)如course:math, course:english, 新的列族成员列可以随后按需、动态加入权限控制、存储以及调优都是在列族层面进行的HBase把同一列族里面的数据存储在同一目录下由几个文件保存。3、Timestamp时间戳在HBase一份数据有多个版本根据唯一的时间戳来区分每个版本之间的差异不同版本的数据按照时间倒序排序最新的数据版本排在最前面。时间戳的类型是64位整形时间戳可以在数据写入时由HBase自动赋值也可以人员手动指定4、cell单元格cell单元格是由行和列的交叉坐标决定的cell单元格是由版本的cell单元格中的内容 由{row key column( family qualifier) version} 唯一确定的单元cell中存储的数据是没有类型的全部由字节数组组成也就是说HBASE中的数据是没有类型的全都是字节数组三、HBase的预写日志WAL因为HBase是实时读写的数据库所以我们在操作数据的时候会把数据先放在内存中当内存中的数据达到一定量的时候才会落盘。但数据放在内存中是有一定的风险的比如掉电之后内存中的数据就会丢失。为了防止这种情况HBase中加入了WALwrite ahead log预写日志机制每个数据的写入操作PUT/DELETE执行前必须先通过WAL记账。先将数据写入Hlog文件如果写入失败则写入操作失败。Hlog位于RegionServer中每个RegionServer维护一个Hlog。WAL的作用是灾难恢复一旦服务器崩溃或者数据被误删则通过log日志重放可以恢复事故数据。WAL如此重要所以默认是开启的四。HBase架构HBase架构的角色1、client包含HBase的接口并维护cache来加快对hbase的访问2、zookeeper保证任何时候集群中只有一个活跃的HMaster存储所有的Region的寻址入口实时监控所有HRegionServer的上下线消息并通知HMaster3、HMasterHMaster是没有单点故障的因为集群中可以有多个HMaster但是通过zookeeper的分布式协同服务保障有且只有一个活跃的HMaster对外提供服务。HMaster负责为RegionServer分配region。负责RegionServer的负载均衡。发现失效的RegionServer并重新分配其上的region。管理用户对table的增删改操作。4、HRegionServerRegionServer维护Region处理对这些Region的I/O请求。RegionServer负责切分在运行过程中逐渐变得过大的region。HRegionServer中的组件1、regionHBase自动把表水平划分成多个区域region每个region会保存一个表里面某段连续的数据。也就是说一个大表被切成很多小份每个小份是一个region。每个表一开始只有一个region随着数据的不断插入region不断增大。当region增大到某个阈值的时候region就会等分为两个新的region裂变。当table中的行不断增多就会有越来越多的region。这样一张完整的表就被 保存在多个RegionServer上。region是HBase中分布式存储和负载均衡的最小单元。最小单元就表示不同的region可以分布在不同的HRegionServer上。2、store一个region有多个store组成每个store对应一个CF列族。store中包含位于内存中的memstore和位于磁盘的storefile。3、memstore与storefile每当进行写操作时写操作会先进入memstore当memstore中的数据到达某个阈值HRegionServer会启动flashcache进程将数据写到storefile每次写入形成一个单独的storefile。当storefile文件数量达到一定阈值后系统会进行合并在合并过程中会进行版本合并和删除工作形成各大的storefile。当一个region所有的storefile的大小和数量达到一定的阈值后会把当前的region分割为两个并有HMaster分配到不同的RegionServer服务器实现负载均衡。storefile以Hfile的格式存储在HDFS上。客户端检索数据先到memstore中找找不到再到blockcache再找不到去storefile五、HBase的读写流程0.98以后版本写请求客户端在进行写请求的时候。首先会访问zookeeper因为zookeeper中存储着HBase元数据meta所在节点的信息HBase的元数据在某个RegionServer中存储但是存储元数据的RegionServer的信息保存在zookeeper中。客户端拿到元数据所在节点后访问相应节点的RegionServer拿到元数据。最后根据元数据找到要操作的region。但是找到region后不是先往memstore中写。而是要先写入WAL预写日志的hlog中写入hlog成功后会有一个异步侧线程sync这个线程会实时检测hlog中有没有数据如果有直接落盘只有往hlog中写入成功了才能接着往memstore中写。当memstore中的数据到达某个阈值HRegionServer会启动flashcache进程将数据写到storefile每次写入形成一个单独的storefile。当storefile文件数量达到一定阈值后系统会进行合并在合并的时候会对数据排序同时在合并过程中会进行版本合并和删除工作形成各大的storefile。合并的方式有两种分别是minor和major。minor默认是3~10个storefile进行合并。major则是将当前目录下的所有的storefile合并。注意在文件合并的时候是不提供服务的。因为minor是3~10个文件进行合并所以占用资源少速度快。所以我们一般使用minor。而major因为熟读慢所以我们一般不用用也是手动进行。当一个region所有的storefile的大小和数量达到一定的阈值后会把当前的region分割为两个并有HMaster分配到不同的RegionServer服务器实现负载均衡。读请求客户端在进行读请求的时候。寻找region的过程几乎与写请求相同。首先在zookeeper中找元数据在哪个RegionServer中存储然后找到RegionServer拿到元数据然后根据元数据找相应的region。在region中寻找数据的过程如下首先会在region的memstore中寻找如果被查找的记录是刚刚通过写请求写入的还没被写入storefile那么查找成功。如果没有找到则到blockcache读缓存中找找到返回。找不到会继续深入到storefile中查找注意如果是在storefile中找到的并不会立即返回而是要先将数据写入blockcache中方便下次查找写入成功后返回数据。但是这样存在一个问题那就是随着读请求的增多blockcache会不断变大。为了防止这种情况系统采用最近最少使用算法LRU来维护blockcache。blockcache位于RegionServer中一个RegionServer维护一个blockcache。