大数据基础2.9:HBase的数据写入
admin
2023-10-19 18:41:27
0

HBase的数据写入




客户端大体步骤:

  1. 数据先写入HDFS作为WALs(HLog,预写日志,备份)存在
  2. 数据写入RegionServer的内存中(Memstore),至此客户端的写入操作结束

RegionServer的大体步骤:

  1. 每写进来一条数据,在内存中(Memstore)中做排序
  2. 定期检查Memstore大小达到上限,将整个Memstore刷新到硬盘中作为HFile存在
  3. 情况Memstore和WAL备份

详细步骤:

  1. 客户端将数据,写入HDFS的WAL作为备份存在
  2. 客户端将数据写入对应Region所在的RegionServer的某个Memstore中(内存中)
  3. RegionServer,对写入的数据,在Memstore(内存)中进行排序(来一条排序一条)
  4. 当某个Memstore的大小超过阈值,Memstore的所有内容被写入到硬盘中,成为一个HFile
  5. Memstore的内容清空,WAL的备份也清空
  6. 当新数据写入,继续1~5的流程

客户端的操作就是;写WAL和写入内存就完事了

RegionServer的操作是:对写入的数据进行排序,以及写出HFile


WAL

预写日志(HLog),作用是,数据还在Memstore中排序(还在内存中),还没有达到阈值写入HDFS作为HFile存在的时候

它是一个保险(备份),如果内存出现问题,可以从WAL中重播数据写入的过程,进行数据恢复

WAL内的数据是无需的,它记录的是输出插入的顺序,而不会对数据排序

Memstore

作用,就是在内存中对数据进行排序,积攒了一批次的数据后,写入到HFile

目的是确保写出的HFile内部是Rowkey有序的。

为什么要在内存中排序,因为内存排序效率高,硬盘排序效率低

列族和Memstore和Region的关系

  1. HBase的Region是跨越硬盘(HDFS)和内存
    也就是一个Region是分为:
  • HDFS硬盘部分(已经写入HDFS的HFile文件)
    其中HFile也可以叫做StoreFile
  • 内存部分,Memstore(在内存进行排序,还未刷新到硬盘的部分)

2个部分结合在一起,形成了一个Region

  1. 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插件

  1. 在PyCharm的插件中心,搜索big data tools 安装它
  2. 将Hadoop的安装包解压到Windows电脑上,比如D:\dev\hadoop-3.3.1
  3. 在Windows系统上配置HADOOP_HOME环境变量,指向D:\dev\hadoop-3.3.1
  4. 下载Hadoop的Windows兼容包,在day03的资料有:Hadoop3的Windows兼容文件.zip
  5. 将zip包的全部内容,放入你Windows安装的Hadoop文件夹内的bin文件夹内。
  6. 在big data tools中配置如下图:


相关内容