1.2 RowKey对Region划分影响 HBase 表的数据是按照 RowKey 来分散到不同 Region,不合理的 RowKey 设计会导致热点问题。...不合理的 RowKey 设计会导致热点问题。 热点问题是大量的 Client 直接访问集群的一个或极少数个节点,而集群中的其他节点却处于相对空闲状态。 2....RowKey设计技巧 3.1 热点问题 HBase 中的行是以 RowKey 的字典序排序的,这种设计优化了 Scan 操作,可以将相关的行以及会被一起读取的行存储在临近位置。...3.2 单调递增问题 在汤姆·怀特(Tom White)的《 Hadoop:权威指南》的 HBase 一章中,有一个优化注意事项:所有客户端一段时间内一致写入某一个 Region,然后再接着一起写入下一个...3.3 尽量减小行和列的大小 在 HBase 中,RowKey、列名、时间戳总是跟值一起发送。如果 RowKey 和列名比较大,尤其是与单元格值大小相比差异不大时,可能会遇到一些问题。
rowKey的作用 读写数据时通过 RowKey 找到对应的 Region; MemStore 中的数据按 RowKey 字典顺序排序; HFile 中的数据按 RowKey 字典顺序排序。...rowkey设计原则 唯一性:类似于MySQL、Oracle中的主键,用于标示唯一的行; 随机性:有效解决hbase热点问题,避免大量客户端只访问一个或几个节点; 长度设计:越短越好,8字节的整数倍利用了操作系统的最佳特性...如太长会影响HFile的存储效率;且MemStore将缓存部分数据到内存,内存的有效利用率会降低,检索效率低。...解决hbase热点问题 即增加rowkey的随机性,常见一下三种做法: 反转:如手机号或者时间等,开始位相似性较高,手机号第一位都是1,结束位有一定随机性,做rowkey时反转即可 加盐:在rowkey...前加随机数 hash处理:建议使用MD5 ---- 你是砍柴的,他是放羊的,你和他聊了一天,你们决定合作一起开个烤全羊的店,你的柴烤出来的羊很美味,他的羊纯天然的,几年后你们公司上市了...
经常查 避免热点 尽量短,并且尽量长度一致
由于在HBase中数据存储是Key-Value形式,若HBase中同一表插入相同Rowkey,则原先的数据会被覆盖掉(如果表的version设置为1的话),所以务必保证Rowkey的唯一性. 2.Rowkey...的排序原则 HBase的Rowkey是按照ASCII有序设计的,我们在设计Rowkey时要充分利用这点。...拿常见的时间戳举例,假如Rowkey是按系统时间戳的方式递增,Rowkey的第一部分如果是时间戳信息的话将造成所有新数据都在一个RegionServer上堆积的热点现象,也就是通常说的Region热点问题...Region热点问题 1、Reverse反转 针对固定长度的Rowkey反转后存储,这样可以使Rowkey中经常改变的部分放在最前面,可以有效的随机Rowkey。...反转Rowkey的例子通常以手机举例,可以将手机号反转后的字符串作为Rowkey,这样的就避免了以手机号那样比较固定开头(137x、15x等)导致热点问题,这样做的缺点是牺牲了Rowkey的有序性。
hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储。...rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据。所以 rowkey的设计是至关重要的,关系到你应用层的查询效率。...时间属性放在rowkey中需要注意数据分布和并发度的问题:hbase数据是按照rowkey排序的,时间属性放在rowkey中容易造成数据总是在末尾写入的情况,这种情况下并发度很差。...循环key使用 (1)存在问题 如果rowkey中有时间属性,并且随着时间的增加,rowkey会不断的增大下去的话,会造成region数量不断地增加。...根据hbase的原理,key的周期需要至少比TTL大2* hbase.hregion.majorcompaction(默认24小时)的时间,才能够保证过期的数据能够在key循环回来之前得到完全清理。
本篇博客小菌为大家带来的是HBase的rowKey设计技巧!...HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位...HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式: 通过get方式,指定rowkey获取唯一一条记录 通过scan方式,设置startRow和stopRow参数进行范围匹配...反转rowkey的例子以手机号为rowkey,可以将手机号反转后的字符串作为rowkey,这样的就避免了以手机号那样比较固定开头导致热点问题 4.时间戳反转 一个常见的数据处理问题是快速获取数据的最近版本...,使用反转的时间戳作为rowkey的一部分对这个问题十分有用,可以用 Long.Max_Value - timestamp 追加到key的末尾,例如 [key][reverse_timestamp] ,
HBase应用场景非常广泛;社区前面有一系列文章。大家可以到社区看看看;张少华同学本篇主要讲HBASE最重要的一个基础知识,rowkey的涉及,非常赞!大力推荐!...HBase查询只能通过其rowkey来查询(我们可以认为是HBase中表的唯一索引)。...所以rowkey的设计在使用HBase的设计中尤为重要,另外rowkey设计也关乎到数据库中数据的存放位置,若rowkey设计不当,在HBase分区中,会引发数据热点(hotspot)问题出现,即数据访问集中在某个节点或者...由于在HBase中数据存储是k-v形式,若在HBase中同一表的同一列插入相同rowkey(除自带版本),则原先的数据会被覆盖掉,所以为了保证rowkey的唯一性,在实际的设计中我们可能更多的是结合多种设计方法来实现...+二级目录 以MD5的前四位作为rowkey的第一部分,可以把数据散列,让服务器负载均衡,避免热点问题。
开头,先功夫一个好消息,浪尖的微信公众号支持内容搜索了,入口请点击原文阅读。 https://data.newrank.cn/m/s.html?
一直以来对rowkey的设计都比较迷茫,《hbase权威指南》倒是给出了个还算靠谱的例子。...--- 如果我们想查某个用户发的信息,我们可以设置scan的start rowkey 为该userId,end rowkey...当我们要查某个具体的帖子的内容,rowkey过滤--即可。 所以rowkey的设计是要看具体的应用的。...上面这个例子没有考虑热点的问题,实际上每个用户的帖子被访问的热度是不一样的,有些帖子被大量访问,有的无人问津。 那怎么办呢?有的书上写,在前面加0-n的随机数,random % 机器数 。...在和支付宝的工程狮聊了一下,他们是这样处理的取md5(userId)的前4位+reverse(userId)这个样子来处理userId,这样子的话,能解决热点的问题,也可以逆推出来rowkey。
HBase中的rowkey是按字典顺序排序的,通过rowkey查询可以对千万级的数据实现毫秒级响应。然而,如果rowkey设计不合理的话经常会出现一个很普遍的问题----热点。...当大量client的请求(读或者写)只指向集群的一个节点,或者很少量的几个节点时,也就代表产生了热点问题。...,rowkey也就会随机的添加前缀,写到不同的region中 缺点:加盐虽然可以很大程度的避免热点问题,提升写入效率,但是由于rowkey被随机的添加了salt值,在读取时候要付出额外的开销。...第四:最小化rowkey和列簇长度 rowkey可以是任意的字符串,最大长度64KB,但是建议在设计rowkey时候,尽可能的短,原因: 1.hbase数据存储是以key-value的形式存储的,如果...,在hbase shell界面查数据的时候,可读性比较差,比如: hbase(main):002:0> get 'table1', 'rowkey1' COLUMN
RowKey 设计 HBase 作为一款分布式的NoSQL数据库,数据的分布根据rowKey range方式来划分,每个Region 存储了一定范围rowKey 的数据, 数据的读写通常情况下需要指定rowKey...散列原则 设计的RowKey应均匀的分布在各个HBase节点上,避免产生热点。...在此过程中,会产生两个问题:1.数据往一个region上写,会有写热点问题。2.region split会消耗宝贵的集群I/O资源。...HexStringSplit HBase 自带的十六进制的字符串预分区算法,那么在rowKey 设计时通常使用hash后字符串作为前缀或者完整的RowKey。...这种方式也解决掉了按照不同字段排序问题,不需要存储多份数据。但是同时也引入查询的复杂性与数据一致性问题。
在阐述HBase高级特性和热点问题处理前,首先回顾一下HBase的特点:分布式、列存储、支持实时读写、存储的数据类型都是字节数组byte[],主要用来处理结构化和半结构化数据,底层数据存储基于hdfs。...row key设计 HBase中rowkey可以唯一标识一行数据,在HBase查询的时候,主要以下两种方式: get:指定rowkey获取唯一一条记录 scan:设置startRow和stopRow参数进行范围匹配...row key,将row key中经常变化的部分(即相对比较随机的部分)放在前面,这种方式的弊端就是失去了rowkey的有序性。...最常用的就是,用户的订单数据存储在HBase中,利用手机号后4位通常是随机的的特性,以用户的手机号反转再根据业务场景加上一些其他数据拼成row key或者是仅仅使用反转后的手机号作为row key,从而避免以手机号固定开头导致的热点问题...HBase热点问题及处理 HBase中热点问题其实就是数据倾斜问题,由于数据的分配不均匀,如row key设计的不合理导致数据过多集中于某一个或某几个region server上,会导致这些region
HBase的rowkey设计可以说是使用HBase最为重要的事情,直接影响到HBase的性能,常见的RowKey的设计问题及对应访问为: Hotspotting 的行由行键按字典顺序排序,这样的设计优化了扫描...,变成了下一个region… 如果使用了单调递增或者时序的key便会造成这样的问题。...如果需要导入时间顺序的文件(如log)到HBase中,可以学习OpenTSDB的做法。它有一个页面来描述它的HBase模式。...倒序时间戳 一个数据库处理的通常问题是找到最近版本的值。采用倒序时间戳作为键的一部分可以对此特定情况有很大帮助。...尽管例子中解决的问题是关于16位键的键空间,但其他任何空间也是同样的道理。
一:hbase的存储形式 hbase的内部使用KeyValue的形式存在,其key是有rowkey:family:column:logTime,value是其存储的内容。...这样可以提高查询数据的速度。这样,最重要的提高索引速度的就是设计合适的rowkey。 二:rowkey的设计原则 1、长度原则 最短越好,最大不能超过64K。...2、唯一原则 保证rowkey的唯一性,这条没有什么要讲的。 3、自己一条原则 尽量保证经常一起用的rowkey存储在同一个region上,有助于提升检索效率。但要避免热点问题。...三:rowkey引起热点问题的集中解决方法 1、加盐:在rowkey前面加一个冗余信息,这样可以把数据分散到不同的region中。...优点:可以有效的防止rowkey集中分配到一个或多个region中。有效避免了热点问题; 缺点:无形中增加了rowkey的长度;范围检索得不到有效使用。
Hbase的原型来自Google的BigTable,各方面性能优异,这其实得益于Hbase的内部设计。今天的大数据入门分享,我们就来具体讲讲,Hbase Rowkey设计。...HBase通过Rowkey进行划分,在设计Rowkey时,如有大量连续编号的Rowkey,会导致大量Rowkey相近的记录集中在个别region里,也就是集中在一台或几台regionServer当中。...HBase将部分数据加载到内存当中,如果Rowkey过长,内存的有效利用率就会下降。...如果不进行散列处理,首字段直接使用时间信息,所有该时段的数据都将集中到一个regionServer当中,这样当检索数据时,负载会集中到个别regionServer上,造成热点问题,会降低查询效率。...但是这里的量不能太大,如果太大需要拆分到多个节点上去。 关于大数据入门,Hbase Rowkey设计,以上就为大家做了简单的介绍了。
熟悉 HBase 的同学肯定知道,要看 HBase 的表设计的好不好,关键是看其 Rowkey 设计的好不好,HBase 的 Rowkey 设计会考虑到实际的查询场景。...(因为本文侧重于介绍 HBase 的 Rowkey 设计,所以关于 OpenTSDB 的其他一些知识本文并不会涉及,如果你对这部分知识感兴趣,请自行去网上搜索相关文章。)...2.1 Rowkey 设计版本一 OpenTSDB 为我们提供的查询业务场景已经有了,我们可以很快设计出 HBase 的 Rowkey: metric + timestamp + tagk1 + tagv1...有些同学可能已经看出来了,如果我们按照这样的方式去设计 HBase 表的 Rowkey,虽然可以满足我们的查询需求,但是这种存储数据的方式导致 Key 大量的重复存储,这样会导致数据的急剧增加,所以 OpenTSDB...基于这个特点,OpenTSDB 对 Rowkey 进行了进一步的优化,思想为:将 Rowkey 中时间戳由原来的秒级别或毫秒级别统一转换成小时级别的,多余的秒数据或者毫秒数据作为 HBase 的列名称。
在 HBase 的这个 split 的过程当中,会出现两个问题: 第一,就是我们所说的热点问题(下面会详细介绍),数据会继续往一个 Region 中写,出现写热点问题; 第二,则是拆分合并风暴,当用户的...但是其中的 split 操作同样是高 I/O 的操作。 1.2 预分区的意义 为了解决这些问题,预分区就是一种很好的方法,通常预分区可以和 rowkey 的设计结合起来使用。...因此可以通过预分区,避免出现 split 过程中的热点问题和拆分合并风暴。 在进行预分区之前,需要明确 rowkey 的取值范围和构成逻辑,将数据要存放的分区大致规划好。...3rowkey 设计方法 良好的 rowkey 设计,应当遵循以上四大原则,并且能让数据分散,从而避免热点问题。下面介绍几种常用的 rowkey 设计方法。...因此,我们可以将手机号反转后的字符串作为 rowkey,这样就避免了较为固定的起始字符串(如 138、159、189)导致的热点问题。身份证号码也同样适用。
Hbase Rowkey CF 架构 概述 预分区及Rowkey设计 学习笔记 1. 概述 HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。...2.2 Rowkey Rowkey的概念和mysql中的主键是完全一样的,Hbase使用Rowkey来唯一的区分某一行的数据。...由于Hbase只支持3中查询方式: 基于Rowkey的单行查询 基于Rowkey的范围扫描 全表扫描 因此,Rowkey对Hbase的性能影响非常大,Rowkey的设计就显得尤为的重要。...预分区与rowkey设计(如何解决数据倾斜和热点问题) HBase中的行是按照rowkey的字典顺序排序的,这种设计优化了scan操作,可以将相关的行以及会被一起读取的行存取在临近位置,便于scan。...这种设计是分布式系统一个很大的弊端,而且这样导致数据倾斜和热点问题,从而导致集群的资源得不到很好的利用。
在HBase中,定位一条数据(即一个Cell)需要4个维度的限定:行键(RowKey)、列族(Column Family)、列限定符(Column Qualifier)、时间戳(Timestamp)。...其中,RowKey是最容易出现问题的。除了根据业务和查询需求来设计之外,还需要注意以下三点。 1. 打散RowKey HBase中的行是按照RowKey字典序排序的。...控制RowKey长度 在HBase中,RowKey、列族、列名等都是以byte[]形式传输的。 RowKey的最大长度限制为64KB,但在实际应用中最多不会超过100B。...设计短RowKey有以下两方面考虑: 在HBase的底层存储HFile中,RowKey是KeyValue结构中的一个域。...同样地,列族、列名的命名在保证可读的情况下也应尽量短。HBase官方不推荐使用3个以上列族,因此实际上列族命名几乎都用一个字母,比如‘c’或‘f’。 3.
HBase的存储形式 hbase的内部使用KeyValue的形式存储,其key时rowKey:family:column:logTime,value是其存储的内容。...在做RowKey设计时,请先考虑业务是读比写多,还是读比写少,HBase本身是为写优化的,即便是这样,也可能会出现热点问题,而如果我们读比较多的话,除了考虑以上RowKey设计原则外,还可以考虑HBase...如RowKey是按系统时间戳的方式递增,RowKey的第一部分如果是时间戳的话,将造成所有新数据都在一个RegionServer堆积的热点现象,也就是通常说的Region热点问题,热点发生在大量的client...反转RowKey的例子通常以手机举例,可以将手机号反转后的字符串作为RowKey,这样就避免了以手机号那样比较固定开头导致热点问题。这样做的缺点是牺牲了RowKey的有序性。...一个常见的数据处理问题是快速获取数据的最新版本,使用反转的时间戳作为RowKey的一部分对这个问题十分有用,可以用Long.Max_Value - timestamp追加到key的末尾。
领取专属 10元无门槛券
手把手带您无忧上云