我们在 HBase 中存储数据时遇到了一个问题。我们采取了这样的步骤:
- 大型 csv 文件(大小:20 G)正在由 Spark 应用程序处理,结果是 hfiles(结果数据大小:180 G)。
- 使用命令创建表:
'TABLE_NAME', {'NAME'=>'cf', 'COMPRESSION'=>'SNAPPY'}
- 使用命令
hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles -Dhbase.mapreduce.bulkload.max.hfiles.perRegion.perFamily=1024 hdfs://ip:8020/从创建的 hfiles 中批量加载数据路径 TABLE_NAME
加载表后大小为 180 G,但是在一段时间后(昨天晚上 8 点,两天前早上 8 点左右)启动一个进程,将数据压缩到 14 G。
我的问题是这个过程的名称是什么?那是一个主要的压实吗?因为我正在尝试手动触发压缩(major_compact 和 compact),但这是在未压缩表上启动的命令的输出:
hbase(main):001:0> major_compact 'TEST_TYMEK_CRM_ACTION_HISTORY'
0 row(s) in 1.5120 seconds
最佳答案
这是压缩过程。对于 table 大小如此大的差异,我可以提出以下原因。使用 Spark 应用程序,您不会对 HFile 使用压缩编解码器,因为它在文件创建后指定它。表的 HFiles 附件不会改变它的格式(HDFS 中的所有文件都是不可变的)。只有经过压缩过程,数据才会被压缩。您可以通过 HBase UI 监控压缩过程;它通常在 60000 端口上运行。
关于hadoop - HBase 表大小在一段时间后减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45865046/