- 合并一个表中的所有`HFiles`
- 会彻底删除标记为删除的数据
- 通常是手动触发
+ compact后的数据【实际存储】在HDFS上,小的`HFile`应该远小于128M
+ 分布式架构
- HBase表:抽象概念,物理存储上被细分为多个Region。
- Region:数据存储和访问的基本单元。
- RegionServer:运行在集群中的服务器,负责管理和服务其上存储的一个或多个Region。
- HBase采用的是典型的Master/Slave架构。HBase Master负责管理表和Region的元数据信息,以及RegionServer的负载均衡。而RegionServers负责处理客户端的读写请求,并管理存储在其上的Regions。
+ 可用性
- ZooKeeper实现了Client和HMaster之间的协调管理
- HLog(WAL:Write Ahead Log 当数据写入具体的磁盘之前,先将其写一份在日志文件上)
* HLog能够将死去的RegionServer"复活",获取其原来的表数据。
* 当HRegionServer死的时候,则将HLog的数据迁移到另一台服务器上。
* 而数据迁移又依靠HMaster,因此HMaster也需要容灾机制,则出现了HMaster Backup和ZooKeeper进行协调管理。
* 如果ZooKeeper和HMaster之间心跳"断"了,则启用HMaster Backup.
- 事务性
-
NoSQL 更加注重 性能、扩展性、灵活性,不像RDBMS一样强调原子性或一致性。
-
一致性问题
- 发生场景:通常发生在实时数仓。
- 批处理:规定记录数达到一定值才发送,可能导致时效性差(前后两条记录的时间间隔长)。
- 流处理:采用每隔一段时间(水位线)就进行数据发送的策略。面临的挑战是如何确保在时间范围内的数据都被纳入处理。
- 解决方案:允许一定的延迟(例如,计算3秒内的数据,但结果会在5秒内出来),这是为了等待那些符合时间范围但尚未被处理的数据。
- 流批一体:流处理和批处理结合的处理模式(Flink)
- 侧输出流:
- 为了保证最终一致性,对因延迟未能纳入批次的数据放入侧输出流中。
- 例如:如果在一个设定的时间窗口(如秒级窗口)内,某些数据未能被处理,这些数据就可以被放入侧输出流中。随后,可以在一个更长的时间窗口(如分钟窗口)内对这些数据进行处理。
- 实时数仓 VS 离线数仓
- 数据准确性:离线数仓高于实时数仓
- 时间范围:
- 实时数仓的时间范围:秒、分、时、天
- 离线数仓的时间范围:天、周、月、年
-