IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> hbase -> 正文阅读

[大数据]hbase


1、hadoop database的简称
hbase是一个数据模型,属于hadoop生态系统的一部分,提供对海量数据的随机实时读/写访问。
构建在hadoop之hdfs之上,分布式面向列的数据库
参考谷歌的bigtable数据库设计,拥有hdfs的分块存储、冗余、容错的优良特性。
完全开源、优秀的横向扩展性。
2、hbase与hdfs对比说明

HDFS:适于储存大文件的分布式文件系统
? ? ? ? ? ? 不支持快速单独记录查找,即顺序访问
? ? ? ? ? ?批量任务处理,吞吐量高、时延实时性差

HBase:
建立再HDFS之上的数据库,以数据记录为单位
提供在较大的表快速查找,即随机访问,也可以顺序访问
提供了亿级记录低延迟访问任意行记录,即随机存取
(原因:内部使用哈希表和提供随机接入,并且其存储索引,可将在HDFS文件中的数据进行快速查找。
3、
hbase数据模型?
重要概念
1)、命名空间(namespace)
类比于关系型数据库中的不同的Database数据库。
利用命名空间,在多租户场景下可做到更好的资源和数据隔离。?
2)、表(table)?
类比于rdb中的表?
以"表"为单位组织数据,表由多行组成?
3)、行(row)
行由一个RowKey和多个列族组成,一个行有一个RowKey作为行的唯一标识。?
4)、列族(column family,简称CF)
每一行由若干列族组成,每个列族下可包含多个列。
列族是列共性的一些体现,如baseInfo列族和addressInfo列族,baseInfo列族可以包括name(名字),age(年龄),gender(性别)属性列,而addressInfo列族可以包括province(省份),city(市), email(邮箱)等属性列
物理上,同一列族的数据存储在一起的。即之前说到的面向列存储实质是面向列族存储。?
5)、列限定符(column qualifier)
列由列族和列限定符唯一指定,像如上的name、age即是baseInfo列族的列限定符。?
6)、单元格(cell)
单元格由RowKey、列族、列限定符唯一定位,单元格之中存放一个值(Value)和一个版本号(version_number)。?
7)、时间戳(timestamp)
即为版本号,来标识一个单元格的数据的最新的插入或是修改时间
单元格内不同版本的值按时间倒序排列,最新的数据排在最前面
4、核心设计
面向列(列族)定义、列(列族)存储的数据库,其数据库也称为空间namespace。
表的基本组成单元是行,每行有个唯一标识称为rowKey,表中数据按rowKey进行字典序排序存储。
一个表有多个列族以及每一个列族可以有任意数量的列,后续新增列的值连续地存储在磁盘上。
表中的每个单元格值都具有时间戳,来标识该单元格的最后插入或更新时间。?
简易逻辑说明?? ??? ?
表是行的集合?? ??? ??
行是列族的集合?
列族是列的集合
列是键值对的集合
5、
1)Client?
发起读写请求的角色,面向hbase client编程。?
首先hbase查询meta表,找到读或写的数据的region区域位置信息。
然后向region对应的HRegionServer上发送读写请求。
2) ZooKeeper?
存储HBase元数据?
负责HMaster的选择和主备切换-HA?
负责对HRegionServer进行监控
对RootRegion的管理,即对meta表所在数据存储的region的管理
Region 管理,普通region的上下线等状态信息管理
分布式SplitWAL任务管理,即当HRegionServer出现宕机后,接收HMaster分配下来的分布式恢复的日志位置,通知到各个健康的HRegionServer来通过获取日志数据做replay操作恢复宕机的HRegionServer中的原数据。?
3) HMaster
管理用户对Table的增删改查操作
管理HRegionServer,实现其负载均衡,调整Region分布
管理和分配Region:Region分裂后,负责新Region的分配;某一个RegionServer宕机之后,接收到ZooKeeper 的NodeDelete 通知然后开始该失效RegionServer上的Region的迁移
4) HRegionServer
维护本地的Region,并处理客户端对这些Region读写的I/O请求
负责切分本地Region,当StoreFile大小超过阀值,则会触发Region的split操作,把当前Region切分成2个Region,然后老的Region会下线;新的2个Region会被HMaster分配到相对应的HRegionServer上
HRegionServer内部管理着一系列HRegion对象,每一个HRegion对象对应着Table中的Region。
HRegion由多个HStore组成,每一个HStore对应了Table中的一个ColumnFamily(列族)的存储。因此可以看出每一个列族其实就是一个集中的存储单元,因此最好将具备共同I/O特性的列放在一个列族里,这样可以保证读写的高效。
5) HRegion
Table在行(水平)的方向上分隔为多个Region。Region是HBase中分布式存储和负载均衡的最小单元,即不同的region可以分别在不同的Region Server上,但同一个Region是不会拆分到多个server上。
Region按大小分隔,每个表一般是只有一个region。随着数据不断插入表,region不断增大,当region的某个列族达到一个阈值时就会分成两个新的region。
每个region由以下信息标识:< 表名,startRowkey,创建时间>?
6) HStore
HStore是HBase存储的核心,主要由2部分组成:MemStore和StoreFile。
MemStore就是 SortedMemory Buffer,用户写入的数据首先会放在这个内存缓存中,当缓冲区满了以后,flush 到StoreFile(底层是HFile)中,当StoreFile文件数达到阀值会触发Compact操作,将多个StoreFile进行合并,合并成一个大的StoreFile。
合并过程中会进行版本的合并和数据删除,因此所有的更新和删除操作(标记删除)都是在compact阶段完成的,这使得用户的写操作只要写入内存就可以立即返回,保证HBase I/O高性能。
当合并之后的StoreFile超过阀值,则会触发HRegion的split操作,将一个HRegion分成2个HRegion,老的HRegion会被下线,新的会被HMaster分配到对应的HRegionServer上,可能是当前HRegionServer也有可能是其他HRegionServer上。
7) MemStore
MemStore是放在内存里的,保存修改的数据即keyValues。
当MemStore的大小达到一个阀值(默认128MB)时,memStore会被flush到文件,即生成一个快照。
有一个独立线程来负责MemStore的flush操作
8)StoreFile
memStore内存中的数据写到文件后就是StoreFile,
StoreFile底层是以HFile的格式保存。
当StoreFile文件的数量增长到一定阈值后,系统会进行合并(minor compaction、major compaction),在合并过程中会进行版本合并和删除工作(major),形成更大的storefile。?
9) HFile
当MemStore累积足够的数据时,整个已排序的KeyValue集将被写入HDFS中的新HFile,其为顺序写入,故速度非常快,因为它避免了移动磁盘驱动器磁头。
key-value格式的数据存储文件,是一个二进制的文件。
StoreFile就是针对HFile进行了一个轻量级的封装。
10) Minor Compaction
HBase会自动选择一些较小的StoreFile,并将它们重写成更少且更大的StoreFiles,该过程称为Minor Compaction。
通过将较小的文件重写为较少但较大的文件来减少存储文件的数量,执行合并排序。
11) Major Compaction
Major compaction将region所有的StoreFile合并,并重写到一个StoreFile中,每个列族对应这样的一个StoreFile。
在此过程中,删除已删除或过期的Cell,会提升了读取性能,由于Major compaction重写了所有HFile文件,因此在此过程中可能会发生大量磁盘I/O和网络流量。这被称为写入放大。
Major compaction执行计划可以自动运行。由于写入放大,通常计划在周末或晚上等集群负载低的时候进行Major compaction。
12)WAL机制
WriteAhead Log的简称,即先写日志的意思
解决的是hbase写入过程中,当写入MemoryStore后,HRegionServer宕机或是其它异常情况下数据无法持久化的问题。
解决方法(WAL的运行原理)
写入时候先写日志即WAL,再写MemoryStore,当MemoryStore写入成功后,客户端写入方则会得到确定写成功的消息。
此种情况下,若出现MemoryStore无法持久化成功的情况,可以通过replay WAL log的方式进行恢复。
13) HLog
HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。
物理上是一个sequencefile
每个HRegionServer只有一个HLog,该HLog归该HRegionServer下的所有HRegion共享
6、hbase写流程
1)获取.META.的RootRegion位置信息
在客户端写进程内,第1次写时,Client先通过zookeeper获取从.META.表对应的region位置信息,并加入到进程缓存中,后续再读或再写时,直接读取缓存的.meta.信息对应的region信息即可。
2)找到数据要写到哪个region上
根据上边获取得到的RootRegion位置信息,请求region所在的region server服务,根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息。
找到小于rowkey并且最接近rowkey的startkey对应的region,即为目标region信息。
3)发起实际的写入请求
向region对应的region server发起写入请求
4)WAL log写入
将插入/更新写入WAL中。当客户端发起put/delete请求时,考虑到写入内存MemStore会有丢失数据的风险,因此在写入缓存前,HBase会先写入到Write Ahead Log(WAL)中(WAL存储在HDFS中),那么即使发生宕机,也可以通过WAL还原初始数据。
5) ?memstore写入与StoreFile落盘
将更新写入memstore中,当增加到一定大小,达到预设的Flush size阈值时,会触发flush memstore,把memstore中的数据写出到hdfs上,生成一个storefile。
6) StoreFile合并
随着Storefile文件的不断增多,当增长到一定阈值后,触发compact合并操作,将多个storefile合并成一个,同时进行版本合并和数据删除。
storefile通过不断compact合并操作,逐步形成越来越大的storefile。
7 ) Region拆分
单个stroefile大小超过一定阈值后,触发split操作,把当前region拆分成两个,新拆分的2个region会被hbase master分配到相应的2个regionserver上。
7、hbase读流程
1)获取.META.的RootRegion位置信息
在客户端读进程内,第1次读时,Client先通过zookeeper获取从.META.表对应的region位置信息,并加入到进程缓存中,后续再读或再写时,直接读取缓存的.meta.信息对应的region信息即可。
2)找到数据要写到哪个region上
根据上边获取得到的RootRegion位置信息,请求region所在的region server服务,根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息。
找到小于rowkey并且最接近rowkey的startkey对应的region,即为目标region信息
3)发起实际的读取请求
向region对应的region server发起读取请求
4) 先从memstore中查找数据,如果找到则返回。
5) 再从BlockCache中查找数据,如果找到则返回。
6) 再从StoreFile中查找数据,如果找到则返回,如果没有找到则返回null。?
如果是从StoreFile中读取到的数据,则要写入BlockCache后再返回给客户端。

常用命令
先进入 hbase shell
查看hbase集群状态 status
查看hbase版本信息 version
查看当前操作hbase的用户是那个 whoami
表名为Student,列族为base_info和advanced_info ?create "Student","base_info",'advanced_info'
?Student'
表是否被启用is_enable 'Student'
查看表的描述 descride 'Student'?
给表Student加入一个列族private_info ?alter 'Student','private_info'
验证表是否存在 exists 'Student'
删除表,表需先禁用,然后才能删除 disable 'Student' drop 'Student'
向当前空间下表Student的rowkey为r1的列族下添加数据
put 'Student','r1','base_info:username','zhangsan

hbase读取数据的操作特别说明
scan遍历全表
模板:scan 'table_name'
scan范围查询
模板:scan 'table_name', {PROPERTY=>'VALUE'}
命令:scan 'Student', { LIMIT=> 2,STARTROW => 'r1',ENDROW=>'r2'
get按rowKey查询
模板:get "table_name","rowid"

查询指定rowKey的数据 get table_name rowid
获取行中指定的列数据 get table_name rowid ?column_family:column_name
删除指定条件的列数据 ?delete 'table name','rowKey','columnFamily:columnName','time stamp'(注意时间戳不加引号)

修改列族的版本号个数
模板:alter 'tablename',NAME=>'columnFamilyName',VERSIONS=>versionNumbers
样例:alter 'Student4Job008',NAME=>'baseInfo',VERSIONS=>2
再去查看表的描述信息,可以查到变化情况。
查看表数据的指定版本个数(有效的版本号,若已删除版本但处于标记状态,并未真正删除数据的不属于有效的版本数据)
模板1-查看全表:scan 'tablename',{VERSIONS => versionNumber}
模板1-查看某列族:scan 'tablename',{NAME=>'baseInfo',VERSIONS => versionNumber}
样例:scan 'Student4Job008',{VERSIONS => 4}
注:hbase删除数据时,先加入删除标记,即标记删除法,待到minor 或是 major compaction再进行物理删除。
查看表数据的指定所有版本对应的数据(包括全部版本的实际还存在的数据, 即包括加了删除标记但未正式删除的)
模板1-查看全表:scan 'tablename',{RAW=>true,VERSIONS => versionNumber}
模板1-查看某列族:scan 'tablename',{RAW=>true,NAME=>'baseInfo',VERSIONS => versionNumber}
样例:scan 'Student4Job008',{RAW=>true,VERSIONS => 4}

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-11-20 18:27:52  更:2021-11-20 18:28:57 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 6:41:47-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码