Skip to content

HBase note

mam edited this page Aug 10, 2017 · 3 revisions

查看HBase表行数

在hbase shell中,通过scan去扫描表来获取行数是一个相当耗时的工作。可通过如下方法来快速获取表行数:

$HBASE_HOME/bin/hbase org.apache.hadoop.hbase.mapreduce.RowCounter '$tablename'

结果如下:

org.apache.hadoop.hbase.mapreduce.RowCounter$RowCounterMapper$Counters
		ROWS=223943

HBase建表参数

HBase建表的参数及默认值如下:

参数 默认值 说明
DATA_BLOCK_ENCODING NONE 将重复的row/family/qualifier/进行压缩,减少block的空间占用,提高内存使用率,encode算法有NONE(不启用DATA_BLOCK_ENCODING)、PREFIX、DIFF、FAST_DIFF、PREFIX_TREE 等几种。
BLOOMFILTER ROW 用来提高随机读的性能,值有 ROW 和 ROWCOL 两种。
REPLICATION_SCOPE 0 是否复制。若希望复制该列族的话,设置该值为1。
VERSIONS 1 保留的版本数。
COMPRESSION NONE 是否压缩,可指定为SNAPPY,LZO,GZIP等。
MIN_VERSIONS 0 保留的最小版本数。
TTL FOREVER 过期时间,单位为秒,默认永不过期。若MIN_VERSIONS=0,删除所有过期的数据;若MIN_VERSION=N,保留最新的N份的数据,其余份数的数据将被删除。
KEEP_DELETED_CELLS false 基于时间的历史数据查询中是否可见?解释:在时间点T写入数据A,在T+X删除数据A,若该值为false,则查询[0, T+1)的数据时,A不会返回;若该值为true,查询[0, T+1)时将返回A。
BLOCKSIZE 65535 block大小,默认为64kb(65535byte)
IN_MEMORY false 数据块缓存保存这个列族相比其它列族更激进。即使设置为true,该列族也不会长久驻留cache而不被逐出cache, 当不断有新的in-memory的block被访问,而in-memory cache已达到上限时,旧的in-memory block就会被替换出去,除非所有in-memory的block的总体积小于in-memory cache。
BLOCKCACHE true 是否开启数据块cache。如果一个表或表的列族只被顺序化扫描访问或很少被访问,建议关掉BLOCKCACHE。

一些小点

  • 修改 hbase ttl 为 forever
    若表已创建,现需要将 ttl 调整为 forever,可指定 TTL => org.apache.hadoop.hbase.HConstants::FOREVER,注意不要加引号。
Clone this wiki locally