Apache Spark Streaming 指南

目前还没有读者喜欢这篇文章。
One lightbulb lit out of several

Opensource.com

Apache Spark 是一个开源集群计算框架。与 Hadoop 基于磁盘的两阶段 MapReduce 范式相比,Spark 的内存原语在某些应用中可提供高达 100 倍的性能提升。

Spark Streaming 作为 Spark 0.7 的一部分发布,在 Spark 0.9 中脱离 alpha 阶段,并且从一开始就相当稳定。它可用于许多近乎实时的用例,例如监控网站上的用户流量和实时检测欺诈交易。

为什么需要 Spark Streaming?

有状态流处理系统是一种需要使用数据流更新其状态的系统。这种系统的延迟应该很低,即使节点发生故障,状态也不应丢失(例如,基于车辆 GPS 位置流计算车辆行驶的距离,或在数据流中计算单词“spark”的出现次数)。

像 Hadoop 这样的批处理系统具有高延迟,不适用于近乎实时的处理需求。Storm 保证处理未处理的记录,但这可能会导致不一致,因为一条记录可能会被处理两次。如果运行 Storm 的节点出现故障,则状态会丢失。在大多数环境中,Hadoop 和 Storm(或其他流处理系统)分别用于批处理和流处理。使用两种不同的编程模型会导致代码量增加、需要修复的错误数量增加、开发工作量增加、引入学习曲线以及引起其他问题。Spark Streaming 有助于解决这些问题,并提供可扩展、高效、弹性且 可集成 (与批处理)的系统。

在 Spark Streaming 中,弹性分布式数据集 (RDD) 的批次被传递到 Spark Streaming,后者使用 Spark Engine 处理这些批次,并返回已处理的批次流。已处理的流可以写入文件系统。批次大小可以低至 0.5 秒,从而实现不到 1 秒的端到端延迟。

Spark Streaming 以 Scala、Java 和 Python 提供 API。Python API 仅在 Spark 1.2 中引入,并且仍然缺少许多功能。Spark Streaming 允许有状态计算——根据数据流中的数据维护状态。它还允许窗口操作(即,允许开发人员指定一个时间范围,并对该时间窗口内流动的数据执行操作。窗口具有滑动间隔,即更新窗口的时间间隔。如果我定义一个 10 秒的时间窗口,滑动间隔为 2 秒。我将在过去 10 秒内流到数据流中的数据上执行计算,并且窗口将每 2 秒更新一次。

除了这些功能之外,Spark Streaming 的优势在于它能够与批处理相结合。可以使用普通的 Spark 编程创建 RDD,并将其与 Spark 流连接。此外,代码库相似,如果需要,可以轻松迁移——并且从 Spark 过渡几乎没有学习曲线。

在下面的示例中,wordCount 是一个 dStream;使用 dStream 的 transform 操作,可以将 dStream 连接到另一个 RDD spamInfoRDD。此 RDD 是作为 Spark 作业的一部分生成的。

val spamInfoRDD = ssc.sparkContext.newAPIHadoopRDD(…) // 包含垃圾邮件信息的 RDD val cleanedDStream = wordCounts.transform(rdd => { rdd.join(spamInfoRDD).filter(…) // 将数据流与垃圾邮件信息连接以进行数据清理… })

Spark Streaming 允许从 Kafka、Flume、HDFS 或原始 TCP 流中摄取数据,并且允许用户从 RDD 创建流。您可以提供您的 RDD,Spark 会将它们视为 RDD 流。它甚至允许您创建自己的接收器。Scala 和 Java API 可以从所有来源读取数据,而 Python API 只能从 TCP 网络读取数据。

容错能力是系统克服故障的能力。Spark Streaming 中的容错能力类似于 Spark 中的容错能力。与 RDD 分区一样,dStreams 数据在发生故障时会重新计算。原始输入在集群中跨内存复制。如果节点发生故障,可以使用血统 (lineage) 重新生成数据。系统可以在不到一秒的时间内从故障中恢复。

Spark Streaming 能够处理每节点每秒 100,000-500,000 条记录。这比 Storm 快得多,并且与其他流处理系统相当。在 Sigmoid,我们能够使用 Kafka 作为源,在每节点机器上每秒消耗 480,000 条记录。我们不断突破性能的极限,并尝试从相同的基础设施中获得最大收益。

Sigmoid 与一家领先的供应链分析公司合作,帮助他们使用 Spark Streaming 处理实时工厂车间数据。关键问题是在几秒钟的周转时间内,从各种来源消化批处理和流数据。他们有一个具有挑战性的要求,即确保系统在生产中使用时易于扩展、高可用性和低延迟。我们克服了这些挑战,实施了一个稳定且可维护的实时流系统。

Spark Streaming 是目前最好的流平台,并且可以实现亚秒级延迟。处理能力随集群大小线性扩展。包括 Netflix、Cisco、Datastax 等在内的许多组织都在生产中使用 Spark Streaming。

感谢 Matei Zaharia、Tathagata Das 和其他提交者在 Apache 许可证下开源 Spark。

请留下评论,让我们知道您对 Spark Streaming 的看法以及如何从中受益。

本文的早期版本最初发表在 SIGMOID 博客上。

标签
User profile image.
我在 Sigmoid 担任技术团队负责人。Sigmoid 提供了一个端到端框架,使用 Apache Spark 实时处理大量数据。它是 Apache PIG 社区的积极贡献者,通过其 PIG on Apache Spark 项目。他在使用 Apache Spark 的大数据系统方面拥有 2 年以上的经验。

评论已关闭。

Creative Commons License本作品根据 Creative Commons Attribution-Share Alike 4.0 International License 获得许可。
© . All rights reserved.