1 hbase行健设计
遵循规则: 唯一 ,有序, 可识别性 ,读写性能的最佳优化
这种优化级别从左到右,逐渐递减。
同时,rowkey基本是由多个字段共同构建而成,可以根据业务需求,将这些字段用不同分隔符来间隔
比如用 a|b:c
比如电商的这个:
产品编码+用途:_ : 多种分隔符
时间戳_userID:djy
时间戳_userID:yhj
时间戳决定唯一有序, useID决定可识别,djy代金卷/yhj优惠卷 决定读写速度,因为用字母简写方式替代真实数据这样组成的rowkey会剪短,在大数据量下查询势必会减少IO.
rowkey补充:
rowkey是以字典顺序排序的。而存储的字节码,字典排序,我们知道,如果是字 母,那就是字母的顺序,比如,有两个rowkey,rowkey1:aaa222,rowkey2:bbb111,那么rowkey1是排在 rowkey2前面的,因为按字典,a排在b前面,如果rowkey2的第一位也是a,那么就根据第二位来比较,如果还相同,则比较第三为,后面同样.
我们在根据rowkey范围查询的时候,我们一般是知道startRowkey,如果我们通过scan只传startRowKey : d开头的,那么查询的是所有比d大的都查了,而我们只需要d开头的数据,那就要通过endRowKey来限制。我们可以通过设定endRowKey为:d 开头,后面的根据你的rowkey组合来设定,一般是加比startKey大一位。比如说rowkey设计为:用户ID-日期,那么查某个用户某天的数 据,startKEY为3231-20121212,endKey为:3231+201213,那么你查到的就是用户为3231在20121212这一天 的数据。
2 1 region有三个要素:
属于哪张表
它所包含的第一行(第一个region没有首行)
它所包含的最后一行(末一个region没有末行)
这个首行末行在 hadoop3:60010/table
3 region 分配不均匀:
提问:region分配不均匀,总是分配到少数节点上,这样读写并发效率会较低??
回答:
当表初写数据时,此时表只有一个region ,当随着数据的增多,region 开始变大,等到它达到限定的阀值大小时,变化把region 分裂为两个大小基本相同的region,
而这个阀值就是storefile 的设定大小(参数:hbase.hregion.max.filesize 新版本默认10G),---->
,在第一次分裂region之前,所有加载的数据都放在原始区域的那台服务器上,随着表的变大
region是属于单一的regionserver,除非这个regionserver宕机或者挂掉,或者执行balance时,才会将这部分的region信息转义到其他机器上。
4 行加锁:
HBase的锁 是行锁,无论对行进行访问的事物有多少列,那对此行的更新都会是原子操作,要么成功,要么失败,不会存在部分成功的情况。
即:如果只更新一个行1000个列中的一个列,那也会对正行加锁。
5 ZK的作用
协调和服务于分布式应用程序的服务。
zk存储 -ROOT-表的地址, Hmaster地址, Hregionserver地址
zk通过选举方式避免 hmaster单节点
6 Hmaster
htable ddl操作 + region分配
7 Hregionserver
响应clent请求,和hdfs交互,
一个表在行级别上可以分为多个region,
每个region在进行进一步封装就成了一个个的Hregion对象。
1个hregion = W个hstore = W个列族(列族个数和hstore个数一一对应) ---> 相同属性数据应该放在同一列族中,这样存储时候会放在同样hstore下,这样client访问时
就不需要跨hstore,减少磁盘寻址。
Hstore = memstore + storefile组成,
memstore: store memory buffer, 客户端写入数据到memstore到阈值(默认128M)后flush到storefile后存储在硬盘中。
在flush时,regionserver flush将请求添加到队列,模拟生产-消费模式来异步处理,当队列来不及消费,产生大量积压请求时,会导致内存徒增,最坏出现OOM.
在一个Region下 每个Column Family 一个HStore ,那多个Column Family 这样问题出来了,如果一个HStore数据量大,而另外一个HStore 仅有几条数据,会同时 flush吗? 对
这个特性告诉我们: Hbase表设计的时候尽量设置单一ColumnFamily的表,否则Hbase不能很好的处理上面类似的问题.
hbase.regionserver.global.memstore.upperLimit 默认 0.4 也就是40%为了防止MemStore占用总内存过大,当RegionServer所有Region达到总heap内存的40%,
Hbase会Block所有的更新,来flush所有的MemStore,并释放MemStore占用的内存
hbase.regionserver.global.memstore.lowerLimit 默认是 0.35 也就是 35%,当该RegionServer 下所有的MemStore达到 总Heap 内存的35%时
触发flush个别占用内存大的MemStore,这是会做block,写更新还 是会收影响。 ----> 这个没看懂啊
相关推荐
资源回答:Rowkey设计时需要遵循三大原则?你们在使用hbase在使用遇到的问题?Hbase优化,你们是怎么做的?Hbase热点(数据倾斜)问题你们是怎么处理的?属于高频面试题
分数不让我设定(最好是0)包含原理概念、架构、单机安装、分布式安装,HBase的优化及Phoenixd的一点拓展知识,二叉树,B树等等。。
hbase学习-脑图总结,涵盖了大部分基础知识点,下个脑图查看器即可,方便大家学习
Hbase学习总结.rar
大数据 Hbase的学习个人总结文档,主要讲述了,Hbase的基础知识
hbase 文档,自己总结的,方便初学者快速上手!
Hbase学习总结,很不错的资源,对你绝对有帮助
Zookeeper和Hbase安装总结手册.
超全的HBase知识体系总结
2018年HBase技术年度总结,介绍了HBASE的一些特性,以及相关的案例场景
HBase企业应用开发】工作中自己总结的Hbase文档,非常全面!
Hbase 性能 优化,Hbase 数据查询 插入参考
Hbase学习总结.pdf
这是我学了hbase之后整理的一些简单清晰的内容关于hbase的,hbase速成方法
hbase和hive常用命令总结
A.3实验三:熟悉常用的HBase操作 本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1...
本文档主要对hbase的优化进行了总结,对项目中使用hbase的调优具有一定的指导意义
Hadoop+Hbase搭建云存储总结
掌握Hbase shell操作。 1.2实验要求: 用Hbase shell操作创建一个student表,其结构如下表所示 Row Key address score province city street Java Hadoop Math zhangsan guangdong guangzhou yinglonglu 85 80 90 ...