登 录
注 册
< 大 数 据
Flink
Hadoop
Spark
Hive
HBase
Kafka
其他框架
HBase读写流程
多租户环境
HBase HA
HBase预分区
RowKey设计
HBase优化
HBase数据删除与Split
HBase PythonAPI
HBase存储结构
HBased对接Hive
热门推荐>>>
中台架构
中台建设与架构
Hadoop
源码分析-NN启动(三)
Linux
Nginx高可用
Python
数据导出工具
Flink
3分钟搭建Flink SQL测试环境
Kafka
Kafka对接Flume
深度学习
卷积神经网络
数据结构与算法
选择合适的算法
MySQL
数据备份恢复
计算机系统
信号量同步线程
Hive
Hive调优参数大全
其他框架
Azkaban Flow1.0与2.0
ClickHouse
表引擎-其他类型
技术成长
最好的职业建议
精选书单
技术成长书单—机器学习
技术资讯
数据在线:计算将成为公共服务
开发工具
IntelliJ IDEA 20年发展回顾(二)
系统工具
Mac命令行工具
虚拟化
内存虚拟化概述
云原生
云原生构建现代化应用
云服务
一文搞懂公有云、私有云...
Java
Spring Boot依赖注入与Runners
Go
Go函数与方法
SQL
SQL模板
安全常识
一文读懂SSO
当前位置:
首页
>>
HBase
>>
HBase读写流程
HBase读写流程
2020-07-02 00:29:12 星期四 阅读:3405
因为HBase客户端的读写操作不会与HMaster交互,所以`HMaster挂掉,不会影响表数据的读写`。但是对于DDL操作(元数据操作),比如创建表、删除表region分裂等操作会不可用。所以,HMaster短时间挂掉没事,长时间挂掉就会出问题,region达到预定的大小后分裂不出去。 HBase是`读比写慢`的框架(一般的框架都是读比写快)。因为读流程比写流程涉及到的环节更多。 ####写流程 #####meta表的作用 meta表是HBase的一个系统表(放在命名空间hbase上,可通过scan hbase:meta命令查看表的所有内容),只有一个region,且不会split。用来存储每个普通表的索引信息。比如:对于表a,rowkey在1-100范围内的数据在哪台RegionServer上,客户端拿到该索引信息后,直接与对应的RegionServer交互即可。 注意:`在Hbase1.0以后的版本里,没有-root-表的概念了。` 可以直接在ZK里查看HBase meta表的存储地址 ```bash cd $ZK_HOME bin/zkCli.sh get /hbase/meta-region-server ``` #####写流程的步骤 1、客户端连接ZK请求meta表在哪台机器上维护(可通过zk的客户端查看具体存储内容) 2、客户端拿到meta表的`存储位置`后,直接与meta表所在的RegionServer交互 3、客户端通过查询meta表(在客户端本地缓存meta表信息,下次就不用请求了)得知需要写入的表对应的数据所在的RegionServer,同时通过需要插入的数据的rowkey确定写入到哪个region 4、客户端与meta表返回的RegionServer交互,先把本次写操作的日志记录到wal(磁盘),然后再将真实数据顺序内存(memstore),写完后`向客户端返回ack信息`。`不用等到内存里的数据写入到磁盘`(StoreFile)才返回。(所以hbase对于写入数据非常快,原因是写入内存后直接就返回) 5、HBase会定期(1小时)从memstore将数据flush到磁盘(StoreFile)里,如果在flush之前内存的数据丢失,则可以通过wal日志恢复。 6、如果每次flush到磁盘的StoreFile文件太小,HBase会定期合并。如果太大,则会定期拆分。 ####读流程 1、Client 先访问 zookeeper,获取 hbase:meta 表位于哪个 Region Server。 2、访问对应的 Region Server,获取 hbase:meta 表,根据读请求的 namespace:table/rowkey, 查询出目标数据位于哪个 Region Server 中的哪个 Region 中。并将该 table 的 region 信息以 及 meta 表的位置信息缓存在客户端的 meta cache,方便下次访问。 3、与目标 Region Server 进行通讯; 4、分别在 Block Cache(读缓存),MemStore 和 Store File(HFile)中查询目标数据,并将 查到的所有数据进行合并。此处所有数据是指同一条数据的不同版本(time stamp)或者不同的类型(Put/Delete)。 5、将从文件中查询到的数据块(Block,HFile 数据存储单元,默认大小为 64KB)缓存到 Block Cache。 6、将合并后的最终结果返回给客户端。 ####HBase StoreFile合并 由于 memstore 每次刷写都会生成一个新的 HFile,且同一个字段的不同版本(timestamp) 和不同类型(Put/Delete)有可能会分布在不同的 HFile 中,因此查询时需要遍历所有的 HFile。为了减少 HFile 的个数,以及清理掉过期和删除的数据,会进行` StoreFile Compaction`。 Compaction 分为两种,分别是 Minor Compaction 和 Major Compaction。 `Minor Compaction`会将临近的若干个较小的 HFile 合并成一个较大的 HFile,但不会清理过期和删除的数据。Minor合并触发的条件可以通过hbase-site.xml文件配置,默认是HFile文件个数大于等于3个就开始合并。也可以在hbase 命令行手动合并。 `Major Compaction`会将一个 Store 下的所有的 HFile 合并成一个大 HFile,并且会清理掉过期和删除的数据。Major合并触发的条件默认是7天,合并的时候回消耗大量资源,**生产环境中需要谨慎开启**。也可以在hbase 命令行手动合并。