HBase的数据写入
客户端大体步骤:
- 数据先写入HDFS作为WALs(HLog,预写日志,备份)存在
- 数据写入RegionServer的
内存中
(Memstore),至此客户端的写入操作结束
RegionServer的大体步骤:
- 每写进来一条数据,在内存中(Memstore)中做排序
- 定期检查Memstore大小达到上限,将整个Memstore刷新到硬盘中作为HFile存在
- 情况Memstore和WAL备份
详细步骤:
- 客户端将数据,写入HDFS的WAL作为备份存在
- 客户端将数据写入对应Region所在的RegionServer的某个Memstore中(内存中)
- RegionServer,对写入的数据,在Memstore(内存)中进行排序(来一条排序一条)
- 当某个Memstore的大小超过阈值,Memstore的所有内容被写入到硬盘中,成为一个HFile
- Memstore的内容清空,WAL的备份也清空
- 当新数据写入,继续1~5的流程
客户端的操作就是;写WAL和写入内存就完事了
RegionServer的操作是:对写入的数据进行排序,以及写出HFile
WAL
预写日志(HLog),作用是,数据还在Memstore中排序(还在内存中),还没有达到阈值写入HDFS
作为HFile存在的时候
它是一个保险(备份),如果内存出现问题,可以从WAL中重播数据写入的过程,进行数据恢复
WAL内的数据是无需的,它记录的是输出插入的顺序,而不会对数据排序
Memstore
作用,就是在内存中对数据进行排序,积攒了一批次的数据后,写入到HFile
目的是确保写出的HFile内部是Rowkey有序的。
为什么要在内存中排序,因为内存排序效率高,硬盘排序效率低
列族和Memstore和Region的关系
- HBase的Region是
跨越硬盘(HDFS)和内存
的
也就是一个Region是分为:
- HDFS硬盘部分(已经写入HDFS的HFile文件)
其中HFile也可以叫做StoreFile - 内存部分,Memstore(在内存进行排序,还未刷新到硬盘的部分)
2个部分结合在一起,形成了一个Region
- HBase的表是可以有多个列族的,Region内部就基于列族的多少划分成不同的部分
比如,一个表有2个列族,C1和C2,那么,Region内部就有C1和C2的2部分
小总结
到目前为止,我们接触到的层次:
RegionServer -> 多个Region -> 每个Region有范围 -> 每个Region内含多个Store(列族对应) -> 每个Store包含内存区域(Memstore)和硬盘(HDFS)区域(HFile、StoreFile)
验证:每个region有范围
# 建立有预分区的表
create 'test_region', 'C1', 'C2', {SPLITS => ['10', '20', '30', '40', '50', '60', '70', '80', '90']}
# 查看表的region情况
list_regions 'test_region'
验证:数据插入,是根据Region的范围来决定的
首先,插入点数据
put 'test_region', '01', 'C1:name', 'zhangsan'
put 'test_region', '01', 'C2:sex', 'nan'
put 'test_region', '11', 'C1:name', 'zhangsan2'
put 'test_region', '11', 'C2:sex', 'nan'
put 'test_region', '22', 'C1:name', 'zhangsan3'
put 'test_region', '22', 'C2:sex', 'nan'
put 'test_region', '33', 'C1:name', 'zhangsan4'
put 'test_region', '33', 'C2:sex', 'nan'
put 'test_region', '44', 'C1:name', 'zhangsan5'
put 'test_region', '44', 'C2:sex', 'nan'
put 'test_region', '55', 'C1:name', 'zhangsan6'
put 'test_region', '55', 'C2:sex', 'nan'
put 'test_region', '66', 'C1:name', 'zhangsan7'
put 'test_region', '66', 'C2:sex', 'nan'
put 'test_region', '77', 'C1:name', 'zhangsan8'
put 'test_region', '77', 'C2:sex', 'nan'
put 'test_region', '88', 'C1:name', 'zhangsan9'
put 'test_region', '88', 'C2:sex', 'nan'
put 'test_region', '99', 'C1:name', 'zhangsan10'
put 'test_region', '99', 'C2:sex', 'nan'
验证根据Region的范围(大于等于StartKey,小于EndKey)对应的Rowkey会进入到对应的Region
验证:每个region有多个Store(Store和列族一一对应)
Store分为:内存区域(Memstore)和硬盘区域(HFile)
内存区域无法验证,硬盘可以验证;
补充:PyCharm BigdatTools插件
- 在PyCharm的插件中心,搜索
big data tools
安装它 - 将Hadoop的安装包解压到Windows电脑上,比如
D:\dev\hadoop-3.3.1
- 在Windows系统上配置HADOOP_HOME环境变量,指向
D:\dev\hadoop-3.3.1
- 下载Hadoop的Windows兼容包,在day03的资料有:
Hadoop3的Windows兼容文件.zip
- 将zip包的全部内容,放入你Windows安装的Hadoop文件夹内的
bin
文件夹内。 - 在big data tools中配置如下图: