码迷,mamicode.com
首页 > 其他好文 > 详细

HBase学习二

时间:2020-02-06 16:53:41      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:let   节点   额外   timestamp   获取   row   创建表   crud   hdf   

  本次记录是用于:SparkStreaming对接Kafka、HBase记录

一、简介

①HBase本身是一个菲关系型数据库,存储数据结构时以key-value结构来进行存储,HBase中的数据是稀疏的。

②基于Hadoop运行,但是HBase的效率在秒级别

③基于列存储:传统行存储方式在查询特定列时,大部分时间花在磁盘寻址;而实际开发中,查询数据往往不是整表查询,往往是查询几列,此时列存储效率就高一些

④HBase中可以设计多个列族,但是一般不超过3个

⑤列族在创建表时需要指定,但是在添加数据时,可以向列族中添加不同的列

⑥HBase本身是基于HDFS进行存储,HDFS的特点是一次写入不能修改。在HBase中,如果修改数据,不是修改最原始的数据而是追加数据,在获取数据时,如果不指定,默认获取最新的(timestamp)数据。时间戳在HBase的数据称之为这个数据的版本VERSION

⑦HBase利用Zookeeper进行管理。HMaster通过Zookeeper监听HRegionServer。这个过程中,HBase自带了一个Zookeeper,如需配置额外的Zookeeper,则需禁用自带的HBase

⑧如果一个HBase集群中启动了多个HMaster,则会按照启动顺序,先启动的节点作为active HMaster,后启动的节点自动为HMaster的备份

⑨当HBase启动时,每个节点都会自动在Zookeeper上注册一个临时节点,在注册临时节点时,注册的不是ip而是主机名

⑩HBase与Hive区别:

  1)HBase是菲关系型数据库,Hive是基于Hadoop的数仓工具

  2)Hive必须基于Hadoop;HBase可以不基于Hadoop,HBase可以脱离Hadoop存在

  3)HBase只提供了基本CRUD能力;Hive提供了大量的函数允许对数据进行ETL过程

  4)HBase存储的数据是稀疏/半结构化的,Hive存储是结构化的数据

  5)HBase针对列操作;Hive针对行操作

二、物理存储

①在HBase中,会将一个Table中的一行或多行划分为一个HRegion,也就意味着一个Table可以认为是由一个或多个HRegion构成,表刚创建时,默认只有一个HRegion

②每个HRegion可以分布到不同的节点(HRegionServer)上,方便表的分布式存储

③随着表的不断扩大,一个HRegion中的数据越来越多,达到一定的限度后,HRegion会裂为均等的两个HRegion

④分裂的限度为10G,这个值可以设置,一般集群中可以将这个值设置在1~20G

⑤HRegion在分裂完成后,这些HRegion会转移到其他节点上从而保证数据的分布式存储

⑥HRegion转移过程对用户是屏蔽的,由HBase自动完成,并且HBase在转移HRegion会考虑负载均衡(尽量保证每个节点的HRegion的个数差不多)

⑦负载均衡是由HMaster控制,HRegion是分布式存储的最小单位,每个HRegionServer上都会存储1到多个HRegion

⑧HRegion不是最小的存储单位,HRegion中包含了1个或多个HStore,每一个列族对应一个HStore

⑨每一个HStore中包含了1个memStore以及0或多个StoreFile

⑩StoreFile落地到HDFS上时,称之为HFile

三、技术细节

1、HRegion

①每一个Table中,将一行或多行分为一个HRegion进行处理

②HRegion在进行存储的时候会记录这个Region所对应的的startRowKey和stopRowKey

③一个HRegion由1个或多个HStore构成,每一个HStore包含一个memStore以及0或多个StoreFile

④每一个HRegion都会分布在不同的节点上(HRegionServer)

⑤每一个HRegionServer按照HBase的设计大概能管理1000个HRegion

2、HMaster

①HMaster是HBase中的管理节点

②HMaster不存在单点故障,因为可以启动多个HMaster,根据启动顺序,先启动的为active HMaster,所有请求走active HMaster,后启动的节点为back-up状态

③active HMaster在启动之后会在Zookeeper上注册一个临时节点/hbase/master,back-up HMaster启动后会在Zookeeper上注册一个临时节点/hbase/backup-masters

④Zookeeper通过心跳机制监控HMaster(HMaster定期向Zookeeper发送信号,维持这个节点,心跳默认时间是180s)

⑤如果active HMaster宕机,则Zookeeper自动触发选举过程,从backup-masters选出一个节点成为active HMaster

⑥active HMaster与backup HMaster之间热备份,backup-HMaster会监控/hbase/HMaster,热备是通过RPC进行

⑦功能:

  1)管理HRegionServer:负责HRegion分配到哪个节点

  2)管理元数据/表结构(增加表/删除表)-表名、列族名、表和列族之间的关系称为元数据

3、Zookeeper在HBase中的作用

①在HBase中作为协调者来使用

②HBase启动时,HMaster和HRegionServer都会到Zookeeper来注册一个临时节点-HMaster注册的节点是/hbase/master,HRegionServer注册是/hbase/rs/xxx

③HMaster并不是直接监控HRegionServer,而是通过Zookeeper监控。HRegionServer定期向Zookeeper发送心跳,HMaster则会监控/hbase/rs/下的子节点是否发生变化。如果发现子节点变少了,则HMaster要将这个节点上数据备份到其他节点上(即HRegionServer的failover)

4、HRegionServer

①用于存储和管理HRegion,每一个HRegionServer都可以管理多个HRegion

②一般会将HRegionServer和DataNode部署在同一个节点上,以满足数据本地化策略

③HRegionServer由WAL、Block Cache以及HRegion构成

  1)WAL---Write Ahead Log

    i:在Hbase的早期版本中教HLog

    ii:在HRegionServer中用于记录操作,当发生写操作(put、deleteall)时,这些操作先记录到WAL中,如果WAL记录成功,则再将这个操作更新到memStore;如果memStore满了会将数据flush到StoreFile中

    iii:这种设计目的:为了失败恢复,如果数据直接写入到memStore中,如果宕机则数据丢失

    iv:WAL文件达到限度后,自动进行roll过程,产生一个新的WAL文件,后续的操作会记录到新的WAL文件中,但不会立即删除旧WAL

    v:当数据持久化到StoreFile时,可以考虑删除WAL文件

    vi:WAL是存储在HDFS中,是利用了Hadoop的sequence file文件的格式来存储的---sequence file是二进制的键值结构的文件。这个文件中的键包含了表名、HRegion、数据编号、timestamp,这个文件的值包含了行键+列族值

    vii:WAL在HRegionServer中只有一个,早期版本只能串行操作,0.94开始才对WAL取了管道技术使得它可以并行操作

  2)Block Cache

    i:在HRegionServer中只有一个,是一个读缓存

    ii:当产生读操作(scan、get)时,会将HRegion读取到的数据缓存到这个block Cache中,这样是为了提高HBase读的效率

    iii:在Block Cache中,为了进一步提高效率,采用“局部性”原理

      1:时间局部性:当数据被读取后,会认为这个数据再次被读取的概率相对其他数据要大一些,此时会将该条数据缓存

      2:空间局部性:当数据被读取后,会认为和这个数据相邻的数据被读取的概率相对要大一些,此时会将该条数据的相邻数据缓存

    iv:采用“局部性”原理是为了提高数据的命中率

    v:采用on -heap LRUBlockCache,最近最少使用的数据

HBase学习二

标签:let   节点   额外   timestamp   获取   row   创建表   crud   hdf   

原文地址:https://www.cnblogs.com/rmxd/p/12268964.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!