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 进行交互.
读写流程
读操作
- 首先从 ZooKeeper 找到 meta 表的 Region 位置, 然后读取 hbase:meta 表中的数据, hbase:meta 表中存储了用户表的 region 信息;
- 根据要查询的 namespace、表名和 rowkey 信息,找到写入数据对应的 Region 信息;
- 找到这个 Region 对应的 RegionServer, 然后发送请求;
- 查找对应的 Region;
- 先从 MemStore 查找数据, 如果没有, 再从 BlockCache 上读取;
- 如果 BlockCache 中也没有找到, 再到 StoreFile(HFile) 上进行读取.
写操作
- 首先从 ZooKeeper 找到 hbase:meta 表的 Region 位置, 然后读取 hbase:meta 表中的数据, hbase:meta 表中存储了用户表的 Region 信息;
- 根据 namespace、表名和 rowkey 信息找到写入数据对应的 Region 信息;
- 找到这个 Region 对应的 RegionServer, 然后发送请求;
- 把数据分别写到 HLog(WriteAheadLog) 和 MemStore 各一份;
- MemStore 达到阈值后把数据刷到磁盘, 生成 StoreFile 文件;
- 删除 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 的数据状态不同, 软状态强调的是数据状态处于一种短暂的临时状态.