如何统计HBase中每个列族下包含的列总数量
HBase表各列族下列总数量统计方案
方案1:通过HBase Shell快速统计
适用于小表快速查询的场景:
- 统计列族
f的去重列名总数量(同一列不管有多少版本、出现在多少行,只计数1次)
echo "scan 'T', {COLUMNS => 'f', VERSIONS => 1}" | hbase shell | awk -F 'column=f:' '{if($2) print $2}' | awk -F '=' '{print $1}' | sort -u | wc -l
- 统计列族
m的去重列名总数量
echo "scan 'T', {COLUMNS => 'm', VERSIONS => 1}" | hbase shell | awk -F 'column=m:' '{if($2) print $2}' | awk -F '=' '{print $1}' | sort -u | wc -l
特殊统计场景调整:如果需要统计所有列的条目总数(含同一列的多版本、多行行级重复),直接去掉命令中的
sort -u参数即可。
方案2:通过Java API代码实现
适用于大表统计、或者需要集成到业务逻辑的场景,核心逻辑是遍历目标列族的所有单元格,去重后计数:
import org.apache.hadoop.hbase.*; import org.apache.hadoop.hbase.client.*; import org.apache.hadoop.hbase.util.Bytes; import java.util.HashSet; import java.util.Set; public class CountHBaseColumns { public static void main(String[] args) throws Exception { Configuration conf = HBaseConfiguration.create(); // 按需配置HBase集群ZK地址 conf.set("hbase.zookeeper.quorum", "你的ZK节点地址"); Connection conn = ConnectionFactory.createConnection(conf); Table table = conn.getTable(TableName.valueOf("T")); // 统计f列族的去重列数量 Scan scanF = new Scan(); scanF.addFamily(Bytes.toBytes("f")); scanF.setMaxVersions(1); // 每个列只取1个版本实现去重 ResultScanner scannerF = table.getScanner(scanF); Set<String> fColumns = new HashSet<>(); for (Result res : scannerF) { res.rawCells().forEach(cell -> fColumns.add(Bytes.toString(CellUtil.cloneQualifier(cell)))); } System.out.println("列族f的列总数量:" + fColumns.size()); scannerF.close(); // 统计m列族逻辑同上,替换列族名称即可 Scan scanM = new Scan(); scanM.addFamily(Bytes.toBytes("m")); scanM.setMaxVersions(1); ResultScanner scannerM = table.getScanner(scanM); Set<String> mColumns = new HashSet<>(); for (Result res : scannerM) { res.rawCells().forEach(cell -> mColumns.add(Bytes.toString(CellUtil.cloneQualifier(cell)))); } System.out.println("列族m的列总数量:" + mColumns.size()); scannerM.close(); table.close(); conn.close(); } }
注意事项
- 表数据量超过100万行时,不建议直接使用Shell的scan方案,会占用大量集群IO资源,可改用MapReduce任务或者HBase协处理器做异步统计
- 如果只需要统计指定行范围的列,可在Scan对象中添加startRow、stopRow参数缩小扫描范围
内容的提问来源于stack exchange,提问作者khubeb
相关产品推荐
相关产品推荐

