网易视频云技术分享HBase优化实战
- 格式:docx
- 大小:24.58 KB
- 文档页数:8
网易视频云:网易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模块。
网易视频云技术分享: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是一个开源的分布式非关系型数据库,它建立在Hadoop文件系统之上,提供了对大型数据集的随机、实时的读/写访问。
在实际的应用场景中,HBase有着广泛的应用,下面我们将介绍几个HBase的案例,以便更好地理解其在实际中的应用。
1. 电商行业。
在电商行业中,HBase被广泛应用于用户行为分析、推荐系统和实时数据分析等领域。
通过HBase存储用户的点击、购买、浏览等行为数据,可以实时分析用户的偏好,为用户推荐个性化的商品。
同时,HBase还可以支持实时的交易数据处理,保证交易数据的一致性和可靠性。
2. 在线广告系统。
在在线广告系统中,HBase可以用于存储海量的广告点击数据、用户画像数据等。
通过HBase的快速读写能力,广告系统可以实时地根据用户的兴趣和行为进行广告投放,提高广告的转化率和用户体验。
3. 物联网领域。
在物联网领域,HBase可以用于存储传感器数据、设备状态数据等。
通过HBase的高可靠性和实时性,可以支持对物联网设备的监控和实时数据分析,为智能城市、智能家居等场景提供数据支持。
4. 游戏行业。
在游戏行业中,HBase可以用于存储玩家的游戏数据、排行榜数据等。
通过HBase的高性能和可扩展性,游戏系统可以实时地处理玩家的游戏行为数据,并支持实时的排行榜计算和展示。
5. 金融行业。
在金融行业中,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案例:实时日志分析系统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的过滤器来提高查询性能,如前缀过滤器、范围过滤器等。
网易视频云技术分享: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 -建表语句解析网易视频云是网易公司旗下的视频云服务产品,以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是一个基于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优化实战网易视频云是网易倾力打造的一款基于云计算的分布式多媒体处理集群和专业音视频技术,提供稳定流畅、低时延、高并发的视频直播、录制、存储、转码及点播等音视频的PAAS 服务,在线教育、远程医疗、娱乐秀场、在线金融等各行业及企业用户只需经过简单的开发即可打造在线音视频平台。
现在,网易视频云的技术专家给大家分享一则技术文:HBase 优化实战。
背景Datastream一直以来在使用HBase分流日志,每天的数据量很大,日均大概在80亿条,10TB的数据。
对于像Datastream这种数据量巨大、对写入要求非常高,并且没有复杂查询需求的日志系统来说,选用HBase作为其数据存储平台,无疑是一个非常不错的选择。
HBase是一个相对较复杂的分布式系统,并发写入的性能非常高。
然而,分布式系统从结构上来讲,也相对较复杂,模块繁多,各个模块之间也很容易出现一些问题,所以对像HBase这样的大型分布式系统来说,优化系统运行,及时解决系统运行过程中出现的问题也变得至关重要。
正所谓:“你”若安好,便是晴天;“你”若有恙,我便没有星期天。
历史现状HBase交接到我们团队手上时,已经在线上运行有一大段时间了,期间也偶尔听到过系统不稳定的、时常会出现一些问题的言论,但我们认为:一个能被大型互联网公司广泛采用的系统(包括Facebook,twitter,淘宝,小米等),其在性能和可用性上是毋庸置疑的,何况像Facebook这种公司,是在经过严格选型后,放弃了自己开发的Cassandra系统,用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,在这个范围内进行扫描;•全表扫描:即直接扫描整张表中所有行记录。