热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

大数据Hadoop之HBase认识

ApacheHBase1.HBase是什么1)HBase的产生背景?随着数据规模越来越大,大量业务场景开始考虑数据存储的水平扩展,使得存储服务可以快速执行客户端发来的请求,而目前的

《大数据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通常以集群部署,数据被分散到多个节点存储,当客户端发起查询请求的时候,集群里面多个节点并行执行查询操作,最后将不同节点的查询结果进行合并返回给客户端。

《大数据Hadoop之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.是什么影响了集群的性能

《大数据Hadoop之HBase认识》 每一种支撑系统都会影响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的核心内容。针对集群规划和运维方面,有兴趣的可以进一步研究。

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


推荐阅读
  • PHP中元素的计量单位是什么? ... [详细]
  • 本文详细介绍了HDFS的基础知识及其数据读写机制。首先,文章阐述了HDFS的架构,包括其核心组件及其角色和功能。特别地,对NameNode进行了深入解析,指出其主要负责在内存中存储元数据、目录结构以及文件块的映射关系,并通过持久化方案确保数据的可靠性和高可用性。此外,还探讨了DataNode的角色及其在数据存储和读取过程中的关键作用。 ... [详细]
  • 本文详细介绍了如何使用OpenSSL自建CA证书的步骤,包括准备工作、生成CA证书、生成服务器待签证书以及证书签名等过程。 ... [详细]
  • 单片微机原理P3:80C51外部拓展系统
      外部拓展其实是个相对来说很好玩的章节,可以真正开始用单片机写程序了,比较重要的是外部存储器拓展,81C55拓展,矩阵键盘,动态显示,DAC和ADC。0.IO接口电路概念与存 ... [详细]
  • 在《Cocos2d-x学习笔记:基础概念解析与内存管理机制深入探讨》中,详细介绍了Cocos2d-x的基础概念,并深入分析了其内存管理机制。特别是针对Boost库引入的智能指针管理方法进行了详细的讲解,例如在处理鱼的运动过程中,可以通过编写自定义函数来动态计算角度变化,利用CallFunc回调机制实现高效的游戏逻辑控制。此外,文章还探讨了如何通过智能指针优化资源管理和避免内存泄漏,为开发者提供了实用的编程技巧和最佳实践。 ... [详细]
  • 在最近的WWDC17大会上,苹果公司宣布了多项重要更新,其中一项是macOS High Sierra 10.13 Final的正式发布。这一版本经过优化,显著提升了系统的稳定性和响应速度,为用户在任何Mac设备上提供了更加流畅的使用体验。本文将详细介绍如何在Windows系统中利用VMware虚拟机软件安装并运行macOS High Sierra 10.13 Final,帮助用户在非苹果硬件上体验这一先进操作系统。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 2018年9月21日,Destoon官方发布了安全更新,修复了一个由用户“索马里的海贼”报告的前端GETShell漏洞。该漏洞存在于20180827版本的某CMS中,攻击者可以通过构造特定的HTTP请求,利用该漏洞在服务器上执行任意代码,从而获得对系统的控制权。此次更新建议所有用户尽快升级至最新版本,以确保系统的安全性。 ... [详细]
  • FastDFS Nginx 扩展模块的源代码解析与技术剖析
    FastDFS Nginx 扩展模块的源代码解析与技术剖析 ... [详细]
  • 在搭建Hadoop集群以处理大规模数据存储和频繁读取需求的过程中,经常会遇到各种配置难题。本文总结了作者在实际部署中遇到的典型问题,并提供了详细的解决方案,帮助读者避免常见的配置陷阱。通过这些经验分享,希望读者能够更加顺利地完成Hadoop集群的搭建和配置。 ... [详细]
  • 技术日志:深入探讨Spark Streaming与Spark SQL的融合应用
    技术日志:深入探讨Spark Streaming与Spark SQL的融合应用 ... [详细]
  • 深入解析OSI七层架构与TCP/IP协议体系
    本文详细探讨了OSI七层模型(Open System Interconnection,开放系统互连)及其与TCP/IP协议体系的关系。OSI模型将网络通信过程划分为七个层次,每个层次负责不同的功能,从物理层到应用层逐步实现数据传输和处理。通过对比分析,本文揭示了OSI模型与TCP/IP协议在结构和功能上的异同,为理解现代网络通信提供了全面的视角。 ... [详细]
  • 深入解析:RKHunter与AIDE在入侵检测中的应用与优势
    本文深入探讨了RKHunter与AIDE在入侵检测领域的应用及其独特优势。通过对比分析,详细阐述了这两种工具在系统完整性验证、恶意软件检测及日志文件监控等方面的技术特点和实际效果,为安全管理人员提供了有效的防护策略建议。 ... [详细]
  • 深入理解Spark框架:RDD核心概念与操作详解
    RDD是Spark框架的核心计算模型,全称为弹性分布式数据集(Resilient Distributed Dataset)。本文详细解析了RDD的基本概念、特性及其在Spark中的关键操作,包括创建、转换和行动操作等,帮助读者深入理解Spark的工作原理和优化策略。通过具体示例和代码片段,进一步阐述了如何高效利用RDD进行大数据处理。 ... [详细]
  • 本文提供了 RabbitMQ 3.7 的快速上手指南,详细介绍了环境搭建、生产者和消费者的配置与使用。通过官方教程的指引,读者可以轻松完成初步测试和实践,快速掌握 RabbitMQ 的核心功能和基本操作。 ... [详细]
author-avatar
123454ewefewf
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有