HBase

HBase架构:

关键词: client,zookeeper,hmaster,hregoinserver,hlog,hregoin,store,memstore,storefile,hfile
在这里插入图片描述
Client

包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息

hmaster:(hbase的老大)

  为regoinserver分配region
  负责region的重新分配
  hdfs的垃圾文件回收

hregoinserver:(hbase的小弟)

负责维护hmaster分配给他的region(管理regoin)
处理client对region的IO请求并和hdfs进行交互

Zookeeper作用

通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册

存储所有Region的寻址入口

实时监控Region server的上线和下线信息。并实时通知给HMaster

存储HBase的schema和table元数据

默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper

zookeeper的引入使得Master不再是单点故障

HBase的安装

1.解压并配置环境变量
2.配置regionserver
配置backup-masters
配置hbase-site.xml
配置hbase-env.sh
export HBASE_MANAGES_ZK = false

分发:
 scp -r hbase-1.2.1 root@hadoop02:$PWD

启动zk
启动hdfs
启动hbase

hbase shell

创建表:

create 'ns1:t2' ,'base_info' ,'extra_info'

查看表定义:

desc 'ns1:t1'

插入数据:

put 'ns1:t1','rk0001','f1:name','zhangsan'

查询所有数据

scan 't1'

查询某一行:

get 't1' , 'rk0001'

删除数据(指定要删除的列)

delete 't1' . 'rk0001','f1:age'

删除表:

drop 't1' 注意删除表之前要先禁用表  disable 't1'

Hbase预写

在这里插入图片描述
该机制用于数据的容错和恢复:

HLog是一个实现Write Ahead Log的类,在每次用户操作写入MemStore的同时,也会写一份数据到HLog文件中,
HLog文件定期会滚动出新的,并删除旧的文件 (已持久化到StoreFile中的数   据)。当HRegionServer意外终止
HMaster会通过Zookeeper感知到,HMaster首先会处理遗留的 HLog文件,将其中不同Region的Log数据进行拆分,
分别放到相应region的目录下,然后再将失效的 region重新分配,领取到这region的HRegionServer在Load Region的
过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后flush到StoreFiles,完成数
据恢复

HBase读写流程

写过程:

三步:flush,compact,split
先往WAL写,HLog用于灾难恢复往memstore(热数据)写,memstore达到阈值,开始溢写到HDFS,memstore配置:默认
达到128M开始溢写,自动flush

       <property>
      <name>hbase.hregion.memstore.flush.size</name>
      <value>134217728</value>
    </property>

flush:

生成storefile后,hdfs上才会看到文件

compact:

溢写生成很多的storefile,合并storefile
minor_compation:最早生成的几个storefile会被合并,这一步不会对标记的删除和过期的数据进行处理,经常发生,
数据量较小,占用资源不多
major_compaction:  默认7天执行一次
设置:
       <property>
      <name>hbase.hregion.majorcompaction</name>
      <value>604800000</value>
    </property>

compact的危害:

   消耗大量的资源,对hbase的性能产生影响
  -》会导致hbase的应用阻塞
  企业中一般关闭自动触发,使用手动触发 major_compact

操作:

major_compact 'S3'

效果:

   hdfs上面的文件合并

split:

 配置split阈值

  <property>
    <name>hbase.hregion.max.filesize</name>
    <value>10737418240</value>
  </property>

读流程:

在这里插入图片描述

1.通过zk来获取root表在哪个节点上,然后进一步通过-root表和-meta表来获取最终的位置信息
2.memstore和storefile中找文件

root表:包含META表所在的region列表该表只会有一个region,zookeeper中记录了root表的location
META表:

包含所有用户空间region列表,以及regionserver的服务器地址

寻找regionserver

  zookeeper -> root(单Region) ->META ->用户表

HBase预分区技术:

hbase默认建表时只有一个region,这个region的rowkey是没有边界的,在写入时,所有的数据会写入这个默认的region
随着数据量不断增加,region会split,分为2个region,会产生两个问题
1.数据会往一个region上写,会有热点问题
2.region split会消耗集群IO资源,

预分区技术:提前创建多个region,并确定每个region的起始和终止

HBase使用场景

大数据量存储,大数据量高并发操作

需要对数据随机读写操作

读写访问均是非常简单的操作
### HBase 的使用指南与教程 #### 1. 学习资源推荐 对于希望深入学习 HBase 的用户来说,有几本经典书籍可以作为参考资料。例如,《HBase: The Definitive Guide》是一本覆盖范围广泛的参考书,适合初学者和中级学习者[^1]。如果更倾向于实践案例,则可以选择《HBase in Action》,该书专注于实际应用场景,更适合有一定开发经验的技术人员[^1]。 #### 2. 命令行工具 HBCK2 使用说明 HBCK2 是 HBase 提供的一个修复工具,主要用于解决元数据一致性问题和其他潜在的数据损坏情况。要运行 HBCK2,可以通过 `$HBASE_HOME/bin/hbase` 脚本来启动,并指定 `-j` 参数来加载对应的 JAR 文件。具体命令如下: ```bash ${HBASE_HOME}/bin/hbase --config /etc/hbase-conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-xxx.jar ``` 默认情况下,如果不加特殊参数,执行 `hbck` 将会调用旧版本的修复工具(即 HBCK1)。因此,在需要高级功能时务必显式指明路径[^2]。 #### 3. 集成 Spark 和 HBase (HBase-RDD) 为了简化大数据处理流程中的复杂操作,社区还提供了专门针对 Apache Spark 设计的支持库——HBase-RDD。此项目允许开发者创建自定义逻辑轻松读取、写入甚至删除存储在 HBase 中的内容。更多详情可访问官方仓库链接获取最新文档和支持信息[^3]: [https://gitcode.com/gh_mirrors/hb/hbase-rdd](https://gitcode.com/gh_mirrors/hb/hbase-rdd) #### 4. Zookeeper 在 HBase 架构中的角色 值得注意的是,Zookeeper 对于整个 HBase 生态系统至关重要。它不仅负责协调多个节点之间的通信,而且承担着诸如选举 Master 实例、维护 RegionServer 注册表等功能。通过采用 Zap 协议保障集群内部状态同步一致,从而减少应用程序层面额外的工作量[^4]。 以下是基于 Java 编程语言连接到远程 HBase 表格实例的一个简单例子: ```java Configuration config = HBaseConfiguration.create(); config.set("hbase.zookeeper.quorum", "localhost"); try(Connection connection = ConnectionFactory.createConnection(config)){ Table table = connection.getTable(TableName.valueOf("myTable")); Get get = new Get(Bytes.toBytes("rowKeyExample")); Result result = table.get(get); byte[] value = result.getValue(Bytes.toBytes("columnFamily"), Bytes.toBytes("qualifier")); } catch(IOException e){ System.err.println(e.getMessage()); } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值