首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

HBase RowKey 设计

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 和列名比较大,尤其是与单元格值大小相比差异不大时,可能会遇到一些问题。

1.8K20

Hbase rowkey设计原则,热点问题

rowKey的作用 读写数据时通过 RowKey 找到对应的 Region; MemStore 中的数据按 RowKey 字典顺序排序; HFile 中的数据按 RowKey 字典顺序排序。...rowkey设计原则 唯一性:类似于MySQL、Oracle中的主键,用于标示唯一的行; 随机性:有效解决hbase热点问题,避免大量客户端只访问一个或几个节点; 长度设计:越短越好,8字节的整数倍利用了操作系统的最佳特性...如太长会影响HFile的存储效率;且MemStore将缓存部分数据到内存,内存的有效利用率会降低,检索效率低。...解决hbase热点问题   即增加rowkey的随机性,常见一下三种做法: 反转:如手机号或者时间等,开始位相似性较高,手机号第一位都是1,结束位有一定随机性,做rowkey时反转即可 加盐:在rowkey...前加随机数 hash处理:建议使用MD5 ---- 你是砍柴的,他是放羊的,你和他聊了一天,你们决定合作一起开个烤全羊的店,你的柴烤出来的羊很美味,他的羊纯天然的,几年后你们公司上市了...

30520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    HBase的 rowkey 设计原则

    由于在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的有序性。

    97120

    HBase 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循环回来之前得到完全清理。

    36420

    HBase的rowKey设计技巧

    本篇博客小菌为大家带来的是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] ,

    92710

    HBase设计之rowkey设计

    HBase应用场景非常广泛;社区前面有一系列文章。大家可以到社区看看看;张少华同学本篇主要讲HBASE最重要的一个基础知识,rowkey的涉及,非常赞!大力推荐!...HBase查询只能通过其rowkey来查询(我们可以认为是HBase中表的唯一索引)。...所以rowkey的设计在使用HBase的设计中尤为重要,另外rowkey设计也关乎到数据库中数据的存放位置,若rowkey设计不当,在HBase分区中,会引发数据热点(hotspot)问题出现,即数据访问集中在某个节点或者...由于在HBase中数据存储是k-v形式,若在HBase中同一表的同一列插入相同rowkey(除自带版本),则原先的数据会被覆盖掉,所以为了保证rowkey的唯一性,在实际的设计中我们可能更多的是结合多种设计方法来实现...+二级目录 以MD5的前四位作为rowkey的第一部分,可以把数据散列,让服务器负载均衡,避免热点问题。

    2.4K60

    Hbase 学习(七) rowkey设计

    一直以来对rowkey的设计都比较迷茫,《hbase权威指南》倒是给出了个还算靠谱的例子。...--- 如果我们想查某个用户发的信息,我们可以设置scan的start rowkey 为该userId,end rowkey...当我们要查某个具体的帖子的内容,rowkey过滤--即可。 所以rowkey的设计是要看具体的应用的。...上面这个例子没有考虑热点的问题,实际上每个用户的帖子被访问的热度是不一样的,有些帖子被大量访问,有的无人问津。 那怎么办呢?有的书上写,在前面加0-n的随机数,random % 机器数 。...在和支付宝的工程狮聊了一下,他们是这样处理的取md5(userId)的前4位+reverse(userId)这个样子来处理userId,这样子的话,能解决热点的问题,也可以逆推出来rowkey。

    84470

    面试,HBase如何设计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

    1.1K10

    HBase RowKey 设计与查询实践

    RowKey 设计 HBase 作为一款分布式的NoSQL数据库,数据的分布根据rowKey range方式来划分,每个Region 存储了一定范围rowKey 的数据, 数据的读写通常情况下需要指定rowKey...散列原则 设计的RowKey应均匀的分布在各个HBase节点上,避免产生热点。...在此过程中,会产生两个问题:1.数据往一个region上写,会有写热点问题。2.region split会消耗宝贵的集群I/O资源。...HexStringSplit HBase 自带的十六进制的字符串预分区算法,那么在rowKey 设计时通常使用hash后字符串作为前缀或者完整的RowKey。...这种方式也解决掉了按照不同字段排序问题,不需要存储多份数据。但是同时也引入查询的复杂性与数据一致性问题。

    1.2K20

    HBase高级特性、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

    77920

    再谈|Rowkey设计_HBase表设计

    HBase的rowkey设计可以说是使用HBase最为重要的事情,直接影响到HBase的性能,常见的RowKey的设计问题及对应访问为: Hotspotting 的行由行键按字典顺序排序,这样的设计优化了扫描...,变成了下一个region… 如果使用了单调递增或者时序的key便会造成这样的问题。...如果需要导入时间顺序的文件(如log)到HBase中,可以学习OpenTSDB的做法。它有一个页面来描述它的HBase模式。...倒序时间戳 一个数据库处理的通常问题是找到最近版本的值。采用倒序时间戳作为键的一部分可以对此特定情况有很大帮助。...尽管例子中解决的问题是关于16位键的键空间,但其他任何空间也是同样的道理。

    1.2K21

    hbase的rowkey设计原则和实现方式

    一: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的长度;范围检索得不到有效使用。

    1.3K20

    大数据入门:Hbase Rowkey设计

    Hbase的原型来自Google的BigTable,各方面性能优异,这其实得益于Hbase的内部设计。今天的大数据入门分享,我们就来具体讲讲,Hbase Rowkey设计。...HBase通过Rowkey进行划分,在设计Rowkey时,如有大量连续编号的Rowkey,会导致大量Rowkey相近的记录集中在个别region里,也就是集中在一台或几台regionServer当中。...HBase将部分数据加载到内存当中,如果Rowkey过长,内存的有效利用率就会下降。...如果不进行散列处理,首字段直接使用时间信息,所有该时段的数据都将集中到一个regionServer当中,这样当检索数据时,负载会集中到个别regionServer上,造成热点问题,会降低查询效率。...但是这里的量不能太大,如果太大需要拆分到多个节点上去。 关于大数据入门,Hbase Rowkey设计,以上就为大家做了简单的介绍了。

    41110

    OpenTSDB 底层 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 的列名称。

    2.1K31

    优化 HBase - HBase 的预分区及 rowkey 设计原则与方法

    在 HBase 的这个 split 的过程当中,会出现两个问题: 第一,就是我们所说的热点问题(下面会详细介绍),数据会继续往一个 Region 中写,出现写热点问题; 第二,则是拆分合并风暴,当用户的...但是其中的 split 操作同样是高 I/O 的操作。 1.2 预分区的意义 为了解决这些问题,预分区就是一种很好的方法,通常预分区可以和 rowkey 的设计结合起来使用。...因此可以通过预分区,避免出现 split 过程中的热点问题和拆分合并风暴。 在进行预分区之前,需要明确 rowkey 的取值范围和构成逻辑,将数据要存放的分区大致规划好。...3rowkey 设计方法 良好的 rowkey 设计,应当遵循以上四大原则,并且能让数据分散,从而避免热点问题。下面介绍几种常用的 rowkey 设计方法。...因此,我们可以将手机号反转后的字符串作为 rowkey,这样就避免了较为固定的起始字符串(如 138、159、189)导致的热点问题。身份证号码也同样适用。

    4K34

    Hbase 基础 Rowkey CF 架构 概述 预分区及Rowkey设计 学习笔记

    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。...这种设计是分布式系统一个很大的弊端,而且这样导致数据倾斜和热点问题,从而导致集群的资源得不到很好的利用。

    1.3K51

    设计HBase RowKey需要注意的二三事

    在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.

    1.5K51

    HBase RowKey与索引设计 |「Hbase2.0常见问题性优化小总结续集」

    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的末尾。

    1.8K20
    领券