首页
学习
活动
专区
工具
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...排序原则 HBaseRowkey是按照ASCII有序设计,我们在设计Rowkey时要充分利用这点。...拿常见时间戳举例,假如Rowkey是按系统时间戳方式递增,Rowkey第一部分如果是时间戳信息的话将造成所有新数据都在一个RegionServer上堆积热点现象,也就是通常说Region热点问题...Region热点问题 1、Reverse反转 针对固定长度Rowkey反转后存储,这样可以使Rowkey中经常改变部分放在最前面,可以有效随机Rowkey。...反转Rowkey例子通常以手机举例,可以将手机号反转后字符串作为Rowkey,这样就避免了以手机号那样比较固定开头(137x、15x等)导致热点问题,这样做缺点是牺牲了Rowkey有序性。

    96420

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

    35720

    HBaserowKey设计技巧

    本篇博客小菌为大家带来HBaserowKey设计技巧!...HBase是三维有序存储,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase数据进行快速定位...HBaserowkey可以唯一标识一行记录,在HBase查询时候,有以下几种方式: 通过get方式,指定rowkey获取唯一一条记录 通过scan方式,设置startRow和stopRow参数进行范围匹配...反转rowkey例子以手机号为rowkey,可以将手机号反转后字符串作为rowkey,这样就避免了以手机号那样比较固定开头导致热点问题 4.时间戳反转 一个常见数据处理问题是快速获取数据最近版本...,使用反转时间戳作为rowkey一部分对这个问题十分有用,可以用 Long.Max_Value - timestamp 追加到key末尾,例如 [key][reverse_timestamp] ,

    90010

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

    84170

    面试,HBase如何设计rowkey

    HBaserowkey是按字典顺序排序,通过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设计 HBaserowkey可以唯一标识一行数据,在HBase查询时候,主要以下两种方式: get:指定rowkey获取唯一一条记录 scan:设置startRow和stopRow参数进行范围匹配...row key,将row key中经常变化部分(即相对比较随机部分)放在前面,这种方式弊端就是失去了rowkey有序性。...最常用就是,用户订单数据存储在HBase中,利用手机号后4位通常是随机特性,以用户手机号反转再根据业务场景加上一些其他数据拼成row key或者是仅仅使用反转后手机号作为row key,从而避免以手机号固定开头导致热点问题...HBase热点问题及处理 HBase中热点问题其实就是数据倾斜问题,由于数据分配不均匀,如row key设计不合理导致数据过多集中于某一个或某几个region server上,会导致这些region

    76120

    再谈|Rowkey设计_HBase表设计

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

    1.2K21

    hbaserowkey设计原则和实现方式

    一: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.2K20

    大数据入门:Hbase Rowkey设计

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

    40810

    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)导致热点问题。身份证号码也同样适用。

    3.7K34

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

    Hbase Rowkey CF 架构 概述 预分区及Rowkey设计 学习笔记 1. 概述 HBase是建立在Hadoop文件系统之上分布式面向列数据库。...2.2 Rowkey Rowkey概念和mysql中主键是完全一样Hbase使用Rowkey来唯一区分某一行数据。...由于Hbase只支持3中查询方式: 基于Rowkey单行查询 基于Rowkey范围扫描 全表扫描 因此,RowkeyHbase性能影响非常大,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.4K51

    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.6K20
    领券