网易视频云技术分享HBase优化实战
网易视频云:网易HBase基准性能测试之准备篇
网易视频云:网易HBase基准性能测试之准备篇网易视频云是网易推出是PAAS级视频云服务,致力于为客户提供真正易用的视频云服务,目前已经广泛应用于在线教育、秀场直播、游戏直播、远程医疗等领域,在网易内部,也有广泛运用视频云的产品,比如网易新闻直播、网易BOBO、网易青果等。
而网易视频云的技术团队全部来自网易杭州研究院十多年的技术骨干,现在,由网易视频云的技术专家给大家分享一则技术文:网易HBase基准性能测试之准备篇。
本次测试主要评估线上HBase的整体性能,量化当前HBase的性能指标,对各种场景下HBase性能表现进行评估,为业务应用提供参考。
本篇文章主要介绍此次测试的基本条件,测试结果和分析可以阅读文章《网易HBase基准性能测试之结果篇》测试环境测试环境包括测试过程中HBase集群的拓扑结构、以及需要用到的硬件和软件资源,硬件资源包括:测试机器配置、网络状态等等,软件资源包括操作系统、HBase相关软件以及测试工具等。
集群拓扑结构本次测试中,测试环境总共包含4台SA5212H2物理机作为数据存储。
生成数据的YCSB 程序与数据库并不运行在相同的物理集群。
单台机器主机硬件配置软件版本信息测试工具YCSB全称Yahoo! Cloud Serving Benchmark,是Yahoo公司开发的专门用于NoSQL测试的基准测试工具。
github地址:https:///brianfrankcooper/YCSB YCSB支持各种不同的数据分布方式1. Uniform:等概论随机选择记录2. Zipfian:随机选择记录,存在热记录3. Latest:近期写入的记录为热记录测试场景YCSB为HBase提供了多种场景下的测试,本次测试中,我们导入10亿条数据,并对如下场景进行测试:YCSB并没有提供Increment相关的测试功能,但是部分业务有这方面的需求,因此对YCBS进行了改造,加入了Increment模块。
网易视频云技术分享:HBase BlockCache系列 - 探求BlockCache实现机制
网易视频云技术分享:HBaseBlockCache系列-探求BlockCache实现机制网易视频云是网易公司旗下的视频云服务产品,以Paas服务模式,向开发者提供音视频编解码SDK和开放API,助力APP接入音视频功能。
现在,网易视频云的技术专家给大家分享一篇技术性文章,本文在上文的基础上深入BlockCache内部,对各种BlockCache方案具体工作原理进行详细分析。
Note:因为SlabCache方案在0.98版本已经不被建议使用,因此本文不针对该方案进行讲解;至于LRU方案和Bucket方案,因为后者更加复杂,本文也会花更多篇幅详细介绍该方案的实现细节。
LRUBlockCacheLRUBlockCache是HBase目前默认的BlockCache机制,实现机制比较简单。
它使用一个ConcurrentHashMap管理BlockKey到Block的映射关系,缓存Block只需要将BlockKey和对应的Block放入该HashMap中,查询缓存就根据BlockKey从HashMap 中获取即可。
同时该方案采用严格的LRU淘汰算法,当Block Cache总量达到一定阈值之后就会启动淘汰机制,最近最少使用的Block会被置换出来。
在具体的实现细节方面,需要关注三点:1. 缓存分层策略HBase在LRU缓存基础上,采用了缓存分层设计,将整个BlockCache分为三个部分:single-access、mutil-access和inMemory。
需要特别注意的是,HBase系统元数据存放在InMemory区,因此设置数据属性InMemory = true需要非常谨慎,确保此列族数据量很小且访问频繁,否则有可能会将hbase.meta元数据挤出内存,严重影响所有业务性能。
2. LRU淘汰算法实现系统在每次cache block时将BlockKey和Block放入HashMap后都会检查BlockCache总量是否达到阈值,如果达到阈值,就会唤醒淘汰线程对Map中的Block进行淘汰。
hbase案例
hbase案例HBase案例。
HBase是一个开源的分布式非关系型数据库,它建立在Hadoop文件系统之上,提供了对大型数据集的随机、实时的读/写访问。
在实际的应用场景中,HBase有着广泛的应用,下面我们将介绍几个HBase的案例,以便更好地理解其在实际中的应用。
1. 电商行业。
在电商行业中,HBase被广泛应用于用户行为分析、推荐系统和实时数据分析等领域。
通过HBase存储用户的点击、购买、浏览等行为数据,可以实时分析用户的偏好,为用户推荐个性化的商品。
同时,HBase还可以支持实时的交易数据处理,保证交易数据的一致性和可靠性。
2. 在线广告系统。
在在线广告系统中,HBase可以用于存储海量的广告点击数据、用户画像数据等。
通过HBase的快速读写能力,广告系统可以实时地根据用户的兴趣和行为进行广告投放,提高广告的转化率和用户体验。
3. 物联网领域。
在物联网领域,HBase可以用于存储传感器数据、设备状态数据等。
通过HBase的高可靠性和实时性,可以支持对物联网设备的监控和实时数据分析,为智能城市、智能家居等场景提供数据支持。
4. 游戏行业。
在游戏行业中,HBase可以用于存储玩家的游戏数据、排行榜数据等。
通过HBase的高性能和可扩展性,游戏系统可以实时地处理玩家的游戏行为数据,并支持实时的排行榜计算和展示。
5. 金融行业。
在金融行业中,HBase可以用于存储交易数据、风险控制数据等。
通过HBase 的高可靠性和实时性,金融系统可以实时地监控交易数据,进行风险控制和实时报警。
总结。
通过以上案例的介绍,我们可以看到HBase在各个行业都有着广泛的应用。
它的高性能、高可靠性和实时性能够满足不同行业的数据存储和实时分析需求,为企业提供了强大的数据支持。
随着大数据和实时分析的需求不断增长,HBase作为一款优秀的分布式数据库,将在未来得到更广泛的应用和发展。
hbase的刷写策略
hbase的刷写策略HBase的刷写策略1. 介绍在HBase中,刷写策略决定了数据何时被写入到磁盘中。
HBase 是一个分布式的NoSQL数据库,其基于Hadoop架构,并采用了数据刷写的方法,以实现高可靠性和高性能。
本文将介绍HBase中常见的刷写策略类型,以及它们的优缺点。
2. 刷写策略类型写前日志(Write-Ahead Log, WAL)WAL是HBase中的一种刷写策略,它在数据写入之前,首先将数据写入到日志文件中。
在写入数据到磁盘之前,HBase会将数据在内存中的修改应用到磁盘上的日志文件中。
这样可以确保数据的安全性,因为即使在写入磁盘过程中发生故障,数据仍然可以从日志文件中恢复。
优点: - 数据可靠性高,即使发生故障也可以恢复数据。
- 写入性能较好,因为数据首先写入到内存中的日志文件。
缺点: - 写入操作需要额外的磁盘空间和I/O开销,会对写入性能产生一定的影响。
异步刷写(Asynchronous Flush)异步刷写是另一种常见的刷写策略,它采用了异步写入的方式。
在写入数据时,HBase会将数据直接写入到磁盘,而不需要使用WAL机制。
然后,HBase会自动将数据异步刷新到内存和其他数据节点上。
优点: - 写入性能高,因为不需要写入到日志文件。
- 对于某些应用场景,可以获得较好的写入性能提升。
缺点: - 数据可靠性较低,如果在写入过程中发生故障,数据有可能丢失。
同步刷写(Synchronous Flush)同步刷写是一种保守的刷写策略,在写入数据时,会等待数据刷新到磁盘后再返回操作结果。
与异步刷写相比,同步刷写可以提供更高的数据可靠性,但也会对写入性能产生一定的影响。
优点: - 数据可靠性高,确保数据已经写入磁盘再返回操作结果。
- 适用于对数据可靠性要求较高的场景。
缺点: - 写入性能较低,因为需要等待数据刷新到磁盘。
3. 如何选择刷写策略选择合适的刷写策略要根据具体的应用场景和需求来决定。
hbase 案例
hbase 案例HBase案例:实时日志分析系统1. 简介HBase是一个分布式、可伸缩、面向列的NoSQL数据库,适用于海量数据的存储和实时读写。
下面将介绍一个基于HBase的实时日志分析系统的案例。
2. 案例背景假设我们有一个大型网站,每天产生海量的日志数据,我们需要对这些日志进行实时的分析和查询,以了解用户行为、优化网站性能等。
3. 架构设计该系统的架构如下:- 数据采集:使用Flume等工具将日志数据实时采集到HBase集群中。
- 数据存储:HBase作为底层存储,支持高并发、高吞吐的实时写入和读取。
- 数据处理:使用Hadoop生态系统中的工具,如MapReduce、Spark等,对HBase中的数据进行批处理和实时处理。
- 数据查询:通过HBase提供的API或使用Phoenix等工具进行数据查询和分析。
4. 数据模型设计在HBase中,我们可以将每条日志数据存储为一个行记录,其中每个字段作为列族(列族可以理解为一组相关的列)中的列。
5. 数据采集使用Flume等工具,配置数据源为日志文件,将日志数据实时采集到HBase集群中。
可以根据需要的粒度和格式对数据进行预处理,如提取关键字段、过滤无效数据等。
6. 数据存储在HBase中,我们可以根据数据特点和查询需求进行表设计。
将不同类型的日志数据存储在不同的表中,并根据字段的重要性和查询频率进行列族设计和列修饰符设计,以提高查询性能。
7. 数据处理使用Hadoop生态系统中的工具,如MapReduce、Spark等,对HBase中的数据进行批处理和实时处理。
可以利用MapReduce进行大规模数据的离线分析,通过Spark Streaming等工具进行实时数据处理和计算。
8. 数据查询通过HBase提供的API或使用Phoenix等工具进行数据查询和分析。
根据查询需求,可以使用HBase的过滤器来提高查询性能,如前缀过滤器、范围过滤器等。
网易视频云技术分享:HBase BlockCache系列-性能对比测试报告
网易视频云技术分享:HBaseBlockCache系列-性能对比测试报告网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PAAS 服务,在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。
HBaseBlockCache系列文章到了终结篇,几个主角的是是非非也该有个了断了,在SlabCache被早早地淘汰之后,站在华山之巅的也就仅剩LRU君(LRUBlockCache)和CBC君(binedBlockCache)。
谁赢谁输,我说了不算,你说了也不算,那就来让数据说话。
这篇文章主要对比LRU君和CBC君(offheap模式)分别在四种场景下几种指标(GC、Throughput、Latency、CPU、IO等)的表现情况。
四种场景分别是缓存全部命中、少大部分缓存命中、少量缓存命中、缓存基本未命中。
需要注意的是,本文的所有数据都来自社区文档,在这里分享也只是给大家一个参考,更加详细的测试数据可以阅读文章《paring BlockCache Deploys》和HBASE-11323附件报告。
说明:本文所有图都以时间为横坐标,纵坐标为对应指标。
每X图都会分别显示LRU 君和CBC君的四种场景数据,总计八种场景,下面数据表示LRU君的四种场景分布在时间段21:36:39~22:36:40,CBC君的四种场景分布在时间段23:02:16~00:02:17,看图的时候需要特别注意。
LRU君:Tue Jul 22 21:36:39 PDT 2014 run size=32, clients=25 ; lrubc time=1200 缓存全部命中Tue Jul 22 21:56:39 PDT 2014 run size=72, clients=25 ; lrubctime=1200 大量缓存命中Tue Jul 22 22:16:40 PDT 2014 run size=144, clients=25 ;lrubc time=1200 少量缓存命中Tue Jul 22 22:36:40 PDT 2014 run size=1000, clients=25 ; lrubc time=1200 缓存基本未命中CBC君:Tue Jul 22 23:02:16 PDT 2014 run size=32, clients=25 ; buckettime=1200 缓存全部命中Tue Jul 22 23:22:16 PDT 2014 run size=72, clients=25 ; bucket time=1200 大量缓存命中Tue Jul 22 23:42:17 PDT 2014 run size=144, clients=25 ; bucket time=1200 少量缓存命中Wed Jul 23 00:02:17 PDT 2014 run size=1000, clients=25 ; bucket time=1200 缓存基本未命中GCGC指标是HBase运维最关心的指标,出现一次长时间的GC就会导致这段时间内业务方的所有读写请求失败,如果业务方没有很好的容错,就会出现丢数据的情况出现。
网易视频云技术分享:HBase - 建表语句解析
网易视频云技术分享:HBase -建表语句解析网易视频云是网易公司旗下的视频云服务产品,以Paas服务模式,向开发者提供音视频编解码SDK和开放API,助力APP接入音视频功能。
现在,网易视频云的技术专家给大家分享一篇技术性文章:HBase -建表语句解析。
像所有其他数据库一样,HBase也有表的概念,有表的地方就有建表语句,而且建表语句还很大程度上决定了这张表的存储形式、读写性能。
比如我们熟悉的MySQL,建表语句中数据类型决定了数据的存储形式,主键、索引则很大程度上影响着数据的读写性能。
虽然HBase没有主键、索引这些概念,但在HBase的世界里,有些东西和它们一样重要!废话不说,直接奉上一条HBase建表语句,来为各位看官分解剖析:create'NewsClickFeedback',{NAME=>'Toutiao',VERSIONS=>1,BLOCKCACHE=>true,BLOOMFILTER=> 'ROW',COMPRESSION=>'SNAPPY',TTL => ' 259200 '},{SPLITS =>['1','2','3','4','5','6','7','8','9','a','b','c','d','e','f']}上述建表语句表示创建一个表名为“NewsClickFeedback”的表,该表只包含一个列簇“Toutiao”。
接下来重点讲解其他字段的含义以及如何正确设置。
Note:因为篇幅有限本文并不讲解具体的工作原理,后续会有相关专题对其进行分析。
hbase数据库特点及应用场景
hbase数据库特点及应用场景HBase是一个基于Hadoop的分布式、面向列的NoSQL数据库,被设计用来存储大规模的结构化和半结构化数据。
以下是HBase数据库的特点及其应用场景的相关参考内容。
特点:1. 高可靠性:HBase使用了Hadoop的HDFS作为底层文件系统,数据会被自动复制到集群中其他节点上,可以保证数据的可靠性和容错性。
2. 高扩展性:HBase具有横向扩展的特性,可以通过增加节点来实现更高的吞吐量和存储容量。
3. 高性能:HBase使用了内存和硬盘结合的方式进行数据存储,同时支持数据的并发读写操作,可以满足实时性要求较高的应用场景。
4. 面向列的存储:HBase将数据按列族进行存储,可以灵活地增加、删除和修改列,提供了更好的灵活性和可扩展性。
5. 灵活的数据模型:HBase的数据模型类似于一个稀疏的多维表格,可以方便地存储和查询具有不同列的数据。
6. 复杂查询:HBase提供了强大的查询功能,支持复杂的过滤器和多维范围查找,可以进行高效的数据分析和计算。
应用场景:1. 日志处理:由于HBase具有高可靠性和高扩展性的特点,适合用于大规模日志的存储和分析。
可以存储各种类型的日志数据,并通过HBase提供的查询功能进行实时分析和统计。
2. 个性化推荐系统:个性化推荐系统通常需要存储大量的用户行为数据和物品数据,HBase的高性能和高扩展性使其成为一个理想的选择。
可以将用户的行为日志和个人信息存储在HBase中,并通过数据分析算法进行实时的推荐计算。
3. 时序数据存储:HBase对于时序数据的存储和查询有着很好的支持,适用于物联网、电力、金融等领域的实时监控和分析。
可以将具有时间属性的数据存储在HBase中,通过按时间范围进行查询和聚合分析。
4. 在线教育平台:在线教育平台通常需要存储大量的学生课程数据和学习行为数据,HBase的高性能和灵活的数据模型适合存储和查询这些数据。
可以将学生的课程信息和学习记录存储在HBase中,并通过数据分析提供个性化的学习推荐和统计报表。
网易视频云技术分享:HBase优化实战
网易视频云技术分享:HBase优化实战网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PAAS 服务,在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。
现在,网易视频云的技术专家给大家分享一则技术文:HBase 优化实战。
背景Datastream一直以来在使用HBase分流日志,每天的数据量很大,日均大概在80亿条,10TB的数据。
对于像Datastream这种数据量巨大、对写入要求非常高,并且没有复杂查询需求的日志系统来说,选用HBase作为其数据存储平台,无疑是一个非常不错的选择。
HBase是一个相对较复杂的分布式系统,并发写入的性能非常高。
然而,分布式系统从结构上来讲,也相对较复杂,模块繁多,各个模块之间也很容易出现一些问题,所以对像HBase这样的大型分布式系统来说,优化系统运行,及时解决系统运行过程中出现的问题也变得至关重要。
正所谓:“你”若安好,便是晴天;“你”若有恙,我便没有星期天。
历史现状HBase交接到我们团队手上时,已经在线上运行有一大段时间了,期间也偶尔听到过系统不稳定的、时常会出现一些问题的言论,但我们认为:一个能被大型互联网公司广泛采用的系统(包括Facebook,twitter,淘宝,小米等),其在性能和可用性上是毋庸置疑的,何况像Facebook这种公司,是在经过严格选型后,放弃了自己开发的Cassandra系统,用HBase取而代之。
既然这样,那么,HBase的不稳定、经常出问题一定有些其他的原因,应用反应经常会过段时间出现数据写入缓慢,导致应用端数据堆积现象,是否可以通过增加机器数量来解决?其实,那个时候,我们本身对HBase也不是很熟悉,对HBase的了解,也仅仅在做过一些测试,了解一些性能,对内部结构,实现原理之类的基本上都不怎么清楚。
HBase性能优化方法总结
HBase性能优化方法总结本文主要是从HBase应用程序设计与开发的角度,总结几种常用的性能优化方法。
1. 表的设计1.1 Pre-Creating Regions默认情况下,在创建HBase表的时候会自动创建一个region分区,当导入数据的时候,所有的HBase客户端都向这一个region写数据,直到这个region足够大了才进行切分。
一种可以加快批量写入速度的方法是通过预先创建一些空的regions,这样当数据写入HBase时,会按照region分区情况,在集群内做数据的负载均衡。
有关预分区,详情参见:Table Creation: Pre-Creating Regions,下面是一个例子:[html]view plain copy1.public static boolean createTable(HBaseAdmin admin, HTableDescriptor table, byte[][] splits)2.throws IOException {3. try {4. admin.createTable(table, splits);5. return true;6. } catch (TableExistsException e) {7. ("table " + table.getNameAsString() + " already exists");8. // the table already exists...9. return false;10. }11.}12.13.public static byte[][] getHexSplits(String startKey, String endKey, int numRegions) {14. byte[][] splits = new byte[numRegions-1][];15. BigInteger lowestKey = new BigInteger(startKey, 16);16. BigInteger highestKey = new BigInteger(endKey, 16);17. BigInteger range = highestKey.subtract(lowestKey);18. BigInteger regionIncrement = range.divide(BigInteger.valueOf(numRegions));19.lowestKey = lowestKey.add(regionIncrement);20. for(int i=0; i <numRegions-1;i++) {21. BigInteger key = lowestKey.add(regionIncrement.multiply(BigInteger.valueOf(i)));22. byte[] b = String.format("%016x", key).getBytes();23. splits[i] = b;24. }25. return splits;26.}1.2 Row KeyHBase中row key用来检索表中的记录,支持以下三种方式:•通过单个row key访问:即按照某个row key键值进行get操作;•通过row key的range进行scan:即通过设置startRowKey和endRowKey,在这个范围内进行扫描;•全表扫描:即直接扫描整张表中所有行记录。
网易视频云:HBase – Memstore Flush深度解析
网易视频云:HBase – Memstore Flush深度解析网易视频云技术专家给大家分享一则技术文章:HBase – Memstore Flush深度解析。
Memstore是HBase框架中非常重要的组成部分之一,是HBase能够实现高性能随机读写至关重要的一环。
深入理解Memstore的工作原理、运行机制以及相关配置,对hbase集群管理、性能调优都有着非常重要的帮助。
Memstore 概述HBase中,Region是集群节点上最小的数据服务单元,用户数据表由一个或多个Region组成。
在Region中每个ColumnFamily的数据组成一个Store。
每个Store由一个Memstore和多个HFile组成,如下图所示:之前我们提到,HBase是基于LSM-Tree模型的,所有的数据更新插入操作都首先写入Memstore中(同时会顺序写到日志HLog中),达到指定大小之后再将这些修改操作批量写入磁盘,生成一个新的HFile文件,这种设计可以极大地提升HBase的写入性能;另外,HBase为了方便按照RowKey进行检索,要求HFile中数据都按照RowKey 进行排序,Memstore数据在flush为HFile之前会进行一次排序,将数据有序化;还有,根据局部性原理,新写入的数据会更大概率被读取,因此HBase在读取数据的时候首先检查请求的数据是否在Memstore,写缓存未命中的话再到读缓存中查找,读缓存还未命中才会到HFile文件中查找,最终返回merged的一个结果给用户。
可见,Memstore无论是对HBase的写入性能还是读取性能都至关重要。
其中flush 操作又是Memstore最核心的操作,接下来重点针对Memstore的flush操作进行深入地解析:首先分析HBase在哪些场景下会触发flush,然后结合源代码分析整个flush 的操作流程,最后再重点整理总结和flush相关的配置参数,这些参数对于性能调优、问题定位都非常重要。
网易视频云分享:HBase – 探索HFile索引机制
网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PASS服务。
在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。
现在,网易视频云的技术专家与大家分享一下HBase –探索HFile索引机制。
HFile索引结构解析HFile中索引结构根据索引层级的不同分为两种:single-level和mutil-level,前者表示单层索引,后者表示多级索引,一般为两级或三级。
HFile V1版本中只有single-level 一种索引结构,V2版本中引入多级索引。
之所以引入多级索引,是因为随着HFile文件越来越大,Data Block越来越多,索引数据也越来越大,已经无法全部加载到内存中(V1版本中一个Region Server的索引数据加载到内存会占用几乎6G空间),多级索引可以只加载部分索引,降低内存使用空间。
上一篇文章《HBase-存储文件HFile结构解析》,我们提到Bloom Filter内存使用问题是促使V1版本升级到V2版本的一个原因,再加上这个原因,这两个原因就是V1版本升级到V2版本最重要的两个因素。
V2版本Index Block有两类:Root Index Block和NonRoot Index Block,其中NonRoot Index Block又分为Intermediate Index Block和Leaf Index Block两种。
HFile 中索引结构类似于一棵树,Root Index Block表示索引数根节点,Intermediate Index Block表示中间节点,Leaf Index block表示叶子节点,叶子节点直接指向实际数据块。
HFile中除了Data Block需要索引之外,上一篇文章提到过Bloom Block也需要索引,索引结构实际上就是采用了single-level结构,文中Bloom Index Block就是一种Root Index Block。
网易视频云:HBase – 存储文件HFile结构解析
网易视频云是网易推出的PaaS视频云服务,主要应用于在线教育、直播秀场、远程医疗、企业协作等领域。
今天,网易视频云技术专家与大家分享一下:HBase –存储文件HFile结构解析。
HFile是HBase存储数据的文件组织形式,参考BigTable的SSTable和Hadoop的TFile 实现。
从HBase开始到现在,HFile经历了三个版本,其中V2在0.92引入,V3在0.98引入。
HFileV1版本的在实际使用过程中发现它占用内存多,HFile V2版本针对此进行了优化,HFile V3版本基本和V2版本相同,只是在cell层面添加了Tag数组的支持。
鉴于此,本文主要针对V2版本进行分析,对V1和V3版本感兴趣的同学可以参考其他信息。
HFile逻辑结构HFile V2的逻辑结构如下图所示:文件主要分为四个部分:Scanned block section,Non-scanned block section,Opening-time data section和Trailer。
Scanned block section:顾名思义,表示顺序扫描HFile时所有的数据块将会被读取,包括Leaf Index Block和Bloom Block。
Non-scanned block section:表示在HFile顺序扫描的时候数据不会被读取,主要包括Meta Block和Intermediate Level Data Index Blocks两部分。
Load-on-open-section:这部分数据在HBase的region server启动时,需要加载到内存中。
包括FileInfo、Bloom filter block、data block index和meta block index。
Trailer:这部分主要记录了HFile的基本信息、各个部分的偏移值和寻址信息。
HFile物理结构如上图所示,HFile会被切分为多个大小相等的block块,每个block的大小可以在创建表列簇的时候通过参数blocksize=> ‘65535’进行指定,默认为64k,大号的Block有利于顺序Scan,小号Block利于随机查询,因而需要权衡。
网易视频云技术分享H精选se优化实战精编
网易视频云技术分享H 精选s e优化实战精编Document number:WTT-LKK-GBB-08921-EIGG-22986网易视频云技术分享:HBase优化实战网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PAAS服务,在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。
现在,网易视频云的技术专家给大家分享一则技术文:HBase优化实战。
背景Datastream一直以来在使用HBase分流日志,每天的数据量很大,日均大概在80亿条,10TB的数据。
对于像Datastream这种数据量巨大、对写入要求非常高,并且没有复杂查询需求的日志系统来说,选用HBase作为其数据存储平台,无疑是一个非常不错的选择。
HBase是一个相对较复杂的分布式系统,并发写入的性能非常高。
然而,分布式系统从结构上来讲,也相对较复杂,模块繁多,各个模块之间也很容易出现一些问题,所以对像HBase这样的大型分布式系统来说,优化系统运行,及时解决系统运行过程中出现的问题也变得至关重要。
正所谓:“你”若安好,便是晴天;“你”若有恙,我便没有星期天。
历史现状应用反应经常会过段时间出现数据写入缓慢,导致应用端数据堆积现象,是否可以通过增加机器数量来解决其实,那个时候,我们本身对HBase也不是很熟悉,对HBase的了解,也仅仅在做过一些测试,了解一些性能,对内部结构,实现原理之类的基本上都不怎么清楚。
于是刚开始几天,各种问题,每天晚上拉着一男一起摸索,顺利的时候,晚上8,9点就可以暂时搞定线上问题,更多的时候基本要到22点甚至更晚(可能那个时候流量也下去了),通过不断的摸索,慢慢了解HBase在使用上的一些限制,也就能逐渐解决这一系列过程中发现的问题。
后面挑几个相对比较重要,效果较为明显的改进点,做下简单介绍。
网易视频云:HBase客户端实践–重试机制
网易视频云:HBase客户端实践–重试机制网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,为客户提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PaaS服务。
在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。
现在,网易视频云与大家分享HBase客户端实践–重试机制。
在运维HBase的这段时间里,发现业务用户一方面比较关注HBase本身服务的读写性能:吞吐量以及读写延迟,另一方面也会比较关注HBase客户端使用上的问题,主要集中在两个方面:是否提供了重试机制来保证系统操作的容错性?是否有必要的超时机制保证系统能够fastfail,保证系统的低延迟特性?这个系列我们集中介绍HBase客户端使用上的这两大问题,本文通过分析之前一个真实的案例来介绍HBase客户端提供的重试机制,并通过配置合理的参数使得客户端在保证一定容错性的同时还能够保证系统的低延迟特性。
案发现场最近某业务在使用HBase客户端读取数据时出现了大量线程block的情况,业务方保留了当时的线程堆栈信息,如下图所示:看到这样的问题,首先从日志和监控排查了业务表和region server,确认了在很长时间内确实没有请求进来,除此之外并没有其他有用的信息,同时也没有接到该集群上其他用户的异常反馈,从现象看,这次异常是在特定环境下才会触发的。
案件分析过程1.根据上图图1所示,所有的请求都block在<0x0000000782a936f0>这把全局锁上,这里需要关注两个问题:∙哪个线程持有了这把全局锁<0x0000000782a936f0>?∙这是一把什么样的全局锁(对于问题本身并不重要,有兴趣可以参考步骤3)?2.哪个线程持有了这把锁?2.1 很容易在jstack日志中通过搜索找到全局锁<0x0000000782a936f0>被如下线程持有:定睛一看,该线程持有了这把全局锁,而且处于TIMED_WAITING状态,因此这把锁可能长时间不释放,导致所有需要这把全局锁的线程都阻塞等待。
HBase 数据库检索性能优化策略大数据培训
HBase 数据库检索性能优化策略兄弟连IT教育作为国内领先的培训机构,迄今已有10年的教育历史。
8大特色课程:PHP培训、安卓培训、JAVAEE+大数据、UI设计、HTML5培训、云计算架构师,虚拟现实VR培训,机器人教育培训,在目前IT市场特别火,每门课程都由名师牵头,以认认真真的态度做教育。
HBase 数据表介绍HBase 数据库是一个基于分布式的、面向列的、主要用于非结构化数据存储用途的开源数据库。
其设计思路来源于 Google 的非开源数据库”BigTable”。
HDFS 为 HBase 提供底层存储支持,MapReduce 为其提供计算能力,ZooKeeper 为其提供协调服务和failover(失效转移的备份操作)机制。
Pig 和 Hive 为 HBase 提供了高层语言支持,使其可以进行数据统计(可实现多表 join 等),Sqoop 则为其提供 RDBMS 数据导入功能。
HBase 不能支持 where 条件、Order by 查询,只支持按照主键 Rowkey 和主键的 range 来查询,但是可以通过 HBase 提供的 API 进行条件过滤。
HBase 的 Rowkey 是数据行的唯一标识,必须通过它进行数据行访问,目前有三种方式,单行键访问、行键范围访问、全表扫描访问。
数据按行键的方式排序存储,依次按位比较,数值较大的排列在后,例如 int 方式的排序:1,10,100,11,12,2,20…,906,…。
ColumnFamily 是“列族”,属于 schema 表,在建表时定义,每个列属于一个列族,列名用列族作为前缀“ColumnFamily:qualifier”,访问控制、磁盘和内存的使用统计都是在列族层面进行的。
Cell 是通过行和列确定的一个存储单元,值以字节码存储,没有类型。
Timestamp 是区分不同版本 Cell 的索引,64 位整型。
不同版本的数据按照时间戳倒序排列,最新的数据版本排在最前面。
网易视频云 HBase RegionServer宕机案件侦查
网易视频云:HBaseRegionServer宕机案件侦查今天网易视频云技术专家给大家分享一下HBase–RegionServer宕机案件侦查,欢迎参与讨论。
本来静谧的晚上,吃着葡萄干看着球赛,何等惬意。
可偏偏一条报警短信如闪电一般打破了夜晚的宁静,线上集群一台RS宕了!于是倏地从床上坐起来,看了看监控,瞬间惊呆了:单台机器的读写吞吐量竟然达到了5w ops/sec!RS宕机是因为这么大的写入量造成的?如果真是这样,它是怎么造成的?如果不是这样,那又是什么原因?各种疑问瞬间从脑子里一一闪过,甭管那么多,先把日志备份一份,再把RS拉起来。
接下来还是Bug排查老套路:日志、监控和源码三管齐下,来看看到底发生了什么!案件现场篇下图是使用监控工具Ganglia对事发RegionServer当时读写吞吐量的监控曲线,从图中可以看出,大约在19点~21点半的时间段内,这台RS的吞吐量都维持了3w ops/sec 左右,峰值更是达到了6w ops/sec。
之前我们就线上单台RS能够承受的最大读写吞吐量进行过测定,基本也就维持在2w左右,主要是因为网络带宽瓶颈。
而在宕机前这台RS的读写吞吐量超出这么多,直觉告诉我RS宕机原因就是它!接着就赶紧把日志拉出来看,满屏的responseTooSlow,如下图所示:很显然,这种异常最大可能原因就是Full GC,果然,经过耐心地排查,可以看到很多如下所示的Full GC日志片段:2016-04-14 21:27:13,174 WARN [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 20542ms GC pool 'ParNew' had collection(s): count=1 time=0msGC pool 'ConcurrentMarkSweep' had collection(s): count=2 time=20898ms 2016-04-14 21:27:13,174 WARN [regionserver60020.periodicFlusher]util.Sleeper: We slept 20936ms instead of 100ms, this is likely due to a longgarbage collecting pause and it's usually bad, see/book.html#trouble.rs.runtime.zkexpired可以看出,HBase执行了一次CMS GC,导致整个进程所有线程被挂起了20s。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
名称
数量Βιβλιοθήκη 备注服务器数量17
配置不同,HBase、HDFS 都部署在这些机器上
表数量
30+
只有部分表的数据量比较大,其他基本没多少数据
Region 数量
600+
基本上都是数据量较大的表划分的 region 较多
请求量
50000+
服务器请求分布极其不均匀
应用反应经常会过段时间出现数据写入缓慢,导致应用端数据堆积现象,是否可以通过增加机器数 量来解决?
其实,那个时候,我们本身对 HBase 也不是很熟悉,对 HBase 的了解,也仅仅在做过一些测试, 了解一些性能,对内部结构,实现原理之类的基本上都不怎么清楚。于是刚开始几天,各种问题,每天 晚上拉着一男一起摸索,顺利的时候,晚上 8,9 点就可以暂时搞定线上问题,更多的时候基本要到 22 点甚至更晚(可能那个时候流量也下去了),通过不断的摸索,慢慢了解 HBase 在使用上的一些限制,也 就能逐渐解决这一系列过程中发现的问题。后面挑几个相对比较重要,效果较为明显的改进点,做下简 单介绍。
调优 首先根据目前 17 台机器,50000+的 QPS,并且观察磁盘的 I/O 利用率和 CPU 利用率都相当低来 判断:当前的请求数量根本没有达到系统的性能瓶颈,不需要新增机器来提高性能。如果不是硬件资源 问题,那么性能的瓶颈究竟是什么? Rowkey 设计问题 现象 打开 HBase 的 Web 端,发现 HBase 下面各个 RegionServer 的请求数量非常不均匀,第一个想到 的就是 HBase 的热点问题,具体到某个具体表上的请求分布如下: HBase 表请求分布
背景 Datastream 一直以来在使用 HBase 分流日志,每天的数据量很大,日均大概在 80 亿条,10TB 的数据。对于像 Datastream 这种数据量巨大、对写入要求非常高,并且没有复杂查询需求的日志系统 来说,选用 HBase 作为其数据存储平台,无疑是一个非常不错的选择。 HBase 是一个相对较复杂的分布式系统,并发写入的性能非常高。然而,分布式系统从结构上来讲, 也相对较复杂,模块繁多,各个模块之间也很容易出现一些问题,所以对像 HBase 这样的大型分布式系 统来说,优化系统运行,及时解决系统运行过程中出现的问题也变得至关重要。正所谓:“你”若安好, 便是晴天;“你”若有恙,我便没有星期天。 历史现状 HBase 交接到我们团队手上时,已经在线上运行有一大段时间了,期间也偶尔听到过系统不稳定的、 时常会出现一些问题的言论,但我们认为:一个能被大型互联网公司广泛采用的系统(包括 Facebook, twitter,淘宝,小米等),其在性能和可用性上是毋庸置疑的,何况像 Facebook 这种公司,是在经过严 格选型后,放弃了自己开发的 Cassandra 系统,用 HBase 取而代之。既然这样,那么,HBase 的不稳 定、经常出问题一定有些其他的原因,我们所要做的,就是找出这些 HBase 的不稳定因素,还 HBase 一个“清白”。“查案”之前,先来简单回顾一下我们接手 HBase 时的现状(我们运维着好几个 HBase 集群,这里主要介绍问题最多那个集群的调优):
解决的方法可以让 SA 释放些空间出来便于数据写入。当然,最直接有效的就是把 HDFS 的预留空 间调整至 100G 以上,我们也正是这样做的,通过调整后,异常不再出现,HBase 层面的 slow log 也 没有再出现。同时我们也开启了 HDFS 层面的 balance,使数据自动在各个服务器之间保持平衡。
网易视频云技术分享:HBase 优化实战
网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流 畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的 PAAS 服务,在线教育、远程医 疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。现在,网 易视频云的技术专家给大家分享一则技术文:HBase 优化实战。
WARN - (responseTooSlow): {“processingtimemsrpc version=1, client version=29, methodsFingerPrintstarttimems”:1440239670790, “queuetimems”:42081, “class”:” HRegionServer”, “responsesize”:0, “method”:”multi”}
资源分配不均匀,造成部分机器压力较大,部分机器负载较低,并且部分 Region 过大过热,导致 请求相对较集中。
解决 迁移部分老的 RegionServer 上的 region 到新加入的机器上,使每个 RegionServer 的负载均匀。 通过 split 切分部分较大 region,均匀分布热点 region 到各个 RegionServer 上。 HBase region 请求分布 对比前后两张截图我们可以看到,Region 总数量从 1336 增加到了 1426,而增加的这 90 个 region 就是通过 split 切分大的 region 得到的。而对 region 重新分布后,整个 HBase 的性能有了大幅度提高。 建议 Region 迁移的时候不能简单开启自动 balance,因为 balance 主要的问题是不会根据表来进行 balance,HBase 的自动 balance 只会根据每个 RegionServer 上的 Region 数量来进行 balance,所 以自动 balance 可能会造成同张表的 region 会被集中迁移到同一个台 RegionServer 上,这样就达不 到分布式的效果。 基本上,新增 RegionServer 后的 region 调整,可以手工进行,尽量使表的 Region 都平均分配到 各个 RegionServer 上,另外一点,新增的 RegionServer 机器,配置最好与前面的一致,否则资源无 法更好利用。 对于过大,过热的 region,可以通过切分的方法生成多个小 region 后均匀分布(注意:region 切 分会触发 major compact 操作,会带来较大的 I/O 请求,请务必在业务低峰期进行) HDFS 写入超时 现象 HBase 写入缓慢,查看 HBase 日志,经常有慢日志如下:
并且伴有 HDFS 创建 block 异常如下: INFO – Exception in createBlockOutputStream (HdfsProtoUtil.java:171) $DataStreamer.createBlockOutputStream(DFSOutputStream.java:1105) $DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1039) $DataStreamer.run(DFSOutputStream.java:487) 一般地,HBase 客户端的写入到 RegionServer 下某个 region 的 memstore 后就返回,除了网络 外,其他都是内存操作,应该不会有长达 30 多秒的延迟,外加 HDFS 层抛出的异常,我们怀疑很可能 跟底层数据存储有关。 原因 定位到可能是 HDFS 层出现了问题,那就先从底层开始排查,发现该台机器上 10 块盘的空间利用 率都已经达到 100%。按理说,作为一个成熟的分布式文件系统,对于部分数据盘满的情况,应该有其 应对措施。的确,HDFS 本身可以设置数据盘预留空间,如果部分数据盘的预留空间小于该值时,HDFS 会自动把数据写入到另外的空盘上面,那么我们这个又是什么情况? 最终通过多方面的沟通确认,发现了主要原因:我们这批机器,在上线前 SA 已经经过处理,每块 盘默认预留 100G 空间,所以当通过 df 命令查看盘使用率为 100%时,其实盘还有 100G 的预留空间, 而 HDFS 层面我们配置的预留空间是 50G,那么问题就来了:HDFS 认为盘还有 100G 空间,并且多于 50G 的预留,所以数据可以写入本地盘,但是系统层面却禁止了该写入操作,从而导致数据写入异常。 解决
网络问题,联系机房解决,机房的反馈也验证了我们的想法:由于 HBase 的机器后面进行了扩展, 后面加入的机器有一台跟其他机器不在同一个交换机下,而这台机器正是我们找出的有较大 ping 延时 这台,整个 HBase 物理结构如下:
HBase 物理拓扑结构 跟机房协调,调整机器位置,使所有的 HBase 机器都位于同一个交换机下,问题迎刃而解。 建议 对于分布式大流量的系统,除了系统本身,物理机的部署和流量规划也相当重要,尽量使集群中所 有的机器位于相同的交换机下(有容灾需求的应用除外),集群较大,需要跨交换机部署时,也要充分考 虑交换机的出口流量是否够用,网络硬件上的瓶颈诊断起来相对更为困难。 JVM 参数调整 解决了网络上面的不稳定因素,HBase 的性能又得到进一步的提高,随之也带来了另外的问题。 现象 根据应用反应,HBase 会阶段性出现性能下降,导致应用数据写入缓慢,造成应用端的数据堆积, 这又是怎么回事?经过一系列改善后 HBase 的系统较之以前有了大幅度增长,怎么还会出现数据堆积的 问题?为什么会阶段性出现? HBase 流量统计 从上图看,HBase 平均流量 QPS 基本能达到 12w,但是每过一段时间,流量就会下降到接近零点, 同时这段时间,应用会反应数据堆积。 原因 这个问题定位相对还是比较简单,结合 HBase 的日志,很容易找到问题所在: – We slept 41662ms instead of 3000ms, this is likely due to a long garbage collecting pause and it’s usually bad
建议 磁盘满了导致的问题很难预料,HDFS 可能会导致部分数据写入异常,MySQL 可能会出现直接宕机 等等,所以最好的办法就是:不要使盘的利用率达到 100%。 网络拓扑 现象 通过 rowkey 调整,HDFS 数据 balance 等操作后,HBase 的确稳定了许多,在很长一段时间都没 有出现写入缓慢问题,整体的性能也上涨了很多。但时常会隔一段时间出现些 slow log,虽然对整体的 性能影响不大,但性能上的抖动还是很明显。 原因 由于该问题不经常出现,对系统的诊断带来不小的麻烦,排查了 HBase 层和 HDFS 层,几乎一无 所获,因为在大多数情况下,系统的吞吐量都是正常的。通过脚本收集 RegionServer 所在服务器的系 统资源信息,也看不出问题所在,最后怀疑到系统的物理拓扑上,HBase 集群的最大特点是数据量巨大, 在做一些操作时,很容易把物理机的千兆网卡都吃满,这样如果网络拓扑结构存在问题,HBase 的所有 机器没有部署在同一个交换机上,上层交换机的进出口流量也有可能存在瓶颈。网络测试还是挺简单的, 直接 ping 就可以,我们得到以下结果:共 17 台机器,只有其中一台的延迟存在问题,如下: 网络延迟测试:Ping 结果 同一个局域网内的机器,延迟达到了毫秒级别,这个延迟是比较致命的,因为分布式存储系统 HDFS 本身对网络有要求,HDFS 默认 3 副本存在不同的机器上,如果其中某台机器的网络存在问题,这样就 会影响到该机器上保存副本的写入,拖慢整个 HDFS 的写入速度。 解决