HBase compaction了解和手动触发major_compaction方法

本文详细介绍了HBase中Major Compaction的作用及其实现方法,包括通过Shell命令和Java API来触发不同层级的Compaction操作,并对平衡开关的正确使用进行了说明。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Major Compaction 的作用:

1.将一个Region下的所有StoreFile合并成一个StoreFile文件
2.对于删除、过期、多余版本的数据进行清除
3.提高读写数据的效率

HBase中的两种compaction方式:

1.Minor compaction:只用来做部分文件的合并操作以及包括minVersion=0并且设置ttl的过期版本清理,不做任何删除数据、多版本数据的清理工作。

2.Major compaction:是对Region下的HStore的所有StoreFile执行合并操作,最终的结果是整理合并出一个文件。

手动触发major_compaction方法:

一、shell方法
进行操作前先将balancer关闭,操作完成后再打开balancer

balance_switch false  # 关闭region
major_compact 't1'  # Compact all regions in a table
# major_compact 'r1'  # Compact an entire region
# major_compact 'r1', 'c1'  # Compact a single column family within a region
# major_compact 't1', 'c1' # Compact a single column family within a table
balance_switch true # 开启region

定时执行脚本:

#!/bin/bash
source /etc/profile
sh ./hbase shell <<EOF
balance_switch false
major_compact 'region_name','columnfamily'
balance_switch true
EOF

hbase balance命令走过的坑:
开启或关闭自动 balance, 返回的是之前的状态, 切记不是返回当前状态。
balance_switch status 命令返回的是之前的状态。

对于自动balance来说, 只需要关注三个命令:
balance_switch false #关闭自动balance
balancer_enabled #查看自动balance当前状态,切记不要使用balance_switch status 命令造成误导
balance_switch true #开启自动balance

二、java api

  • public void compact(TableName tableName)
  • public void compact(TableName tableName, byte[] columnFamily) # 对部分StoreFile进行 compact
  • public void majorCompact(TableName tableName,)
  • public void majorCompact(TableName tableName, byte[] columnFamily) # 对Region下的HStore的所有StoreFile执行合并操作
  • public void compactRegion(final byte[] regionName)
  • public void compactRegion(final byte[] regionName, final byte[] columnFamily)
  • public void majorCompactRegion(final byte[] regionName)
  • public void majorCompactRegion(final byte[] regionName, final byte[] columnFamily)
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Admin;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import java.io.IOException;

/**
* majorCompact
*/
public class MajorCompact {
	public static void main(String[] args) throws IOException {
		String[] tableList = {"tablename1","tablename2"};

		Configuration conf = HBaseConfiguration.create();
		conf.set("hbase.zookeeper.quorum", "zk1,zk2,zk3");
		
		Connection connection = ConnectionFactory.createConnection(conf);
		Admin admin = connection.getAdmin();
	
		for (String table : tableList) {
			TableName table_name = TableName.valueOf(table);
			if (admin.tableExists(table_name)) {
				admin.majorCompact(table_name);
				System.out.println("[------]major compact " + table_name.getNameAsString());
				}
			}
			admin.close();
			connection.close();
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值