千家信息网

hbase建表create高级属性 //hbase 表预分区也就是手动分区 这个很重要

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,2019/2/19 星期二hbase建表create高级属性 //hbase 表预分区也就是手动分区 这个很重要下面几个shell 命令在后续的hbase 操作中可以起到很到的作用,且主要体现在建表的
千家信息网最后更新 2025年01月23日hbase建表create高级属性 //hbase 表预分区也就是手动分区 这个很重要

2019/2/19 星期二

hbase建表create高级属性 //hbase 表预分区也就是手动分区 这个很重要

下面几个shell 命令在后续的hbase 操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性
1、BLOOMFILTER 默认是NONE 是否使用布隆过虑使用何种方式
布隆过滤可以每列族单独启用。使用HColumnDescriptor.setBloomFilterType(NONE |ROW | ROWCOL) 对列族单独启用布隆。Default = NONE 没有布隆过滤。对ROW,行键的哈希在每次插入行时将被添加到布隆。对ROWCOL,行键+ 列族+ 列族修饰的哈希将在每次插入行时添加到布隆
使用方法: create 'table',{BLOOMFILTER =>'ROW'}
启用布隆过滤可以节省必须读磁盘过程,可以有助于改进读取延迟

2、VERSIONS 默认是3 这个参数的意思是数据保留三个版本,如果我们认为我们的数据没有这么大的必要保留这么多,随时都在更新,而老版本的数据对我们毫无价值,那将此参数设为1 能节约2/3 的空间
使用方法: create 'table',{VERSIONS=>'2'}

3、COMPRESSION 默认值是NONE 即 不使用压缩
这个参数意思是该列族是否采用压缩,采用什么压缩算法
使用方法: create 'table',{NAME=>'info',COMPRESSION=>'SNAPPY'}
我建议采用SNAPPY 压缩算法,个压缩算法的比较网上比较多,我从网上摘抄一个表格作为参考,具体的snappy 的安装后续会以单独章节进行描述。
这个表是Google 几年前发布的一组测试数据,实际测试Snappy 和下表所列相差无几。HBase 中,在Snappy 发布之前(Google 2011 年对外发布Snappy),采用的LZO 算法,
目标是达到尽可能快的压缩和解压速度,同时减少对CPU 的消耗;在Snappy 发布之后,建议采用Snappy 算法(参考《HBase: The Definitive Guide》),具体可以根据实际情况对LZO 和Snappy 做过更详细的对比测试后再做选择。
Algorithm(算法) % remaining(剩余) Encoding(编码) Decoding(解码)
GZIP 13.4% 21 MB/s 118 MB/s
LZO 20.5% 135 MB/s 410 MB/s
Zippy/Snappy 22.2% 172 MB/s 409 MB/s
如果建表之初没有压缩,后来想要加入压缩算法,怎么办hbase 有另外的一个命令alter

4、alter
使用方法:
如修改压缩算法
disable 'table'
alter 'table',{NAME=>'info',COMPRESSION=>'snappy'}
enable 'table'
删除列族
disable 'table'
alter 'table',{NAME=>'info',METHOD=>'delete'}
enable 'table'
但是这样修改之后发现表数据还是那么大,并没有发生多大变化。怎么办
major_compact 'table' 命令之后才会做实际的操作。

5、TTL 默认是2147483647 即:Integer.MAX_VALUE 值大概是68 年
这个参数是说明该列族数据的存活时间也就是数据的生命周期单位是s 默写文章写的单位是ms 是错误的。
这个参数可以根据具体的需求对数据设定存活时间,超过存过时间的数据将在表中不在显示,待下次major compact 的时候再彻底删除数据
为什么在下次major compact 的时候删除数据,后面会具体介绍到。
注意的是TTL 设定之后MIN_VERSIONS=>'0' 这样设置之后,TTL 时间戳过期后,将全部彻底删除该family 下所有的数据,如果MIN_VERSIONS 不等于0 那将保留最新的MIN_VERSIONS 个版本的数据,其它的全部删除,比如MIN_VERSIONS=>'1' 届时将保留一个最新版本的数据,其它版本的数据将不再保存。

6、describe 'table' 这个命令查看了create table 的各项参数或者是默认值。

7、disable_all 'toplist.*' disable_all 支持正则表达式,并列出当前匹配的表的如下:
toplist_a_total_1001
toplist_a_total_1002
toplist_a_total_1008
toplist_a_total_1009
toplist_a_total_1019
toplist_a_total_1035
...
Disable the above 25 tables (y/n)? 并给出确认提示

8、drop_all 这个命令和disable_all 的使用方式是一样的

9、hbase 表预分区也就是手动分区
默认情况下,在创建HBase 表的时候会自动创建一个region 分区,当导入数据的时候,所有的HBase 客户端都向这一个region 写数据,直到这个region 足够大了才进行切分。一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region 分区情况,在集群内做数据的负载均衡。
使用方法:create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
也可以使用api 的方式
hbase org.apache.hadoop.hbase.util.RegionSplitter test_table HexStringSplit -c 10 -f info
参数很容易看懂test_table 是表名HexStringSplit 是split 方式 -c 是分10 个region -f 是family(列族)

这样就可以将表预先分为10个区,减少数据达到storefile 大小的时候自动分区的时间消耗,并且还有以一个优势,就是合理设计rowkey 能让各个region 的并发请求平均分配(趋于均匀) 使IO 效率达到最高,但是预分区需要将filesize 设置一个较大的值,设置哪个参数呢hbase.hregion.max.filesize 这个值默认是10G 也就是说单个region 默认大小是10G
这个值发生从0.90 到0.92 到0.94.3 从256M--1G--10G 这个根据自己的需求将这个值修改。

但是如果MapReduce Input 类型为TableInputFormat 使用hbase 作为输入的时候,就要注意了,每个region 一个map,如果数据小于10G 那只会启用一个map 造成很大的资源浪费,这时候可以考虑适当调小该参数的值,或者采用预分配region 的方式,并将
hbase.hregion.max.filesize 设为一个相对比较大的值,不容易达到的值比如1000G,检测如果达到这个值,再手动分配region。

前面说到了compact 为什么设置了TTL 超过存活时间的数据就消失了,是如何消失的呢?是删除了吗?通过哪些参数删除的。
后面将要说到hbase compact

例如建表语句为: //生产上,可以用于这样去创建hbase表
hbase(main):009:0> create 'NewsClickFeedback',{NAME=>'Toutiao',VERSIONS=>1,BLOCKCACHE=>true,BLOOMFILTER=>'ROW',COMPRESSION=>'SNAPPY',TTL => 2592000 },{SPLITS => ['1','2','a','b']}

提示:NAME=>'Toutiao' 列族为 Toutiao ;VERSIONS=>1 版本号为1 ;是否开启block cache缓存,默认开启。;
BLOOMFILTER=>'ROW' 布隆过滤器,优化HBase的随机读取性能,可选值NONE|ROW|ROWCOL,默认为NONE,该参数可以单独对某个列簇启用。COMPRESSION=>'SNAPPY' 压缩;过期时间 TTL => 2592000 为30天
{SPLITS => ['1','2','a','b']} 分区;一般采用hash + partition的方式预分配region,比如示例中rowkey首先使用md5 hash,然后再按照首字母partition为4份,就可以预分配4个region。

插入数据
put 'NewsClickFeedback', '1', 'Toutiao:name', 'zhangsan'
put 'NewsClickFeedback', '01', 'Toutiao:name', 'lisi'
put 'NewsClickFeedback', '100', 'Toutiao:name', 'wangwu'
put 'NewsClickFeedback', '4', 'Toutiao:name', 'liuliu'

IN_MEMORY
数据是否常驻内存,默认为false。HBase为频繁访问的数据提供了一个缓存区域,缓存区域一般存储数据量小、访问频繁的数据,常见场景为元数据存储。默认情况,该缓存区域大小等于Jvm Heapsize 0.2 0.25 ,假如Jvm Heapsize = 70G,存储区域的大小约等于3.2G。需要注意的是HBase Meta元数据信息存储在这块区域,如果业务数据设置为true而且太大会导致Meta数据被置换出去,导致整个集群性能降低,所以在设置该参数时需要格外小心。
//
IN_MEMORY表示常驻内存,用户如果在列族设置该参数为true,表示该列族对应的数据会常驻内存,一般建议如果是业务元数据,可以设置为常驻内存,另外,hbase:meta数据是常驻内存的。至于hbase:meta能不能执行split,本人在实际环境实际执行命令:split 'hbase:meta',结果还是一个region,并没有出现多个region,目前还是认为hbase:meta不能执行split。
HBase BlockCache系列 - 走进BlockCache http://hbasefly.com/2016/04/08/hbase-blockcache-1/ 在此链接中提到了IN_MEMORY=true
//而in-memory区表示数据可以常驻内存,一般用来存放访问频繁、数据量小的数据,比如元数据,用户也可以在建表的时候通过设置列族属性IN-MEMORY= true将此列族放入in-memory区。

blocksize
HFile会被切分为多个大小相等的block块,每个block的大小可以在创建表列簇的时候通过参数blocksize => '65535'进行指定,默认为64k,大号的Block有利于顺序Scan,小号Block利于随机查询,因而需要权衡。
//如果业务请求以Get请求为主,可以考虑将块大小设置较小;如果以Scan请求为主,可以将块大小调大;默认的64K块大小是在Scan和Get之间取得的一个平衡

参考链接为:HBase - 建表语句解析 http://hbasefly.com/2016/03/23/hbase_create_table/
HBase(八): 表结构设计优化:https://www.cnblogs.com/tgzhu/archive/2016/09/11/5862299.html

数据 参数 大小 时候 算法 布隆 时间 内存 命令 方式 方法 版本 使用方法 区域 实际 分配 也就是 情况 缓存 存储 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海新型网络技术材料 无法打开所登录的数据库 魔域物品数据库怎么设置叠加 安徽网络安全工程师简单易学 w网络安全大赛 网络安全与工程的复试科目 西安搜易网络技术 恒生科技互联网ETF要跌没啦 网络安全保护等级第三级证书 黎明觉醒服务器已上限该怎么进去 魔兽世界怀旧联盟大服务器 北京合声优客网络技术 什么是软件开发实训报告 服务器硬件能自动修复吗 数据库utf8中文排序规则 软gjb5000a软件开发 海康视频服务器管理后台 酒店的电脑网络安全吗 铜陵手机软件开发哪家好 深圳誉新软件开发有限公司 网络安全实习的实习目的 宝塔备份不了数据库 长春市委网络安全和信息 什么是软件开发实训报告 济宁计算机软件开发学校信息 青少年网络安全保护月 奉贤区通用软件开发服务产品介绍 数据库应用实践技术 苏州戴尔服务器新款 网络安全审计考研时间
0