当前位置: 首页 > article >正文

【大数据学习 | HBASE高级】storeFile文件的合并

Compaction 操作分成下面两种:

  • Minor Compaction:是选取一些小的、相邻的StoreFile将他们合并成一个更大的StoreFile,对于删除、过期、多余版本的数据不进行清除。

  • Major Compaction:是指将所有的StoreFile合并成一个StoreFile,对于删除、过期、多余版本的数据进行清除。优先采用Minor Compaction,如果达不到要求,再执行Major Compaction 。

注:Compaction的触发时机Major Compaction时间会持续比较长,整个过程会消耗大量系统资源,对上层业务有比较大的影响。因此线上业务都会将关闭自动触发Major Compaction功能,改为手动在业务低峰期触发。

HBase中可以触发compaction的因素有很多,最常见的因素有这么三种:Memstore Flush、后台线程周期性检查、手动触发

1)Memstore Flush:

每当 RegionServer发生一次Memstore flush操作之后也会进行检查是否需要进行Compaction操作。

2)周期性检查:

通过CompactionChecker线程来定时检查是否需要执行compaction(RegionServer启动时在initializeThreads()中初始化),每隔10000毫秒(可配置)检查一次。

一般系统触发都是minorCompact

合并主要有以下几个参数进行配置

hbase.store.compaction.ratio默认值1.2f,大于最小值但是小于1.2倍数的大小的数据也参加合并
hbase.hstore.compaction.min 默认值2,每次合并最少两个hfile
hbase.hstore.compaction.max 默认值10,每次合并最多10个hfile
hbase.hstore.compaction.min.size 小于这个值的file肯定会参加合并
hbase.hregion.memstore.flush.size (128 mb).
hbase.hstore.compaction.max.size 大于这个值的肯定不会参加合并

3)手动触发:

手动触发compection通常是为了执行major compaction,执行命令"major_compact '表名'",原因如下:

自动major compaction影响读写性能,因此会选择低峰期手动触发;

​ 执行完alter操作之后希望立刻生效,执行手动触发major compaction;

# 创建表
create 'hainiu:student1','cf1'

put 'hainiu:student1','id01','cf1:name', 'n1'
flush 'hainiu:student1'
scan 'hainiu:student1'  # 拿到n1 的时间戳

put 'hainiu:student1','id01','cf1:name', 'n2'
flush 'hainiu:student1'
scan 'hainiu:student1'  # 拿到n2 的时间戳

# 用 n1的时间戳指定查询,是能查询到的
get 'hainiu:student1', 'id01', {COLUMN => 'cf1:name', TIMESTAMP => 1673596645265} 

# 执行major合并, 由于n1是历史版本,所以n1被合并没了, 只留下n2(最新版本数据)
major_compact 'hainiu:student1'

# 用 n1的时间戳指定查询,查询不到了(n1被合并没了)
get 'hainiu:student1', 'id01', {COLUMN => 'cf1:name', TIMESTAMP => 1673596645265} 


http://www.kler.cn/a/389737.html

相关文章:

  • 机器学习——贝叶斯
  • 「数据要素」行业简报|2024.11.上刊
  • Toeplitz矩阵循环矩阵
  • 搭建监控系统Prometheus + Grafana
  • HarmonyOS ArkTS 下拉列表组件
  • 【Python】爬虫通过验证码
  • 【智谱开放平台-注册/登录安全分析报告】
  • 数据中心类DataCenter(二)
  • 【Linux 31】网络层协议 - IP
  • 【嵌入式设备】蓝牙鼠标使用教程——遥控器编码值
  • Netty篇(WebSocket)
  • VSCode + linux 远程免密登录
  • WSL 2 中 FastReport 与 FastCube 的设置方法与优化策略
  • Android 单元测试环境配置问题 Execution failed for task ‘:mergeDebugJavaResource‘.
  • J2EE平台
  • CompletableFuture:supplyAsync与runAsync
  • 【Spring】Spring框架中有有哪些常见的设计模式
  • macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试
  • 深入提升Python编程能力的全方位指南
  • mac 安装指定的node和npm版本
  • 中间件安全
  • 大数据新视界 -- 大数据大厂之 Impala 性能优化:数据加载策略如何决定分析速度(上)(15/30)
  • 机器学习(基础1)
  • 基于springboot+小程序的鲜花管理系统(鲜花1)
  • 小马识途营销顾问谈百科词条建立的注意事项
  • 网络安全:构建坚固的数字堡垒