使用 Hbase Shell 命令创建预分区表 - Yr-Zhang

博客园 · · 1212 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

对表进行预分区,可以防止单分区一次写入数据过大,hbase 集群本身还没来得及自动分裂,导致 region 宕掉的问题。

1、创建表时指定一个拆分点数组

split point 将定义n+1个区域,其中n是分割点的数量, point 为'10'时实际上是在指定字节分割'\x31\30'

hbase>create 't1','f',SPLITS => ['10','20','30']

获取rowkey的第一个字节,按照进行分割

hbase> create 't',{NAME => 'f0',VERSIONS => 1, COMPRESSION => 'snappy'},{NAME => 'f1',VERSIONS => 10000, COMPRESSION => 'snappy'},CONFIGURATION => {'SPLIT_POLICY' => 'org.apache.hadoop.hbase.regionserver.KeyPrefixRegionSplitPolicy','KeyPrefixRegionSplitPolicy.prefix_length' => '1'},SPLITS => ['2', '4', '6', '8']

2、使用 SPLITS_FILE 来指定一个文本文件,文件内写入拆分点。文件中的每一行都指定一个 split point key

hbase>create 't1','f',SPLITS_FILE=>'splits.txt'

3、根据所需的区域数量和分割算法自动计算分割。HBase 提供了基于均匀分割或基于十六进制键来分割键范围的算法,也可以提供自己的分割算法来细分键范围

# 基于随机算法创建一个有4默认个分区的表
hbase>create 't','f', { NUMREGIONS => 4 , SPLITALGO => 'UniformSplit' }
# 基于 hex keys 创建一个有4个默认分区的表
hbase>create 't','f', { NUMREGIONS => 4, SPLITALGO => 'HexStringSplit' }

说明:

NUMREGIONS:hbase 默认 HFile 的大小为 10G(hbase.hregion.max.filesize=10737418240=10G

HexStringSplit【占用空间大,rowkey是十六进制的字符串作为前缀的​】​​​​​​:Row是十六进制编码的长值,其范围为“00000000”=>“FFFFFFFF”,格式是MD5校验和或任何其他均匀分布的十六进制值的ASCII表示形式。

UniformSplit【占用空间小,rowkey前缀完全随机】:rowkey前缀完全随机,键的空间平均分割,当rowkey是近似一致的随机字节时(例如散列),建议使用这个。

DecimalStringSplit:rowkey是10进制数字字符串作为前缀的。

4、使用put给hbase表里的数据插入数据

put 't_gather_20231212','6322416212','engoff:beginUtc','1702311104',timestamp=1702311104324

注意,版本是根据timestamp来控制的,为13位的时间戳值

本文来自:博客园

感谢作者:博客园

查看原文:使用 Hbase Shell 命令创建预分区表 - Yr-Zhang

1212 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传