大数据Hadoop之HBase认识

Apache HBase

1.HBase是什么

1)HBase的产生背景?

随着数据规模越来越大,大量业务场景开始考虑数据存储的水平扩展,使得存储服务可以快速执行客户端发来的请求,而目前的关系型数据库更专注一台机器。海量数据量存储成为提升应用性能的瓶颈,单台机器无法负载海量的数据处理,随之而来的出现了很多的分布式存储解决方案,HBase就是其中之一。

HBase--DataBase on Hadoop,基于分布式文件系统上面建立的数据库,HBase是面向列的开源数据库。开源团队根据2008年Google发布了一篇关于Google搜索引擎BigTable的核心思想的论文,实现了基于分布式文件系统的列数据库。随后加入Apache基金会,成为Hadoop生态圈中的顶级项目被大家熟知。

2)大数据项目中为什么选择HBase而不选择传统的数据库呢?

首先,HBase性能非常高。HBase中存储了一套HDFS的索引,通过表名->行健->列族->列限定符->时间版本这一套索引来定位数据的位置。正是因为HBase为每一列数据维护了一套索引规则,对于具体某一具体条数据的查询可以非常快速的通过B+树定位数据存储位置并将其取出。HBase通常以集群部署,数据被分散到多个节点存储,当客户端发起查询请求的时候,集群里面多个节点并行执行查询操作,最后将不同节点的查询结果进行合并返回给客户端。


B+树检索原理

B+树原理:B+树是一种树数据结构,是一个n叉树,每个节点通常有多个孩子,一棵B+树包含根节点、内部节点和叶子节点。根节点可能是一个叶子节点,也可能是一个包含两个或两个以上孩子节点的节点。B+树查找通过父节点->子节点->...->叶子节点,这样执行查询效率非常高。


第二,HBase运行在高可用环境下。HBase集群中任意一个节点宕机都不会导致集群瘫痪。这取决于两方面原因,第一方面,ZooKeeper解决了HBase中心化问题(有意者出门右转查看大数据Hadoop之Zookeeper认识->第三节集群管理->Leader选举)。第二方面,HBase将数据存放在HDFS上面,HDFS的数据冗余存放在不同节点,一个节点瘫痪可从其他节点取得数据,保证了HBase的高可用。

HBase通常采用集群模式,大量的索引文件被切分为很多块(block)分散存放在不同的节点上面,这些块(block)存放在HDFS上面,由于HDFS的数据冗余机制,当存放块的某一个节点宕机,HBase可以从其他节点取出宕机机器存储的数据,这样可以保证这些数据的高可用性,而且当集群数量越大高可用性越高。

第三,HBase非常适合存储超大数据。HBase默认一个列族可以存放64M或更大的数据。HBase可以通过配置文件对存储的列族大小进行设置。目前HBase的最新版本2.0中可以在~/HBase/conf/HBase-env.sh中进行配置。

HBase将数据以HFile文件形式存储,这些文件在磁盘上面连续存储,由于磁盘的磁头不需要尽心大量的寻址操作,HBase在进行数据写入和数据加载的时候可以很快速将某一列族数据加载到内存中。

第四,HBase是一个无模式的数据库。HBase不同于传统的关系型数据库,使用HBase不需要预先定义表中有多少列,也不需要定义每一列存储的数据类型,HBase在需要的时候可以动态增加列和指定存储数据类型。对于从不同数据源爬取的数据不一致,可以动态的新增列而不需要预先就设计好存储的表结构,以应对数据结构多种多样的情况。

2.建立模式

2.1.HBase模式设计需要考虑以下几个问题

        1)这个表应该有多少个列族?

        2)列族存放什么数据?

        3)每个列族应该有多少列?

        4)列名应该是什么?尽管列名不必建表时定义,但是读写数据时需要知道。

        5)单元存放什么数据?

        6)每个单元存储多少个时间版本?

        7)行健结构是什么?应该包括什么信息?

2.2.开始建立模式

HBase不建议建立通用存储模型,推荐针对某些具体问题进行模型建立,因为HBase建立模式的时候可以针对具体的场景进行调整。比如:设计中高表和宽表的选择,宽表就是列族中有多个列,高表就是列族中只有一个列,表表现瘦高的形象。1).高表的读写性能要高于宽表。2).宽表有原子性而高表没有原子性。原因:在很多业务中针对某一个业务宽表只需要维护单张表,而高表却要维护多张表。HBase本身不支持多张表的原子性操作,可以针对不同的应用场景进行选择。

2.3.反规范化设计是HBase世界里的词汇

反规范化是相对于规范化。规范化是关系型数据库中的一个概念,主要是范式,他的目的是为了消除数据副本降低维护和存储成本,在查询一个结果的时候往往会跨越多张表进行查询。反规范化是用存储的消耗换取性能的提升,数据允许存在多个冗余信息,查询一个结果不需要跨多个表,提升了数据查询的性能。这样的情况一般适用于数据量特别大的系统使用。

2.4.RowKey的设计和优化非常重要,会直接影响HBase的性能。

1)散列化设计行健

RowKey是HBase中数据的直接索引,集群中HMaster节点通过RowKey的值来决定数据存储位置通常是按序存储。按序排列很容易导致数据集中存储在集群的某几个节点,导致这几个节点负载很高,机器容易被压垮,所以在行健设计中避免RowKey按序列设计。解决办法是将RowKey通过MD5或者SHA-1进行散列化,散列化的数据会均匀的的存储在集群的所有节点中。

2)读优化的行健

读行健优化,主要是提高读的效率,关联尽量少的表,尽量少的将HFile个数加载到内存中。频繁的IO操作是非常影响性能的,HBase中表是分开存储的,不同的表不可能存储在同一个HFile底层文件中,所以行健和表设计都需要降低IO操作。

2.5.列族的高级配置

1)配置存储数据块(HFile)大小很关键。HFile配置得越大,HBase进行读取数据加载的HFile个数越少,但是块越大对系统存储资源是一种浪费,所以根据实际场景进行块大小配置,通常64M。

2)配置数据缓存,通过将数据缓存到内存中可以减少磁盘IO操作从而提高集群性能。

3)配置文件压缩,HBase为了降低存储空间可以配置对数据压缩,但是压缩操作会占用CPU计算资源。通常集群存储空间足够大和任务紧急程度高,不建议对数据进行压缩。

3.HBase性能调优策略

3.1.是什么影响了集群的性能


每一种支撑系统都会影响HBase的性能

每一种支撑系统都会影响HBase的性能。提升HBase集群的性能首先需要对支撑系统进行优化。

集群之间数据交换量非常大,然而我们的交换机是一台老旧的交换机,它会严重拖慢整个集群的计算效率的。

3.2如何优化HBase配置性能

提高HBase性能,达到HBase负载均衡,我们需要反复尝试设置HBase的参数。为提升具体某种应用的性能配置HBase时,不存在拿来就能用的秘诀,但是可以尝试把它们归为下面的某种类别。

1.随机读密集型,指使用环境以读为主,很少有写入。解决办法调整HBase参数提高缓存容量和增大索引范围可以带来更高的性能。

2.顺序读密集型,数据从HBase中按照一定顺序依次读出。此时缓存不会带来太多好处。解决办法调整HBase参数将顺序读的规模限制很小,并且限定在一个特定的行健范围进行读取。

3.写密集型,指使用环境以写入为主,很少有读取。此时缓存不在起作用。写操作总是进入MemStore,然后被刷写生成新的HFile,以后再被合并。解决办法为获得更好写性能,应该调整HBase参数不要太频繁刷写、合并或者拆分,降低磁盘IO的操作。

4.混合型,是以上任意问题的组合,需要不断的尝试调整前面介绍的参数得到一个最优的组合。可以反复尝试各种组合,然后运行性能测试,来观察什么情况下能够得到最佳结果。

小结

HBase作为Hadoop的重要组件,在数据的增删查改方面为我们提供了方案,通过对HBase是什么、模式设计和HBase性能调优的阅读,我们能够清晰的理解HBase的核心内容。针对集群规划和运维方面,有兴趣的可以进一步研究。

欢迎志同道合的朋友给我留言,一起交流、讨论、进步!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,560评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,104评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,297评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,869评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,275评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,563评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,833评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,543评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,245评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,512评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,011评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,359评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,006评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,062评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,825评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,590评论 2 273
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,501评论 2 268

推荐阅读更多精彩内容

  • 最近在逐步跟进Hbase的相关工作,由于之前对Hbase并不怎么了解,因此系统地学习了下Hbase,为了加深对Hb...
    飞鸿无痕阅读 50,064评论 19 271
  • 简介 [HBase]——Hadoop Database的简称,Google BigTable的另一种开源实现方式,...
    高广超阅读 2,293评论 1 27
  • HBase存储架构图 HBase Master 为Region server分配region 负责Region s...
    kimibob阅读 5,499评论 0 52
  • 1. HBase介绍,Hbase是什么? HBase -- Hadoop Database ,是一个高可靠、高性能...
    奉先阅读 3,685评论 1 36
  • Jmeter参数化随机取值实现 Jmeter能用来做参数化的组件有几个,但是都没有随机取值的功能,遇到随机取值的需...
    人生_0809阅读 3,473评论 0 0