POS:简化实时流应用程序开发的Storm高级系统
copy;作者 崔斌,姜洁,黄全龙,徐鹰,桂艳君,张文宇
收到:2015年8月25日
修订日期:2015年8月25日
接受日期:2015年8月27日
在线发布:2015年9月8日
本文发表于2015年, 在Springerlink.com开放获取
摘要
由于在各种社交网络和电子商务网站中持续产生的大量内容,实时流计算变得越来越重要。许多分布式实时计算系统已针对不同的应用程序构建,Storm是具有高性能,容错和低延迟功能的最突出的系统之一。然而,Storm编程范式是低级的,并且使程序员的代码难以维护和重用。 在本文中,我们提出了一个称为POS的高级抽象系统。 POS系统在Storm执行引擎之上提供一个类Pig Latin语言。 程序员可以编写POS程序,系统将程序编译成在Storm上执行的物理计划。 我们讨论开发POS系统面临的挑战并阐述其实现的细节。 我们的实验表明,和原始Storm相比,POS的性能更令人满意。
关键词 实时 流处理 Pig Storm
1简介
来自各种网站的快速生成的内容对数据处理系统提出了巨大的挑战[1]。广泛使用的Hadoop系统[2]是用来做批处理的,这不适合流计算环境。许多实时计算系统逐渐引起用户的注意,例如开源系统Storm[3]和Yahoo S4[4],商业软件Esper[5]和StreamBase[6]。
作为一个分布式系统,Storm具有一些有前景的特点,例如容错,低延迟和高性能。 许多公司,包括Twitter,阿里巴巴和百度,都使用Storm来处理他们的数据分析工作。 在腾讯公司,已经建立了具有超过2000个物理节点的Storm集群,为诸如QQ,腾讯视频和微信等各种应用提供服务。 该服务包括基本数据处理,项目推荐,广告计费和实时监控。 复杂应用的Storm程序可能包含数十个Storm单元(spout或bolt),并且总代码长度可能超过几千。
然而,随着在线应用程序变得复杂,Storm逐渐显示其在代码开发和程序维护方面的低效性。 Storm提供了两个编程术语,spout和bolt。 用户必须熟练掌握一种编程语言,并掌握这两种基元编程规范来处理数据分析任务,这使得非专家或新用户很难使用。 此外,Storm不支持常见操作,例如投影和过滤。并且,刚性和低级编程范例使得代码难以维护和重用。 然而,与具有许多高级编程语言如Pig [7],DryadLINQ[8],SawZall[9]的批处理框架不同,Storm迄今为止几乎没有高级编程语言。
为了解决上述问题,我们开发了一个高级版的Storm,名为基于Storm的Pig(POS)。 Pig [ 10,11 ]是一个大数据分析系统,为Hadoop提供了一个高级语言Pig Latin。 它将Pig Latin脚本转换为在Hadoop上执行的Map-Reduce作业。 Pig可以提供高级操作,例如过滤,投影,聚合和用户定义函数(UDF),并大大提高Map-Reduce作业的编码效率。 然而,将Pig移植到Storm并不是一件简单的任务。 Pig被设计为在批处理系统Hadoop上执行作业,这完全不同于Storm。 许多Pig Latin语法对Storm执行引擎没有意义。 此外,作为一个实时处理平台,Storm需要快速的响应时间,而Hadoop则不是这样。
在本文中,我们讨论在开发POS的挑战,并提出POS的实现细节。在POS系统中,我们采用类Pig Latin语言作为我们的编程语言。 为了实现实时特性,我们通过添加四个新的运算符来扩展Pig Latin语法:TAP,PARTITION,BIND和WINDOW。 为了实现Storm的低延迟,我们开发了一个辅助的内存中键值缓存来存储中间状态和结果。 构建POS编译器以将POS脚本编译为Storm拓扑。 当脚本提交到POS编译器时,它将经历语法分析,物理计划构建,拓扑计划生成阶段,最后,它将被转换为Storm拓扑。 我们对POS进行了广泛的实验。 结果表明,POS具有与原始Storm相当的处理能力。 POS已经部署在腾讯支持各种应用[ 12 ],包括项目推荐,广告目标。每个应用程序每日处理的元组超过50亿。 总之,我们的工作贡献可以列举如下:
1.据我们所知,POS是移植Pig到Storm的第一个实用工作。 它已经在线部署,在实际业务应用中获得令人满意的性能和良好的稳定性。
2.通过扩展Pig Latin语法,我们的POS系统可以通过编程的简易性和更少的代码维护工作满足实时需求。
3.POS系统的效率已经被全面测量,实验结果表明,我们的系统具有与原始Storm相当的性能,同时大大提高了开发生产力。
本文的其余部分安排如下。 第2节介绍相关的大数据处理系统和开发POS的挑战。 第3节,我们介绍POS的系统概述,并且详细介绍了POS语法。 第4节介绍POS编译器的实现细节。第5、6节展示实验评价。 最后一部分,我们总结了我们的工作。
2背景和挑战
2.1 Storm
Storm [ 3 ]是由Twitter提出的一种分布式容错实时计算系统。 它被设计为进行实时数据分析任务,例如处理连续的Twitter推特流。 在Hadoop中,数据分析任务包含在一个或多个Map-Reduce作业中。 因此,在Storm中,我们构建了用于处理数据分析任务的拓扑。拓扑由Spout和Bolt以及它们之间的链接组成。 这些单元一起构成了表示整个流处理过程的数据处理定向非循环图(DAG)。Spout是数据流的源。 它读取数据元组并将它们发送到订阅的Bolt。Bolt是数据处理单元,其接收任何数量的输入流,进行一些特定处理,并且最终可以将新的元组发出到其他Bolt。 复杂的数据处理任务总是需要多个Bolt。
2.2 Pig
Apache Pig [ 7 ]是一个大数据分析平台。 它由高级数据流语言Pig Latin和下层数据处理和转换系统组成。 基础设施层通常基于Hadoop。 Pig将Pig Latin脚本作为输入,并将其转换为Hadoop Map-Reduce作业,然后监视在Hadoop集群上运行的作业。 Pig利用Hadoop强大的处理能力,提供了非常简单的编程原语,并以大规模分布式方式解决大数据问题。
Pig Latin包含许多常用的高级数据转换操作符,如LOAD,FILTER,FOREACH,JOIN。 这些操作符使程序员能够方便地解析数据分析作业,读者可以参考[ 7,11 ]了解更多详细信息。 关于Pig的另一个重要问题是它的数据模型。 Pig Latin有一个丰富的数据模型,它包含简单的原子数据类型,包括int,long,float,double,boolean,chararray,以及复杂的数据类型,包括元组,map和bag。 这些复杂的数据类型与程序员的编程习惯一致。 凭借丰富的数据模型和逐步处理的能力,Pig为用户提供了卓越的编程体验。
2.3 Storm高级系统
Trident [1]和Summingbird [ 13 ]是Storm上的两个高级系统。 Trident是Storm的一个抽象,提供了方便的API,如连接,聚合,分组,过滤器。 当使用Trident开发应用程序时,程序员仍然需要了解Storm的概念并自己定义拓扑。 Trident只是为程序员封装了一些常见的操作,以减少一些编程工作量。 它缺乏高级语言(如Pig或Hive)的灵活性。 Summingbird是一种特定领域的语言,旨在整合批处理和在线处理。 一个Summingbird程序可以在两个不同的平台上运行,Hadoop用于批处理,Storm用于流处理。
然而,这两个系统不能很好地支持实际应用中的实时处理作业。 首先,许多腾讯应用程序需要在任何时间点计数完全统计数据,如网站的唯一访问者(UV)和网页浏览量(PV)或某些监控数据。 Trident将流作为小批量的元组处理,这使得结果在任何特定时间点不够精确。 我们需要一个可以用更细粒度的元组处理流的系统。 第二,在很多在线业务中,时间窗口操作是最常用的。 尽管Trident和Summingbird隐含地支持滑动窗口操作,但是它们不提供用户可以方便地在任意时间间隔期间收集的元组上操作的窗口运算符。 此外,这两个系统只能由程序员使用,并且比Pig更复杂。
2.4移植的挑战
在本文中,我们的目标是开发POS系统。 然而,将Pig移植到Storm面临着许多挑战。
首先,许多Pig操作符不适合流处理场景。 Storm操纵无界和无限的数据流,而Hadoop处理存储在HDFS中的固定数据关系[ 14 ]。 原始的Pig操作符(如GROUP和LIMIT)用于处理固定的数据关系。 在POS中,这些操作符必须改变它们的语义并获得不同的处理逻辑。
第二,Pig脚本被编译为Map-Reduce作业的序列,并且两个Map-Reduce作业之间的中间结果存储在HDFS中。 然而,作为一个实时处理平台,Storm需要快速的响应时间。 如果我们将中间结果存储在磁盘上,I / O开销将导致非常高的延迟。 POS必须找到确保Storm系统低延迟的方法。
第三,在流处理应用中,时间窗口操作可占据大约80%的在线应用程序。 我们需要在POS系统中提供高性能的时间窗口操作,这是Pig不支持的。
我们在开发POS方面也面临许多实现障碍,如Pig数据模型和Storm数据模型之间的不兼容性,拓扑生成过程中的Bolt分区问题。 所有上述挑战将在以下部分进一步讨论和解决。
3系统概述
图1显示了POS系统的框架,它由四个部分组成,即用户界面,POS编译器,Storm执行器和内存键值引擎(KVE)。
图1 系统设计概述
用户界面提供了类似Pig Latin的语言。 在POS中,我们扩展Pig Latin语法以满足实时处理功能。 用户可以根据语法规则编写POS脚本,并提交给POS编译器。
POS编译器分四个阶段工作。 首先,所提交的POS脚本在语法和语义上被解析成由逻辑运算符及其关系组成的逻辑计划。 其次,通过遍历逻辑计划来生成物理计划,以将每个逻辑运算符转换为可执行的物理运算符。 第三,通过将物理运算符划分为不同的部分来构建拓扑计划。 最后,从分区拓扑计划构建可执行的Storm拓扑。
在实时流计算系统中,在线应用将产生许多中间结果和数据状态。 在原Pig系统中,所有生成的数据存储在磁盘上。 但频繁的磁盘操作肯定会增加延迟,导致系统的效率下降很大。 因此,我们开发了一个辅助系统,即一个内存中的KVE来解决这个问题。 KVE是一个网络化的分布式内存键值缓存,如Redis [ 15 ]。 与许多其他键值数据存储一样,KVE为用户提供了两种常见的数据访问功能:“get”和“put”,用于读取和写入数据对。 键的最大大小为4 KB,值的最大大小为1 MB。 值字段可以是包含多个数据字段的简单字符串,这些数据字段由分隔符(例如制表符 t或逗号)连接,以及以原型[ 16 ]的形式定义的复杂数据对象。
KVE采用客户端 - 服务器框架。 它有两种类型的服务器,配置服务器和数据服务器。 配置服务器在路由表中保存数据项和数据位置之间的匹配信息。 数据服务器存储实际数据项及其备份。 当向KVE提交读取或写入操作时,客户端连接配置服务器以获取路由表,并回复数据位置。 然后,应用程序可以直接与数据服务器交换数据。 这种结构使KVE成为具有高可扩展性的可靠数据存储。 由于其高性能和可扩展性,它现在平均每天支持500亿次数据访问。 在POS中,我们将KVE操作封装到多个UDF中,这大大简化了与KVE和POS程序员的交互。
4 POS语法
在本节中,我们提供POS语言的语法。 POS的基本语法规则(例如区分大小写和命名规则)与原始Pig Latin保持相同。 POS支持几乎所有的Pig操作符和内置函数,除了我们对操作符和函数进行一些修改以适应实时特征。 我们的系统为多种数据处理情况提供了广泛的UDF,例如,输入和输出归一化,字符串解析,时间相关处理和状态监视。 我们还收集普遍使用的算法,如点击率(CTR)和各种哈希函数的计数到一个算法包。 所有这些UDF可以很容易地在POS脚本中使用。
4.1 Apache Pig和POS的整体语法比较
以下是Apache Pig脚本和POS脚本之间的比较。 这两个程序都解决了WordCount问题。
Apache Pig
POS
如这两个脚本所示,我们可以看到POS的每一步的差异:
(1)我们用TAP代替LOAD运算符来处理流输入。 LocalFileTap()是一个从外部磁盘存储读取数据元组的UDF;
(2)FOREACH运算符的使用与原来的相同;
(3)我们添加一个新的操作符PARTITION来创建一个新的Bolt。 此语句将在Storm拓扑中将相同的字分割成相同的Bolt,确保相同的字在一个处理单元中计数;
(4)和(5)Original Pig依赖Hadoop来执行脚本。 因此,由每个
剩余内容已隐藏,支付完成后下载完整资料


英语原文共 10 页,剩余内容已隐藏,支付完成后下载完整资料
资料编号:[140304],资料为PDF文档或Word文档,PDF文档可免费转换为Word
您可能感兴趣的文章
- 饮用水微生物群:一个全面的时空研究,以监测巴黎供水系统的水质外文翻译资料
- 步进电机控制和摩擦模型对复杂机械系统精确定位的影响外文翻译资料
- 具有温湿度控制的开式阴极PEM燃料电池性能的提升外文翻译资料
- 警报定时系统对驾驶员行为的影响:调查驾驶员信任的差异以及根据警报定时对警报的响应外文翻译资料
- 门禁系统的零知识认证解决方案外文翻译资料
- 车辆废气及室外环境中悬浮微粒中有机磷的含量—-个案研究外文翻译资料
- ZigBee协议对城市风力涡轮机的无线监控: 支持应用软件和传感器模块外文翻译资料
- ZigBee系统在医疗保健中提供位置信息和传感器数据传输的方案外文翻译资料
- 基于PLC的模糊控制器在污水处理系统中的应用外文翻译资料
- 光伏并联最大功率点跟踪系统独立应用程序外文翻译资料
