HBase 基本使用

环境配置完成后执行指令启动 ZooKeeper 和 HBase

start-all.sh # 启动 hadoop
zkServer.sh start # 启动 zookeeper
start-hbase.sh # 启动 hbase

hbase shell # 进入hbase shell

基础的操作指令

list # 列出所有表
create 'test','cf1' # 创建表

scan 'test' # 查看表内容
put 'test','test001','cf1:keyword','aaa' # 添加内容
get 'test','test001' # 查看值
put 'test','test001','cf1:keyword','bbb' # 修改内容
deleteall 'test','test001' # 删除标内行键为test001的所有值

disable 'test'
drop 'test' # 删除表, 删除前需要 disable

实验代码运行结果

hbase 中的内容:

hadoop jar exp3.jar com.gcx2021211184.hbase.inputSource.Main
hadoop fs -cat /tmp/gcx-2021211184/part*

最后读取到的结果:

运行后各进程含义

主节点:

HMaster: 与 ZooKeeper 保持通信状态, 通过 zookeeper 知道 HRegionServer 的位置及 HRegionServer 的存活状态, 管理集群.

QuorumPeerMain: ZooKeeper 的一个重要组件, ZooKeeper 服务器的主要入口点, 负责启动和管理 ZooKeeper 服务.

从节点:

HRegionServer: 维护 HMaster 分配给它的 10G 的 HRegion, HBase 最核心的模块.

HBase 架构

客户端不与 HMaster 直接交互, 需要通过 ZooKeeper 进行交互.

读写流程

读操作

  1. 首先从 ZooKeeper 找到 meta 表的 Region 位置, 然后读取 hbase:meta 表中的数据, hbase:meta 表中存储了用户表的 region 信息;
  2. 根据要查询的 namespace、表名和 rowkey 信息,找到写入数据对应的 Region 信息;
  3. 找到这个 Region 对应的 RegionServer, 然后发送请求;
  4. 查找对应的 Region;
  5. 先从 MemStore 查找数据, 如果没有, 再从 BlockCache 上读取;
  6. 如果 BlockCache 中也没有找到, 再到 StoreFile(HFile) 上进行读取.

写操作

  1. 首先从 ZooKeeper 找到 hbase:meta 表的 Region 位置, 然后读取 hbase:meta 表中的数据, hbase:meta 表中存储了用户表的 Region 信息;
  2. 根据 namespace、表名和 rowkey 信息找到写入数据对应的 Region 信息;
  3. 找到这个 Region 对应的 RegionServer, 然后发送请求;
  4. 把数据分别写到 HLog(WriteAheadLog) 和 MemStore 各一份;
  5. MemStore 达到阈值后把数据刷到磁盘, 生成 StoreFile 文件;
  6. 删除 HLog 中的历史数据。

CAP 与 BASE

经典的 CAP 理论:

  • Consistency: Every read receives the most recent write or an error.
  • Availability : Every request receives a (non-error) response – without the guarantee that it contains the most recent write.
  • Partition tolerance : The system continues to operate despite an arbitrary number of messages being dropped (or delayed) by the network between nodes.

对可用性和一致性的权衡: BASE 理论:

  • Basically Available (基本可用): 对完全可用和完全不可用的一种折中, 当系统用户量超出系统设计范围外, 可以通过熔断降级, 流量削峰等操作来保证系统核心功能正常.
  • Eventually consistent (最终一致性): 允许数据有短暂的不一致状态存在, 即: 软状态. 但数据最终一定是一致的.
  • Soft state (软状态): 软状态故名思意就是可以变动的状态, 与满足 ACID 的数据状态不同, 软状态强调的是数据状态处于一种短暂的临时状态.