目前最流行的大规模数据处理是MapReduce,不过MapReduce只是一个面向批处理的框架。其它情况则是流处理系统或针对特定问题的特殊解决方案(比如Pregel、GraphLab等等),当然还有“应用最广”的并行数据库。
流计算来自于一个信念:数据的价值随着时间的流逝而降低,所以事件出现后必须尽快地对它们进行处理,最好数据出现时便立刻对其进行处理,发生一个事件进行一次处理,而不是缓存起来成一批处理。
S4(Simple Scalable Streaming System)是Yahoo最新发布的一个开源流计算平台,引用项目开源地址(http://s4.io/)首页对S4的介绍:
S4 is a general-purpose, distributed, scalable, partially fault-tolerant, pluggable platform that allows
programmers to easily develop applications for processing continuous unbounded streams of data.
即S4是一个通用的、可扩展性良好、具有部分容错能力、支持插件的分布式流计算平台,在该平台上程序员可以很方便地开发处理流数据的应用。
S4发布之后自然是立刻得到了大家的广泛关注(相对比较落后的我都在半个月前就看过本篇论文了,无奈在集中精力准备学位课考试),以下是我的论文阅读笔记 :
==== (这是liulixiang.info上有意义的分割线)====
S4: Distributed Stream Computing Platform
by Leonardo Neumeyer, Bruce Robbins, Anish Nair, Anand Kesari
from Yahoo! Labs
论文pdf地址:KDCloud 2010 S4.pdf
开发流处理平台的动机:
流计算的必要性:
实时搜索、高频率交易、社交网络等需要可扩展性好、能处理高频数据和大规模数据的流计算解决方案。
{liulixiang注:流计算已经有多年历史,最典型的应用流处理的领域是金融机构的交易系统——这种系统的需求体现了流处理的优势:实时性、transaction控制。不过在数据规模和可扩展性方面的要求并不高}
Yahoo创立该项目的直接业务需求:
在搜索引擎的“cost-per-click”广告中,根据当前情景上下文(用户偏好、地理位置、已发生的查询和点击等)估计用户点击的可能性,开发S4的主要目的是为了处理用户反馈。
为什么不用Hadoop?
在线算法对框架的需求:suitable for both research and production environments。即不断对算法进行实验和调整所需的灵活性(flexibility),和实际应用中的可扩展性(scalability)和高可用性(HA:High availability)。
MapReduce模型主要针对批处理(batch processing)应用,可以预先调度和控制作业的执行。流计算面向的是不可控的事件(load shedding问题)。搭建两种应用都适用的系统很复杂(当然也有在线的MapReduce框架[xx])。即尽管MapReduce编程模型在批数据处理和大规模集群方面具有很多优点(advance),但是并不满足通用分布式流计算软件的需要。
目前已经有一些通过把输入数据划分成段使用MapReduce平台实现流处理策略的方案,但是延迟是一个很大的问题,而小段数据需要解决段之间的依赖问题,最佳大小完全依赖于应用。
基本假设和设计目标:
系统基本假设:
- 允许故障时的数据丢失(Lossy failover is acceptable)。
- 集群运行时不会添加或减少节点。
设计目标:
- 提供简单的编程接口;
- 设计一个由普通硬件组成的高可用、可扩展性良好的集群;
- 最小化延时(minimise latency):使用本地内存,尽量避免磁盘I/O。
- 使用分散、对称的结构(decentralized and symmetric architecture):所有节点功能一样,无中心节点和特殊功能节点(方便部署和维护);
- 可插拔的结构以满足通用和定制的需要;
- 设计思想要比较友好:容易编程、比较灵活。
系统未考虑的问题(根据系统假设):
- 负载load balancing
- 健壮性robust
设计模型:
Actor模型+MapReduce
Actor模型是最适合设计目标的模型:在普通硬件上的分布式操作+避免不同机器间共享内存。
{liulixiang注:作者提到了IBM同类型系统SPC(IBM’s Stream Processing Core Middleware)使用的是PubSub模型,也是目前最流行的事件处理模型之一}
设计细节
流(Stream)定义为一系列的元素(events),每个元素用(K, A)表示。(K:tuple-valued keys; A:attributes)
系统组成之Precessing Elemens(PEs):
基本计算单元;一个计算单元实例由四个部分标识:
- 功能functionality
- 接受(消耗)的事件Types of vents
- (键值)属性Keyed attributes
- (属性)值Value(of the ekyed attributes)
特殊的keyless PE——无属性PE,接受所有满足类型限制的的事件,通常处于输入层
Standard PE:完成count、join、aggregate等功能。
PE的生存使用TTL控制。
系统组成之Processing Nodes(PNs)
PN是逻辑节点——负责事件监听、输入事件处理、发射输出事件
使用基于键值的哈希函数发送事件(一个事件可能发给多个PE)
PN使用PEC(Processing element container)根据event调用对应的PE
特殊的PE对象:无属性值的PE prototype,用作初始化和PE的克隆
每个keyed PE传给有且仅有一个PN
通信层:
集群管理:进行failover、逻辑节点到物理节点的映射、硬件失败管理等
提供Java\C++等的API、支持部分网络协议
使用ZooKeeper进行协同(coordinate)管理
编程模型
开发者只需要实现processEvent()和output()两种处理器(handler)
流计算实例
- CTR预估( Click-Through Rate Computation)
- 在线参数优化( online parameter optimization (OPO) system)
== 分隔线 ==
由于去年来间断地关注分布式事件系统,所以看到流计算、复杂事件处理之类的应用或paper就比较激动。S4的出现很好地说明了流计算在互联网应用中有较大作用,该paper中的相关应用场景应该的相关公司将考虑引入流计算的必要性,国内互联网也应该很快会开始(或已经)关注流计算。
自己整理了一个事件处理的书单:
Event-Processing豆列by liulixiang.info
—
更新,已经有人对该论文做全文翻译发布在百度文库——Yahoo!的分布式流计算平台(S4)论文的中文版:
– EOF –
相关推荐
S4是Yahoo开发的一种分布式流计算平台,全称为“Simple Scalable Streaming System”(简单可扩展流处理系统)。它是一个开源项目,旨在处理无界数据流,即不断流入且无固定结束时间的数据流。S4的设计目标是为大...
运行s4中myApp程序时,./s4 deploy -s4r=`pwd`/build/libs/myApp.s4r -c=cluster1 -appName=myApp,该命令若运行失败是,可将该文件考到myApp文件夹下,跳过该命令,运行下面命令即可
它由 Yahoo! 研究院开发,并在 Apache Software Foundation 的孵化器项目中进行维护。S4 的设计目标是提供一个可扩展、容错性好且灵活的平台,用于构建大规模的实时分析应用。 ### S4 架构 S4 的核心架构基于“无...
S4是Yahoo开发的一个开源的、分布式的流计算平台,专为处理和分析连续的数据流而设计。在本文中,我们将深入探讨S4的核心概念、架构、工作原理以及其源码中的关键组件。 **核心概念** S4的核心概念是事件(Events)...
描述:“基于Java的Yahoo的分布式流计算平台 S4.zip”是一个包含有关Yahoo的S4项目的压缩文件,该平台专注于处理大规模实时数据流。S4是开源的,旨在提供一个可扩展、容错的框架,用于构建和运行分布式流应用。 ###...
这个压缩包“基于java的Yahoo的分布式流计算平台 S4.zip”显然包含了关于S4的相关资料,下面将详细介绍S4及其相关知识点。 S4是一个分布式、容错的实时计算系统,它允许开发者在无共享的架构上构建应用,处理持续...
《基于Java的Yahoo分布式流计算平台S4详解》 在当今大数据时代,高效处理实时数据流成为企业不可或缺的能力。Yahoo的S4(Simple Scalable Streaming System)是一个开源的分布式流计算平台,它专为处理和分析大规模...
本文将深入探讨基于Java的Yahoo的分布式流计算平台S4,旨在为开发者提供一个全面的理解,以便更好地利用这个强大的工具。 S4(Simple Scalable Streaming System)是由Yahoo研发的一个开源分布式流计算平台,专门...
Java源码:Yahoo的分布式流计算平台S4是开源项目,旨在提供一个可扩展的、容错的实时计算系统。S4的核心理念是处理不断流入的数据流,这使得它非常适合大规模实时数据分析应用。在这个压缩包中,你将找到S4项目的源...
JAVA源码Yahoo的分布式流计算平台S4
描述中提到的"yahoo流式处理平台s4需要的一些jar包",意味着这些jar包可能与Yahoo对S4平台的定制或优化有关。Yahoo作为一个大型互联网公司,可能会在其内部基础设施中使用S4来处理其产生的海量数据,因此这些jar包...
java资源Yahoo的分布式流计算平台 S4提取方式是百度网盘分享地址
在研究过程中,作者不仅关注了不良URL的鉴定,还对爬虫技术、黑白名单技术以及基于特征识别的技术进行了深入的探讨,并结合了雅虎S4内部模型来提高系统的处理速度。 在系统设计与实现方面,本文详细描述了系统的...
S4(Simple Scalable Streaming System)是由雅虎实验室开发的一款通用的分布式流计算平台,其核心设计目标是提供一个可扩展、部分容错、可插拔的框架,使开发者能够轻松构建用于处理连续无界数据流的应用程序。...
Yahoo S4和Twitter Storm主要用于实时数据处理,而Dremel则是Google推出的一个用于交互式查询大数据的系统。Apache Spark则是一个用于大规模数据处理的快速、通用的计算引擎,支持多种数据处理模型,包括批处理、...
可以和Storm相提并论的系统有Esper、Streambase、HStreaming和Yahoo S4。其中和Storm最接近的就是S4。两者最大的区别在于Storm会保证消息得到处理。这些系统中有的拥有内建数据存储层,这是Storm所没有的,如果需要...
4. Yahoo S4:一个分布式流计算平台,用于处理大量连续数据流。它允许以高可扩展性和容错性的方式进行事件处理。 最后,本文档还讨论了如何利用Apache Storm进行大数据分析,包括分析的材料、方法和结果。在讨论中...
- **YahoonewsDaemon**、**YahoonewsWidget**、**YahoostockDaemon**、**YahoostockWidget**: 与雅虎新闻和股票信息相关的应用和服务。 ### 结论 以上列举的应用程序涵盖了三星S4预装的各种类型,包括天气、共享、...
S4(Simple Scalable Streaming System)作为分布式流式计算平台的一个实例,由Yahoo!发布,专注于为开发者提供一个易用的平台,以便开发出处理流式数据的应用程序。S4的设计和应用主要是为了解决搜索广告的展现问题...