【1,hbase是什么?】
答:hbase是一个开源的然后非关系分布式数据库,
【2,hbase是数据保存在哪里?】
答:hbase的数据保存在hdfs上,但还有少量数据是保存在内存中的。
【3,hbase有哪些特性?】
答:高可靠,高并发读写,面向列,可伸缩,易构建.
优势:
【4,hbase中什么叫面向列?】
答:数据存储有两种,一种是面向行存储(关系型数据库),一种是面向列存储。
面向行存储特点:
1.优点:就是写入的时候一次性要完成,并且它是保证你数据的完整性.每一列都必须有值,而且必须保证其完整性。
2.缺点:读数据的时候会产生很多冗余的数据。
面向列的特点:
1.优点:读取数据的时候不会产生冗余的数据。
2.缺点:写入数据的效率差,不能保证数据的完整性。
【5,列存储的具体内容】
假设说它分了四列(如下图8所示),列存储它就是分了四个不同的文件,每一个文件它的存储是这样存的,比如说你列字段里面都有值了,我们只做A和B和C和name和zhangsan和list做例子,其中第一个文件应该是这么存的: A \tzhangsan,B \t lisi,因为c没有name,所以就不存了
图8:
**NOTE:**Nosql里面它不是要求你所有的字段都是要有值的,因为是稀疏存储.
【6,Hbase主要应用在哪些领域? 】
【7,Hbase的数据模型? 】
图12
rowkey在整个的hbase表里面一定是按照你的字节去排序.行键其实就是hbase表的主键。
什么是Column Family?
每一条记录里面或者是在你去建Hbase的Schema设计的时候要指定好Column Family,那什么是Column Family呢?你可以认为就是一个列族,但是它这个列你可以在列族里面又可以细分出多个列出来,就是Column Family下面可以细分出多个子列,那这些子列称为Column qualifiar。
什么是时间戳?
简单点说就是版本号,需要注意的是时间戳是按照倒序排序的。每次修改列族的值, 不是在原来的基础上修改,而是帮你去重新复制一份记录出来,然后再复制出来的记录上去修改名字,原来这个名字这个记录,它会以某一种版本的形式给你记录起来明白了把?就是通过一个时间戳给你记录起来。
下面看两外一个例子
Hbase你的检索能够更快速并且你的数据的维护更合理,那它这里面会体现了一个三维有序的这么一个特点
什么叫做三维有序
第一个纬度就是你的rowkey
第二个纬度就是它的列(cf和cq)
第三维就是version-value
【8,Hbase的物理模型? 】
数据模型和物理模型这两个是有什么差异,这个大家应该是没有什么问题了,就是物理模型是称数据模型的实现。
Hbase的一张表其实它是由一个或多个Hreging来组成的,那什么叫做Hreging呢?那在Hreging大家可以暂时先认为它就是一个区域或者分区,所以认为一个Hbase一张表它是由一个或多个分区组成,然后并且这张表的数据是按照rowkey进行字典排序的,我们看上图23图中的图,相当于就是一张用户表,就类似于刚才那张一样。
每一个region的内部他们这个rowkey按照顺序排序的,而且region与region之间也是按照这种全局排序的,这是一个整体的一个物理的逻辑图。
那这个region呢因为是有大小概念的,有的region包含的记录多也有的region包含的记录少,那什么时候会region会变多有时候会变少?因为你这个数据是随着你的插入,使这个region是不断的增大。
如果数据是稀疏的:
如果要插入88,在第2个region中,那么会在99的位置开个口子,将88填充进去。随着不断的插入,第2个region不断增大,region就应该一分为二,变成76~100。
【9,什么情况下region会自动分裂?】
这个Region他有一个默认配置可以配,默认是10G。一个region里面它所管辖的数据里面超过了10个G的话,它会自动的去切分,region你可以认为是在Hbase整个集群里面是数据分布的一个最小的单位。
region它仅只能是属于某一个机器的,那这个机器的名字叫做regionService,一个region它只属于一个regionService,但是不允许一个region它既属于regionService又属于另外一个regionService。
总结:
1,一个region只能属于一个regionService.
2,一个regionServer可以包含多个region(不同表的region)。
3,region代表一个区域,是一个逻辑概念。
【10,如果在列族中既有写又有读,hbase是怎么处理的?】
只修改里面其中一个字段,其他字段不修改,把整行记录加锁明白这意思把?所以Hbase它是按行锁定的
【11,regionService用来干什么的?】
主要是负责用户的IO请求.
就是读和写.读和写的目的是干嘛?不就是操作数据嘛对不对?那它的数据哪里来的呢?就是在这个HDFS上,这个RegionService就给你提供了这么一个IO的一个入口然后供你客户端来对HDFS进行一个交互,所以RegionService在这上面是一台机器,但是在这个机器上面它会运行着一个进程,这个进程就叫做HRegionServer,这是进程,它这个进程是在Hbase里面是属于一个非常非常核心的一个进程,一个HRegionServer内部管理了一系列的HRegion对象.
HTable
就是表——>表
Hstore
Hbase你是可以分多个Column Family的对吧,一个Column Family就是一个Hstore,你可以认为就是一系列的文件,你简单理解就是一个文件.
Hstore由两部分组成:
首先把你的数据往memstore去写,当写到一定程度的时候,它就会把这个内存里面的数据做一个内存溢并写出多个Hfiles出来。什么叫有序KV?有序KV这个之前我们讲mapreduce的时候,那不是有一个排序嘛?按key进行排序这不就是一个有序kv嘛对吧.
Hbase的这个memstore大小是:128m.这个系统默认的128m可以改的,一旦达到了这个128m的时候它就开始往磁盘上存。
mapreduce里面memstore它的默认的空间大小是多大来着?是100m
通过下面图看出他们的联系:
BlockCache是一个也是类似于像menStor一样是一块内存区域,它这个缓存区是用来读的。
BlockCache就是一个读缓存,一个RegionService它可以管理着很多个Region是吧?然后这每一个Region里面又包含了很多的Hstore,然后每一个Hstore里面它又包含了一个MemStore又包含着很多的StoreFile,其实StoreFile本质就是一个HFile,HFile就直接落地到了你的DataNode上面去了。
【14,hbase的系统架构】
Hbase整个系统架构就主要包含了四个部分是吧?那就是Client和Master和Region Server和Zookeeper。