任务描述
本关任务:在 HBase Shell
中使用分区压缩命令并将查看到的命令结果复制到指定的文件中。
相关知识
为了完成本关任务,你需要掌握:
1.数据分区压缩的概念;
2.数据分区压缩的原因;
3.数据分区压缩的过程;
4.数据分区压缩的触发时机;
5.数据分区压缩的详解。
数据分区压缩的概念
数据分区压缩的概念如下所述:
Hbase 中 MemStore 中不断进行 flush 刷写操作,就会产生多个 storeFile 的文件,当 storeFile 文件达到一定阈值后,Hbase 就会将 Region 中的 Store 中的一些 HFile 进行合并。
数据分区压缩的原因
数据分区压缩的原因如下所述:
HBase 不停的刷写,导致存储目录中有过多的数据文件,文件太多会导致维护困难、降低数据查询性能和效率。对一堆的文件进行 I/O 操作,耗时太多。所以 HBase 定期会对这些琐碎的文件进行整理,即合并 Compaction。
数据分区压缩的过程
数据分区压缩的过程分为以下几步:
排序文件、合并文件、代替原文件服务。HBase 首先从待合并的文件中读出 HFile 中的 key-value
,再按照由小到大的顺序写入一个新文件(storeFile)中。这个新文件将代替所有之前的文件,对外提供服务。
数据分区压缩的触发时机
数据分区压缩的触发时机有如下几点:
- MEMStore Flush
内存中的数据 Flush 刷写到硬盘上以后,会对当前 Store 中的文件进行判断,当数量达到阈值,则会触发 Compaction。 Compaction 是以 Store 为单位进行合并的。当 Flush 刷写完成后,整个 Region 的所有 Store 都会执行 Flush。
- 后台线程周期性的检查
Compaction Checker
线程定期检查是否触发Compaction Checker
会优先检查文件数量是否大于阈值,再判断是否满足Major Compaction
的条件的时间范围内,如果满足,则触发一次大合并Major Compaction
。
- 手动触发
-
由于很多业务担心 MajorCompaction 影响读写性能,所以选择在低峰期手动触发合并。
-
当用户修改表结构后,希望立刻生效,则手动触发合并。
</