HBase,
- HBase本身就是一个非关系型数据库
- HBase在存储数据的时候也是以key-value结构来进行存储
- HBase基于Hadoop运行,但是Hbase的效率控制在秒的级别
- HBase在存储的时候基于列进行存储的 - 传统的行存储的方式,在查询特定列的时候,大部分时间花在磁盘寻址上;在实际开发中,查询数据往往不是整表查询往往是查询指定的几列,在这个时候列存储的方式的效率就明显要高一些
- 在HBase中,可以设计多个列族,但是一般不要超过3个
- 在HBase中,列族在创建表的时候就要指定,但是在添加数据的时候,可以向列族中添加不同的列
- HBase中的数据是稀疏的
- HBase本身基于HDFS进行存储,HDFS的特点是一次写入不能修改。在HBase中,如果修改数据,不是修改最原始的数据而是追加数据,在获取数据的时候,如果不指定,默认获取最新的(timestamp)数据。时间戳在HBase的数据中称之为是这个数据的版本VERSION
- HBase利用Zookeeper进行管理,HMaster通过Zookeeper监听HRegionServer。这个过程中,HBase自带了一个Zookeeper。如果需要配置额外的Zookeeper而不是使用自带的,那么需要禁用这个HBase中自带的Zookeeper
- 如果一个HBase集群中启动了多个HMaster,则会按照启动顺序,先启动的节点作为active HMaster,后启动的节点就会自动的作为HMaster的备份
- 当HBase启动的时候,每一个节点都会自动的在Zookeeper上来注册一个临时节,在注册临时节点的时候,注册的不是IP地址而是主机名
- HBase和Hive的区别
- HBase是非关系型数据库,Hive是基于Hadoop的数仓工具
- Hive必须基于Hadoop;HBase可以不基于Hadoop,HBase可以脱离Hadoop存在
- HBase只提供了基本的CRUD的能力;Hive中提供了大量的函数允许对数据进行ETL的过程
- HBase存储的数据是稀疏/半结构化的,Hive存储的是结构化数据
- HBase针对列操作,Hive针对行操作
HBase 物理存储
1在HBase中,会将一个table中一个或多个行划分为一个HRegion (H锐),意味一个table可以有多个HRegion
2 每一个HRegion可以分布到不同的节点(HRegionServier)上,为了方便表的分布式存储
3 在table刚刚创建的时候,默认为1个HRegion
4 随着table的不断增大,一个HRegion中数据也越来越多,当HRegion到达一定的限度之后,HRegion会裂为均等的两个HRegion
5 HRegion在分裂完成之后,这些HRegion会转移到其他的节点保证数据分布存储
6 HBase在HRegion会考虑负载均衡
7 负载均衡由HMaster 控制
8 HRegion是分布存储的最小单位
8 HRegion不是存储的最小的单位,HRegion中包含1个和多个HSoter
9 每一个列族对应一个HStore (1个memStore和0个或者多个StoreFile(四多file)),当StoreFile落地在HDFS,称为HFile
Row Key:行健
hbase本质上也是一种Key-Value存储系统。Key相当于RowKey,Value相当于列族数据的集合
与nosql数据库们一样,row key是用来检索记录的主键
- 访问hbase table中的行,只有三种方式:
- 通过单个row key访问
- 通过row key的range
- 全表扫描Row key行键
- (Row key)可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes),在hbase内部,row key保存为字节数存储时, 数据按照Rowkey的字典序(byte order)排序存储。设计key时,要充分排序存储这个特性,将经常一起读取的行存储放到一起。(位置相关性)
列族(列簇)
- hbase表中的每个列,都归属与某个列族
- 列族是表的schema的一部分(而列不是),列族必须在使用表之前定义
- 列名都以列族作为前缀。例如courses:history , courses:math 都属于 courses 这个列族
- 访问控制、磁盘和内存的使用统计都是在列族层面进行的。实际应用中,列族上的控制权限能帮助管理不同类型的应用:允许一些应用可以添加新的基本数据、一些应用可以读取基本数据并创建继承的列族、一些应用则只允许浏览数据(甚至可能因为隐私的原因不能浏览所有数据)
基础指令:
1 create ‘su’,'a1','a2'
2 put 'su','r1','s1:name'.'liu'
3 get 'su','r1'
4 scan 'su' 或 count 'su'
HRegion
- 每一个Table中,将一行或者多行作为一个HRegion进行处理
- HRegion在存储的时候会记录这个Region所对应的startRowKey和stopRowKey
- 一个HRegion由1个或者多个HStore构成,每一个HStore包含1个memStore以及0个或者多个StoreFile
- 每一个HRegion都会分布在不同的节点上(HRegionServer)
- 每一个HRegionServer按照HBase的设计大概能管理1000个HRegion
HMaster
- HMaster是HBase中的管理节点
- HMaster不存在单点故障,因为可以启动多个HMaster,按照启动顺序,先启动的HMaster会是active(活动)状态,所有的请求都是走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/master来实现热备,热备是通过RPC进行的
- 功能:
- 管理HRegionServer:负责HRegion分配到哪一个节点上
- 管理元数据/表结构(增加表、删除表) - 表名、列族名、表和列族之间的关系等称之为元数据
Zookeeper在HBase中的作用
- 在HBase中作为协调者来使用的
- 当HBase启动的时候,HMaster和HRegionServer都会到Zookeeper来注册一个临时节点 - HMaster注册的节点是/hbase/master,HRegionServer注册的节点是/hbase/rs/XXX
- HMaster并不是直接监控HRegionServer,而是通过Zookeeper监控。
HRegionServer
- 用于存储和管理HRegion,每一个HRegionServer都可以管理多个HRegion
- 在实际使用中,一般会将HRegionServer和DataNode部署在同一个节点上,以满足数据本地化策略
- HRegionServer由WAL、Block Cache以及HRegion构成
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。