HBase Rowkey 设计指南】的更多相关文章

为什么Rowkey这么重要 RowKey 到底是什么 我们常说看一张 HBase 表设计的好不好,就看它的 RowKey 设计的好不好.可见 RowKey 在 HBase 中的地位.那么 RowKey 到底是什么?RowKey 的特点如下: 类似于 MySQL.Oracle中的主键,用于标示唯一的行: 完全是由用户指定的一串不重复的字符串: HBase 中的数据永远是根据 Rowkey 的字典排序来排序的. RowKey的作用 读写数据时通过 RowKey 找到对应的 Region: MemSt…
转自:http://www.bcmeng.com/hbase-rowkey/ 建立Schema Hbase 模式建立或更新可以通过 Hbase shell 工具或者使用Hbase Java API 中的 Admin类. 当列族发生变动时 hbase表必须处于 disabled 状态.例如:   Configuration config = HBaseConfiguration.create(); Admin admin = new Admin(conf); String table = "myT…
Rowkey设计 Rowkey设计原则 Rowkey设计应遵循以下原则: 1.Rowkey的唯一原则 必须在设计上保证其唯一性.由于在HBase中数据存储是Key-Value形式,若HBase中同一表插入相同Rowkey,则原先的数据会被覆盖掉(如果表的version设置为1的话),所以务必保证Rowkey的唯一性 2. Rowkey的排序原则 HBase的Rowkey是按照ASCII有序设计的,我们在设计Rowkey时要充分利用这点.比如视频网站上对影片<泰坦尼克号>的弹幕信息,这个弹幕是按…
转自 http://blog.csdn.net/lifuxiangcaohui/article/details/40621067 hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.rowkey,我们知道rowkey是行的主键,而且hbase只能用个rowkey,或者一个rowkey范围即scan来查找数据.所以 rowkey的设计是至关重要的,关系到你应…
hbase所谓的三维有序存储的三维是指:rowkey(行主键),column key(columnFamily+qualifier),timestamp(时间戳)三部分组成的三维有序存储. 1.rowkey.我们知道rowkey是行的主键,并且hbase仅仅能用个rowkey,或者一个rowkey范围即scan来查找数据.所以 rowkey的设计是至关重要的,关系到你应用层的查询效率.我们知道.rowkey是以字典顺序排序的.而存储的字节码,字典排序,我们知道,假设是字 母,那就是字母的顺序,比…
HBase中的rowkey是按字典顺序排序的,通过rowkey查询可以对千万级的数据实现毫秒级响应.然而,如果rowkey设计不合理的话经常会出现一个很普遍的问题----热点.当大量client的请求(读或者写)只指向集群的一个节点,或者很少量的几个节点时,也就代表产生了热点问题. 避免产生热点的方式也就是尽可能的将rowkey均匀分散到所有的region上,下面介绍了几种rowkey设计常用的方式: 第一:加盐(salting) 加盐是指在rowkey的前缀添加随机数据,使rowkey尽可能的…
Hbase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这三个维度可以对HBase中的数据进行快速定位. Hbase中Rowkey可以唯一标识一行记录,在Hbase查询的时候,有以下几种方式: 1.通过get方式,指定rowkey获取唯一一条记录 2.通过scan方式,设置StartRow和EndRow参数进行范围匹配 3.全表扫描,即直接扫描整张表中所有行记录 Rowkey长度原则 rowkey是…
充分利用有序性 1.1 如果要scan操作,且不是很频繁,可以利用rowkey的有序性将需要一起扫描的数据放到一起.例如直接用时间戳.这样就可以按时间scan了.这个只要是简单的全表扫描都行. 1.2 同样是scan,还可以利用rowkey的有序性实现数据本地化,设同一类别的数据需要一起扫描,那就可以给rowkey加一个类别前缀.(为了节约磁盘空间,需将类别名称编码) 这个不如垂直爬虫,我要扫描新闻类,或者BBS类,就可以为rowkey加个编码后的新闻,bbs类别id,实现同一类别的url本地化…
转自:http://www.aboutyun.com/thread-7119-1-1.html 对于任何系统的数据设计,我们都想提高性能,达到资源最大化利用,那么对于hbase我们产生如下问题: 1.hbase rowkey设计如何才能提高性能?2.hbase rowkey如何设计才能散列到不同的节点上? 访问hbase table中的行,只有三种方式: 1 通过单个row key访问2 通过row key的range3 全表扫描 文中可能涉及到的API: Hadoop/HDFS:http://…
一直以来对rowkey的设计都比较迷茫,<hbase权威指南>倒是给出了个还算靠谱的例子. 下面这个例子有点儿像帖子表结构,它的rowkey设计是这样的,可以简单的理解为,什么人在什么时间发了什么信息,信息包括什么附件,它是用户为主线的一个设计. <userId>-<date>-<messageId>-<attachmentId> 如果我们想查某个用户发的信息,我们可以设置scan的start rowkey 为该userId,end rowkey…
摘要 本文主要内容是通过合理Hbase 行键(rowkey)设计实现快速的多条件查询,所采用的方法将所有要用于查询中的列经过一些处理后存储在rowkey中,查询时通过rowkey进行查询,提高rowkey的利用率,加快查询速度.行键(rowkey)并不是简单的把所有要查询的列的值直接拼接起来,而是将各个列的数据转成整型(int)数据来存储.之后实现两个自定义的比较器(comparator):一个是相等比较器,用于实现类似于SQL的多条件精确查找功能. select * from table wh…
HBase是三维有序存储的,通过rowkey(行键),column key(column family和qualifier)和TimeStamp(时间戳)这个三个维度可以对HBase中的数据进行快速定位. HBase中rowkey可以唯一标识一行记录,在HBase查询的时候,有以下几种方式: 通过get方式,指定rowkey获取唯一一条记录 通过scan方式,设置startRow和stopRow参数进行范围匹配 全表扫描,即直接扫描整张表中所有行记录 rowkey长度原则 rowkey是一个二进…
1 概述 HBase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. 既然HBase是采用KeyValue的列存储,那Rowkey就是KeyValue的Key了,表示唯一一行.Rowkey也是一段二进制码流,最大长度为64KB,内容可以由使用的用户自定义.数据加载时,一般也是根据Rowkey的二进制序由小到大进行的. HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey (或者某个 R…
什么是rowkey Hbase是一个分布式的.面向列的数据库,它和一般关系型数据库的最大区别是:HBase很适合于存储非结构化的数据,还有就是它基于列的而不是基于行的模式. Hbase是采用K,V存储的,那Rowkey就是KeyValue的Key了,Rowkey也是一段二进制码流,最大长度为64KB,内容可以由使用的用户自定义.数据加载时,一般也是根据Rowkey的二进制序由小到大进行的. HBase是根据Rowkey来进行检索的,系统通过找到某个Rowkey (或者某个 Rowkey 范围)所…
1. HBase的存储形式 hbase的内部使用KeyValue的形式存储,其key时rowKey:family:column:logTime,value是其存储的内容. 其在region内大多以升序的形式排列,唯一的时logTime是以降序的形式进行排列. 所以,rowKey里越靠近左边的信息越容易被检索到.其设计时,要考虑把重要的信息放左边,不重要的信息放到右边.这样可以提高查询数据的速度.最重要的提高索引速度的就是设计合适的rowKey. 在做RowKey设计时,请先考虑业务是读比写多,还…
数据模型 我们可以将一个表想象成一个大的映射关系,通过行健.行健+时间戳或行键+列(列族:列修饰符),就可以定位特定数据,Hbase是稀疏存储数据的,因此某些列可以是空白的, Row Key Time Stamp Column Family:c1 Column Family:c2 列 值 列 值 r1 t7 c1:1 value1-1/1 t6 c1:2 value1-1/2 t5 c1:3 value1-1/3 t4 c2:1 value1-2/1 t3 c2:2 value1-2/2 t2…
转自:http://www.cnblogs.com/bdifn/p/3801737.html 问题导读:1.如何防止热点?2.如何预分区?扩展:为什么会产生热点存储? HBase中,表会被划分为1...n个Region,被托管在RegionServer中.Region二个重要的属性:StartKey与EndKey表示这个Region维护的rowKey范围,当我们要读/写数据时,如果rowKey落在某个start-end key范围内,那么就会定位到目标region并且读/写到相关的数据.简单地说…
HBase里的RowKey设计,分为随机查询的RowKey设计和连续查询的RowKey设计.…
在HBase中细节上的设计,最最最重要的就是我该选取什么做Rowkey,Rowkey的选择,最直接的影响就是对你之后分析数据的影响了. Rowkey是不可分割的字节数,按照字典排序由低到高存储在表中.一个空的数组用来标识表空间的起始或结尾. 在设计HBase表时,Rowkey设计是最重要的事情,应该基于预期的访问模式来为Rowkey建模.Rowkey决定了访问HBase表时可以得到的性能,原因有两个:Region基于Rowkey为一个区间的行提供服务,并且负责区间的每一行:HFile在硬盘上存储…
Hadoop生态圈-Hbase的rowKey设计原则 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.…
笔者从一开始接触hbase就在思考rowkey设计,希望rowkey设计得好,能够支持查询的需求.使用hbase一段时间后,再去总结一些hbase的设计方法,无外乎以下几种: reverse salt hash 本质上都是避免热点问题.那么如何根据查询场景设计rowkey?rowkey设计之道是什么? rowkey设计之道 hbase通过分治策略将数据分散到1-N个Region中,以满足业务的读写需求,合理的分配是关键,这就涉及rowkey的设计. 抛开缓存,只从rowke的角度来考虑读写,如果…
rowkey设计的重要性 rowkeys是HBase表设计中唯一重要的一点. rowkey设计要求 唯一性 存储特性 按照字典顺序排序存储 查询特性 由于其存储特性导致查询特性: 查询单个记录: 查定一定范围的记录. 可能存在的问题 热点问题 什么是热点和数据倾斜 热点发生在大量的client直接访问集群的一个或极少数个节点(访问可能是读,写或者其他操作).大量访问会使热点region所在的单个机器超出自身承受能力,引起性能下降甚至region不可用,这也会影响同一个RegionServer上的…
HBase的rowKey设计技巧 1.设计宗旨与目标 主要目的就是针对特定的业务模型,按照rowKey进行预分区设计,使之后面加入的数据能够尽可能的分散于不同的rowKey中.比如复合RowKey. 作用: 一条数据的唯一标识就是rowkey,那么这条数据存储于哪个分区,取决于rowkey处于哪个一个预分区的区间内,设计rowkey的主要目的 ,就是让数据均匀的分布于所有的region中,在一定程度上防止数据倾. 2.设计方式案例 2.1.案例一:生成随机数.hash.散列值 比如: 原本row…
GeoMesa设计基于HBase的设计分析,从数据模型到典型查询场景,最后进行RowKey设计 一.HBase 基本概念 理解KeyValue KeyValue多版本 列定义(1) 列定义(2) Column Family RowKey即索引 RowKey字段的选取 二.GeoMesa设计基于HBase的设计分析,从数据模型到典型查询场景,最后进行RowKey设计 数据模型 GeoMesa-典型查询场景 GeoMesa-RowKey设计 一.HBase 基本概念 理解KeyValue KeyVa…
HBase学习(四) 一.HBase的读写流程 画出架构 1.1 HBase读流程 Hbase读取数据的流程:1)是由客户端发起读取数据的请求,首先会与zookeeper建立连接2)从zookeeper中获取一个hbase:meta表位置信息,被哪一个regionserver所管理着     hbase:meta表:hbase的元数据表,在这个表中存储了自定义表相关的元数据,包括表名,表有哪些列簇,表有哪些reguion,每个region存储的位置,每个region被哪个regionserver…
导语:本文介绍的项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中的完整中间流程和结果数据)的在线查询.原实现基于 Oracle 提供存储查询服务,随着数据量的不断增加,在写入和读取过程中面临性能问题,且历史数据仅供业务查询参考,并不影响实际流程,从系统结构上来说,放在业务链条上游比较重.该项目将其置于下游数据处理 Hadoop 分布式平台来实现此需求. 背景介绍 本项目主要解决 check 和 opinion2 张历史数据表(历史数据是指当业务发生过程中…
比较常用的数据库是关系型数据库,但很多场景下nosql数据库会更加擅长,从sql到nosql实施的第一步就是设计表结构,这是两种不同的思维方式,这里说下HBase表设计. 需求:需要一张stock表用于保存市场所有股票的分钟走向,即每个股票每分钟记录一次价格. 方案一:瘦表. 用stockId+datetime作为RowKey,这样方便通过stockId或datetime快速扫描获取到相关记录. RowKey ColumnFamily "stock_cf" stockId+dateti…
1.建表高级属性 建表过程中常用的shell命令 1.1 BLOOMFILTER 默认是 NONE 是否使用布隆过虑及使用何种方式,布隆过滤可以每列族单独启用 使用HColumnDescriptor.setBloomFilterType(NONE|ROW|ROWCOL)对列族单独启用布隆 - Default = ROW 对行进行布隆过滤 - 对 ROW,行键的哈希在每次插入行时将被添加到布隆 - 对 ROWCOL,行键 + 列族 + 列族修饰的哈希将在每次插入行时添加到布隆 使用方法: crea…
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk8 hadoop-2.6.5 hbase-0.98.12.1-hadoop2 HBase中表的设计 主要是将原来的关系解开 问题: 例子: 表设计一: 表设计二: 这是一个双向查询,根据人员查角色,根据角色查人员 问题: 0为顶级部门,1为子部门 放到一张表中不会对效率产生影响,因为HBASE是海量存储,海量读写的. Redis是一个内存数据库,新浪微博是使用R…
1 目前Rawlog表的问题 region数量庞大,空region 率大 共有12791个region 11409空region, 比例为89.19% 剩余的region大小也是极度不均衡,最大的region 287G, <1m的region有129个 读写不均衡 现有的rowkey设计,简单来说是appid+date的顺序序列 简单来说对于每个appid都有一个写热点,这不仅没有利用到分布式的优点,还会极大的降低整个hbase集群的服务能力 读存在同样的问题,一次读基本上会集中在一个regio…