环境:centos7+hadoop3.0.3+hbase2.0.1+jdk8
HBase的MapReduce操作
注意事项:
Map继承TableMapper
Reduce继承TableReducer
最后Reduce输出的value的类型是Mutation
通过TableMapReduceUtil来设置相关信息
实例:统计行键并添加到指定列族
HBase的用户权限控制
简介:
R - 代表读取权限
W - 代表写权限
X - 代表执行权限
C - 代表创建权限
A - 代表管理权限
配置权限
修改配置文件hbase-site.xml
添加内容1234567891011121314151617181920<property><name>hbase.superuser</name><value>hbase</value></property><property><name>hbase.coprocessor.region.classes</name><value>org.apache.hadoop.hbase.security.access.AccessController</value></property><property><name>hbase.coprocessor.master.classes</name><value>org.apache.hadoop.hbase.security.access.AccessController</value></property><property><name>hbase.rpc.engine</name><value>org.apache.hadoop.hbase.ipc.SecureRpcEngine</value></property><property><name>hbase.security.authorization</name><value>true</value></property>授予权限
给用户’HBaseTest’授予所有权限
grant 'HBasetest','RWXCA'
- 撤销权限
撤销用户’HBaseTest’所有权限
revoke 'HBaseTest'
- 列出指定表的权限
列出表’student’的所有权限
user_permission 'student'
列族的高级配置
可配置的数据块大小
HFile数据块大小可以放在列族层次设置,本质和hdfs数据块不是一回事,是在hbase内部,把Hfile划分成了块,默认大小是64k。每个数据块都会将索引值放入hfile中,块越小那么数据小,hfile中索引值越多占用容量越大,带来的效果是随机访问性能更好。如果每个数据块体积变大,那么hfile中索引值占用容量越小,能让更多的数据加载进入内存,从而提高顺序访问性能。
create ‘mytable’,{NAME=>’cf1’,BLOCKSIZE=>’65536’}数据块缓存
把数据放进读缓存里并不一定能提高效率,比如,一张表或者表中的列族,只是偶尔进行get和scan,那么有无此缓存功能都无所谓,并不会提高效率。此外,再比如,如果一张表或者表中的列族,高频率的进行scan操作,那么会造成缓存滥用的情况,很有可能把真正能提高性能的数据排挤出缓存。为了避免上述情况发生,可以关闭缓存功能,缓存功能默认是打开的。
create ‘mytable’,{NAME=>’cf1’,BLOCKCACHE=>’false’}激进缓存
可以选择一些列族,赋予他们在数据块缓存中有更高的优先级,从而可以提高他们被缓存的概率,以及减小被从缓存中删除的概率。要注意此属性,除了让此列族比其他列族更激进外无其他特殊功能。默认值为false
create ‘mytable’,{NAME=>’cf1’,IN_MEMORY=>’true’}布隆过滤器
布隆过滤器允许对存储在每个数据块的数据做一个反向测试,当某行被请求时,先检查布隆过滤器,看看该行在不在这个数据块中,返回结果不在或者 不确定在不在,那么可以减少访问block的次数,从而提高随机访问的效率
布隆过滤器会占用额外的内存空间,并且随着表数据的增长而增长,当空间不是问题时,在数据量较大的情况下,布隆过滤器的性能尤为突显。
create ‘mytable’,{NAME=>’cf1’,BLOOMFILTER=>’ROWCOL’}
ROW只针对rowkey进行过滤,get提高效率,scan无影响
ROWCOL指既针对rowkey也针对qualifier进行过滤,get提高效率, scan看情况,如果scan有针对列名在操作则提高效率,如果没有则无影响生存时间
早于TTL值所指定时间的数据,会在下一次大合并时会被删除。在同一个单元上的多个时间版本的数据也生效。 可以禁用,也可以设置值为INT.MAX_VALUE 即永远启用,单位:秒。
create ‘mytable’,{NAME=>’cf1’,TTL=>’18000’}压缩
HFile可以被压缩并存放在HDFS上,这有助于节省硬盘空间,但是读写压缩数据会抬高CPU的利用率。推荐启用压缩,除非能确定压缩不会带来益处,或者CPU利用率有限制。
Hbase有多种压缩编码,LZO,Snappy,GZIP前两者是流行的两种,但是LZO受版权影响需要单独安装,故常用Snappy。注意,数据只有在硬盘上是压缩的,在内存中或者网络传输时是没有压缩的。
create ‘mytable’,{NAME=>’cf1’,COMPRESSION=>’SNAPPY’}
协处理器Coprocessor
简介:
HBase变成数据处理工具
处理数据的压力放在服务器端
给HBase添加新的行为
- Observer
Observer类似于传统数据库中的触发器,当发生某些事件的时候这类协处理器会被Server端调用。Observer Coprocessor 就是一些散布在HBaseServer端代码中的hook钩子,在固定的事件发生时被调用。比如:put操作之前有钩子函数prePut,该函数在put操作执行前会被RegionServer调用;在put操作之后则有postPut钩子函数 - EndPoint
Endpoint协处理器类似传统数据库中的存储过程,客户端可以调用这些 Endpoint协处理器执行一段Server端代码,并将Server端代码的结果返回给客户端进一步处理,最常见的用法就是进行聚合操作。
HBase的热点效应
- 产生原因
- row key单调递增
- 表采用默认分区
检索HBase的记录首先要通过row key来定位数据行。当大量的client访问HBase集群的一个或少数几个节点,造成少数Region Server的读写请求过多、负载过大,而其他Region Server负载却很小,就造成了“热点”现象
- 解决方案
- row key不采用单调递增算法,可以采用随机算法生成
- 考虑数据分布情况,合理安排row key范围进行预分区
最后更新: 2018年11月21日 16:09