H B A S E 基 本 概 念
程序员文章站
2022-05-30 14:06:06
...
1.sql 结构化查询语言 字段和类型都是固定的
2.什么是hbase?
HBase是一个分布式的、面向列的开源数据库,
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
3.nosql的作用?
为了解决大规模数据集合、多重数据种类带来的挑战,尤其是大数据应用难题。
4.常见nosql? 常见sql?
NOSql(非关系型数据库):列存储(HBase)、文档型存储(MongoDb)、内存式存储(redis)、图形模型(Graph)
SQL(关系型数据库):Oracle、DB2、Microsoft SQL Server、MySQL、
5.hbase的作用? 可以有数亿行 数百万列
存储大量结果集数据,并提供低延迟的随机查询。
相比较关系型数据库,能够存储的数据量更大(比关系型数据库大很多很多),同时查询延迟相比较与其他hadoop产品(pig、hive)要低。
6.hbase和hive 有什么区别?
Hive的定位是数据仓库工具,虽然也有增删改查,但其删改查对应的是整张表而不是单行数据,查询的延迟较高。其本质是更加方便的使用mr的威力来进行离线分析的一个数据分析工具。
HBase的定位是hadoop的数据库,是一个典型的Nosql,所以HBase是用来在大量数据中进行低延迟的随机查询的。
7.安装:单机 伪分布式 全分布式
8.hbase 端口号?
默认地址为:http://master:16010/
注意:0.9x极以前的版本中,webUI地址的默认端口为60010。
9. hbase 的二级索引?如何构建?
本质列值与行健之间的的映射关系
10.什么坐标?
一个单元格是行、列族和列限定符的结合,也就是说,通过这三个值(也称之为坐标)来唯一确定一个单元格。
11. 表 行 列(列族和列限定符) 单元格 由什么组成?
HBase表由多行组成。
行在HBase中由 行键和一个或多个列的值组成
单元格是行、列族和列限定符的结合
列是表中的最基本元素,HBase的列包含一个列族和一个列限定符,列属于一个列族,
列族中可以包含多个列,列限定符即指一个列族中的某个列
列族属于一个行。列中的内容不需要指定类型,这也是与关系型数据不同的地方,
也是HBase被称之为无类型的数据库的原因。HBase的列与关系型数据库不同,
在于其含有版本的概念,一个列的数据可以有多个历史版本,体现形式就是时间戳。
12.行健有哪些特点?
有序 唯一
13.行健的设计原则?
RowKey长度原则,不要超过16个字节.
原因如下:
(1)数据的持久化文件HFile中是按照KeyValue存储的,如果RowKey过长比如100个字节,1000万列数据光RowKey就要占10万亿个字节,将近1G数据,这回极大影响 Hfie的存储效率
(2)MenStore将缓存部分数据到内存,如果RowKey字段过长内存的有效利用率会降低,系统将无法缓存更多的数据,这会降低检索效率,因此RowKey的字节长度越短越好.
(3)目前操作系统都是64位系统,内存8字节对齐,控制在16字节
RowKey散列原则
如果RowKey是按时间戳的方式递增,不要讲时间放在二进制码的前面,建议将RowKey的高位作为散列字段,由程序循环生成,地位放时间字段,
这样将提升数据均衡分布在每个RegionServer实现负载均衡的几率,如果没有散列字段,
首字段直接是时间信息将产生所有新数据都在一个RegionServer上堆积的热点现象,这样在做数据检索的时候负载将会集中在个别RegionServer 降低查询效率.
1.随机数
2.UUID
3.MD5,Hash,等加密算法
4.业务有序数反向
RowKey唯一原则
必须在设计上保证其唯一性
RowKey是hashBase里面唯一的索引,对于某些查询频繁的限定条件数据需要把内容放在rowkey里面
14. 高表 宽表 厚表
宽表是指很多列较少行,即列多行少的表,一行中的数据量较大,行数少;
高表是指很多行较少列,即行多列少,一行中的数据量较少,行数大
在HBase中使用宽表、高表的优劣总结如下:
查询性能:高表更好,因为查询条件都在row key中, 是全局分布式索引的一部分。高表一行中的数据较少。所以查询缓存BlockCache能缓存更多的行,以行数为单位的吞吐量会更高。
分片能力:高表分片粒度更细,各个分片的大小更均衡。因为高表一行的数据较少,宽表一行的数据较多。HBase按行来分片。
元数据开销:高表元数据开销更大。高表行多,row key多,可能造成region数量也多,- root -、 .meta表数据量更大。过大的元数据开销,可能引起HBase集群的不稳定、master更大的负担(这方面后续再好好总结)。
事务能力:宽表事务性更好。HBase对一行的写入(Put)是有事务原子性的,一行的所有列要么全部写入成功,要么全部没有写入。但是多行的更新之间没有事务性保证。
数据压缩比:如果我们对一行内的数据进行压缩,宽表能获得更高的压缩比。因为宽表中,一行的数据量较大,往往存在更多相似的二进制字节,有利于提高压缩比。通过压缩,缓解了宽表一行数据量太大,并导致分片大小不均匀的问题。查询时,我们根据row key找到压缩后的数据,进行解压缩。而且解压缩可以通过协处理器(coproesssor)在HBase服务器上做,而不是在业务应用的服务器上做,以充分应用HBase集群的CPU能力。
15.hbase 一个列族 包含多和Hfile
16.列族 HFile memstore bolckcache 对应的关系?
一个列族包含多个HFile,一个memstore,一个bolckcache
17.hbase 负载均衡的基本单元? 本质? 如何进行负载均衡?
基本单元:region
region本质:是以行键排序的连续存储的区间
负载均衡:如果region太大,系统就会把它们动态拆分;region太小,就把它们合并,以减少存储文件数量
18.hbase 读 写 删 流程?
读:HBase在读流程操作上使用了IRU(最近最少使用算法)缓存技术。这种缓存也叫做blockcache,和Memstore在一个JVM堆里。blockCache设计用来保存从HFile里读入内存的频繁访问的数据,避免硬盘读。每个列族都有自己的blockCache。掌握blockcache石油化HBase性能的一个重要部分。
写:默认情况下,执行写入时会写入到两个地方:预写入日志(WAL,也称HLog)和Memstore.HBase的默认方式是把写入动作记录在这两个地方,以保证数据持久换。只有当这两个地方的变化信息都写入并确认后,才认为写动作完成。
删:delete命令并不立即删除内容。实际上,他只是给记录打上标记。就是说,针对那个内容的一条新“墓碑”记录写进来,作为删除的标记。墓碑即可用来标志删除的内容不能再get和scan命令中返回结果。因为hfile文件是不能改变的,直到执行一次大合并,这些墓碑记录才会被处理,被删除记录
19.blockcache 机制?
IRU(最近最少使用算法)
20.小合并和大合并?
两者将会重整存储在HFile里的数据。
小合并把多个小HFile合并生成一个大HFile。
大合并将处理给定region的一个列族的所有hfile。大合并完成之后,这个列族的所有hfile合并成一个文件。
21.hbase 组件 及 作用?
1、zookeeper
存储Hbase元数据信息
实时监控RegionServer
存储所有Region的寻址入口
保证Hbase集群中只有一个Master
2、client
管理类操作,client与HMaster进行RPC通信
数据读写操作,client与RegionServer进行RPC通信
3、HMaster
HMaster没有单点问题,在Hbase中可以启动多个HMaster,通过Zookeeper的Master选举机制保证总有一个Master正常运行并提供服务,其他HMaster作为备选时刻准备提供服务。HMaster主要负责Table和Region的管理工作。
管理用户对表的增删改查
管理RegionServer的负载均衡,调整region分布
在region分裂后,负责新region的分配
在regionserver死机后,负责失效RegionServer上的Region迁移
4、HRegionServer
内部管理一系列HRegion对象,每个HRegion对应了Table中的一个Region
HRegion由多个HStore组成,每个HStore对应了Table中的一个Column Family的存储
HStore存储是Hbase存储的核心,由两部分组成:MemStore和StoreFile
用户写入的数据首先会放入MemStore中,当MemStore满了以后会缓冲成一个StoreFile(底层实现是HFile),当StoreFile文件数量达到一定的阀值,会触发Compact操作,将多个StoreFile合并成一个StoreFile,在合并的过程中会进行版本合并和数据删除,因此可以看出Hbase实际只有数据新增,所有的更新和删除操作都是在后续的Compact过程中进行的,这使得用户的写操作只要进内存中就可以了立即返回了,保证了Hbase I/O的高性能。
StoreFile在Compact之后,会形成越来越大的StoreFile,当单个StoreFile大小超过一定的阀值之后,会触发split操作,同时把当前的region分裂成2个region,父
region会下线,新分裂的2个子region会被HMaster分配到相应的HRegionServer上。
22.hregionserver 挂掉之后怎么办?
当HRegionServer意外终止后,HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取 到这些region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数据恢复。
23.列族跟hfile的关系?
一个列族有多个hfile
24.什么是热点?怎么解决?
热点发生在大量的client直接访问集群的一个或极少数个节点(访问可能是读,写或者其他操作)
加盐、哈希、反转、时间戳反转、
25.hbase两种特殊的表: -ROOT- 和 .META.
存储结构和操作方法的角度来说,-ROOT-、.META.与其他表没有任何区别。它们与众不同的地方是HBase用它们来存贮一个重要的系统信息:
-ROOT-:记录.META.表的Region信息。
.META.:记录用户表的Region信息。
当用户表特别大时,用户表的region也会非常多。.META.表存储了这些region信息,也变得非常大,这时.META.自己也需要划分成多个Region,托管到多个RegionServer上。
这时就出现了一个问题:当.META.被托管在多个RegionServer上,如何去定位.META.呢? HBase的做法是用另外一个表来记录.META.的Region信息,就和.META.记录用户表的Region信息一样,这个表就是-ROOT-表。
26.get 和 scan 有什么区别?
按指定rowkey获取唯一一条记录:get方法。
按指定条件获取一批记录:scan方法。
实现条件查询功能使用的就是scan方式,scan在使用时有以下几点值的注意:
get访问一个指定key的数据,而scan可以设置begin和end来访问一个范围内所有的数据。
scan可以通过setCaching与setBatch方法提高速度(以空间换时间)
scan可以通过setStartRow与setEndRow来限定范围。范围越小,性能越高。
scan可以通过setFilter方法添加过滤器,这也是分页(性能差)、多条件查询的基础。
推荐阅读