最新消息: 关于Git&GitHub 版本控制你了解多少?
您现在的位置是:群英 > 开发技术 > PHP语言 >
HBase的优化和改进你怎么看?
IT168发表于 2020-11-27 15:17 次浏览
       Facebook之前曾经透露过Facebook的hbase架构,可以说是非常不错的。如他们将message服务的hbase集群按用户分为数个集群,每个集群100台服务器,拥有一台namenode以及分为5个机架,每个机架上一台zookeeper。可以说对于大数据量的服务这是一种优良的架构。对于淘宝来说,由于数据量远没有那么大,应用也没有那么核心,因此我们采用公用hdfs以及zookeeper集群的架构。每个hdfs集群尽量不超过100台规模(这是为了尽量限制namenode单点问题)。在其上架设数个hbase集群,每个集群一个master以及一个backupmaster。公用hdfs的好处是可以尽量减少compact的影响,以及均摊掉硬盘的成本,因为总有集群对磁盘空间要求高,也总有集群对磁盘空间要求低,混合在一起用从成本上是比较合算的。zookeeper集群公用,每个hbase集群在zk上分属不同的根节点。通过zk的权限机制来保证hbase集群的相互独立。zk的公用原因则仅仅是为了运维方便。

HBase如何进行优化和改进

▲2013中国数据库大会专题报道

  自2010年以来,国内领先的IT专业网站IT168联合旗下ITPUB、ChinaUnix技术社区已经连续举办了三届数据库技术大会,每届大会超过千人规模,云集了国内技术水平最高的数据架构师、DBA、数据库开发工程师、研发总监、IT经理等,是目前国内最受欢迎的数据库技术盛会。

HBase如何进行优化和改进

▲阿里数据平台开发工程师,HBase社区Committer:天梧(沈春辉)

  HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。

  特点:海量数据(TB以上)、很高的随机写能力、在海量数据中实现高效的读取、很好的伸缩能力、强一致性、能够同时处理结构化和非结构化的数据、动态列、不需要复杂的查询需求包括:SQL、事物、Join、多维索引等。

  HBase的版本发展:

  2007.4 第一个版本(HVASE-287 Mike Cafarella)

  2010.10 0.89(Facebook的生产版本 based on)

  2011.4 0.90.2(阿里HBASE的第一个版本 based on)

  2012.1 0.92(Adds 安全,协处理器,HFile V2,分布式log-Splitting)

  2012.5 0.94(Performance Release),目前是主流版本。

  2013.4 0.95(0.96的预发版,Adds protobuf,Table Snapshot,PrefixTreeCompression等等)

  Coming 0.96

  HBase在阿里的发展:

  2011.3月开始研究

  2011.5月上线第一个应用

  截止目前:以基于0.94的阿里HBase版本为主、稳定性达到在线应用的城池标准之上、近百个业务,特点多样化。

  国内外应用发展HBase的公司:

  Cloudera、Hortonworks、Salesforce等

  faceboook、Yahoo、eBay、Twitter、Pinterest、Line等

  Intel、IBM等

  阿里巴巴、华为、小米、360等。

  实践与改进--Bucket Cache(Allocate Block)

HBase如何进行优化和改进

  1、将整个逻辑上的存储块切割成一个个的Bucket。2、每一个Bucket都有相同的固定的容量,e.g.2MB as default;3、每一个bucket都拥有一个size tag,cache这个size以内的Block。4、对于完全空闲的Bucket,它的size tag可以被重新指定。5、每一个bucket与物理存储的位置有固定的映射关系,根据Block在Bucket中的偏移,则就可以计算出其在物理存储中的偏移。

HBase如何进行优化和改进

HBase如何进行优化和改进

HBase如何进行优化和改进

HBase如何进行优化和改进

  实践与改进--优化Java的GC麻烦

  1、Concurrent mode failure

  原因:old区要分配内存了,但是old区空间不够,而此时CMS正在运行中

  解决:降低YGC频率,降低CMS GC触发时机(降低 CMSInitiatingOccupancyFraction的值)

  2、Promotion Failed(发生很多)

  原因:old区要分配内存了,但是找不到空间分配,却还没达到CMS的触发值。

  heap碎片+YGC晋升对象(Block,Memstore Chunk)过大

  解决:聚合小数据:开启msalab(注意Region数目)

  HBase自己管理(重用)内存对象:Bucket Cache(HBASE-7404)(使用Byte buffer作为IOEngine的存储介质)、Chunk Pool(HBASE-8163)。

HBase如何进行优化和改进

  YGC停顿过长
  原因1:Young区活对象数目过多,old区脏页数目过多
  原因2:MemStore中的Keyvalueset,开启WAL压缩后的字典map
  解决:1、降低young区大小。2、减小-XX:Maxcache/ChunkPool,减少晋升对象,减少拷贝时间。

  实践与改进--更高的服务可用性

HBase如何进行优化和改进

服务单点

HBase如何进行优化和改进

▲更多优化

  HBase是Google Bigtable的开源实现,类似Google Bigtable利用GFS作为其文件存储系统,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用 Chubby作为协同服务,HBase利用Zookeeper作为对应。

  hbase是bigtable的开源山寨版本。是建立的hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

  它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。主要用来存储非结构化和半结构化的松散数据。

  与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

  企业面临以下问题时,可以考虑选择HBase。如数据量急剧增加,需要TB级甚至PB级的在线服务;数据量增长速度快,对水平扩展能力有需求,前期少量投入,随着数据量的不断增加,后期可以不断追加;只是简单的kv读写,要求响应延时低;要求强一致性;每秒上万的写入,并且需要批量读取,大量的随机读取,需要大吞吐量;应用程序不断变更,导致schema多变;最后一个则是整个平台是一个Java平台,需要良好的Java接口等等。而HBase无疑很好地满足了这些特点。

标签:hbase数据库
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
相关信息推荐