Apache Spark vs Akka [关闭]

Posted

技术标签:

【中文标题】Apache Spark vs Akka [关闭]【英文标题】:Apache Spark vs Akka [closed] 【发布时间】:2015-05-19 06:30:53 【问题描述】:

能否请您告诉我 Apache Spark 和 AKKA 之间的区别,我知道这两个框架都旨在对分布式和并行计算进行编程,但我没有看到它们之间的联系或区别。

此外,我想获得适合每个人的用例。

【问题讨论】:

【参考方案1】:

Apache Spark 实际上是基于 Akka 构建的。

Akka 是一个通用框架,用于在 Scala 或 Java 中创建反应式、分布式、并行和弹性并发应用程序。 Akka 使用 Actor 模型隐藏所有与线程相关的代码,并为您提供非常简单和有用的接口,以轻松实现可扩展和容错的系统。 Akka 的一个很好的例子是一个实时应用程序,它消费和处理来自手机的数据并将它们发送到某种存储。

Apache Spark(不是 Spark Streaming)是一个使用 map-reduce 算法的通用版本处理批处理数据的框架。 Apache Spark 的一个很好的例子是计算存储数据的一些指标,以更好地了解您的数据。数据会按需加载和处理。

Apache Spark Streaming 能够对近乎实时的小批量数据执行类似的操作和功能,就像数据已经存储时一样。

2016 年 4 月更新

从 Apache Spark 1.6.0 开始,Apache Spark 不再依赖 Akka 进行节点之间的通信。感谢@EugeneMi 的评论。

【讨论】:

反应式我的意思是您的应用程序将是事件驱动的,它将反应到事件。在 Akka 的情况下,这些事件是通过参与者之间的消息发送的。弹性是指您的应用程序将容忍故障,并且能够从故障中恢复。 Akka 追求“让它崩溃”的哲学。你可以在这里阅读更多:doc.akka.io/docs/akka/snapshot/scala/fault-tolerance.html akka 流呢?它是引发流媒体的竞争对手吗? 我相信从 Spark 1.6 开始,Spark 不再使用 Akka - Akka 被 Netty 取代。无论如何,Spark 仅将 Akka 用于节点之间的通信,而不是处理。 嗨@EugeneMi,你是对的。我会相应地更新答案。 我认为这是一个很好的答案,但可以扩展一点:所有这一切都与选择 Akka vs Spark 无关,实际上,一旦您了解了上述内容(回答)。相反,两者真的很擅长互补。使用 Akka,您可以获得一个全局无状态、动态 运算符集群。使用 Spark,您可以获得一个全局状态、静态 运算符图。因此,您围绕 Akka 构建您的反应式基础设施,然后使用 Spark 向其添加专门的处理组件(聚合器、提取器、机器学习......)。【参考方案2】:

Spark 用于数据处理,Akka 用于管理应用程序中的数据和指令流。

TL;DR

Spark 和 Akka 是两个不同的框架,具有不同的用途和用例。

在构建分布式或其他应用程序时,可能需要通过并行方法(例如使用线程)来调度和管理任务。想象一个有很多线程的巨大应用程序。那会有多复杂?

TypeSafe(现在称为 Lightbend)的 Akka 工具包允许您使用 Actor 系统(最初源自 Erlang),它为您提供了线程上的抽象层。 这些参与者能够通过将任何东西作为消息传递来相互通信,并且可以并行执行操作,而不会阻塞其他代码。

Akka 为您提供了在分布式环境中运行 Actors 的方法,从而为您提供了一流的服务。

另一方面,Apache Spark 是一个用于无法手动处理的海量数据集的数据处理框架。 Spark 利用了我们所说的 RDD(或弹性分布式数据集),它是分布式列表,类似于传统数据结构上的抽象层,因此可以在不同节点上并行执行操作。

Spark 使用 Akka 工具包在不同节点之间调度作业。

【讨论】:

Actor System 并非来自 Erlang。这是它背后的数学模型。 Erlang 是在 Ericson 使用 Actor Model 作为模型开发的。 Akka 想在 JVM 上做同样的事情。【参考方案3】:

Apache Spark:

Apache Spark™ 是用于大规模数据处理的快速通用引擎。

Spark 在内存中运行程序的速度比 Hadoop MapReduce 快 100 倍,或者在磁盘上快 10 倍。

Spark 为我们提供了一个全面、统一的框架来管理具有各种性质不同的数据集(文本数据、图形数据等)以及数据源的大数据处理需求(批量与实时流数据)。

    与 Hadoop 生态系统和数据源(HDFS、Amazon S3、Hive、HBase、Cassandra 等)很好地集成

    可以在由 Hadoop YARNApache Mesos 管理的集群上运行,也可以在 Standalone 模式下运行

    Scala、JavaPython 中提供 API,并正在支持其他语言(例如 R)

    除了 Map 和 Reduce 操作之外,它还支持 SQL 查询、流数据、机器学习和图形数据处理。

我们应该将 Spark 视为 Hadoop MapReduce 的替代品,而不是 Hadoop 的替代品。

请查看infoQ 和toptal 文章以获得更好的理解。

Spark 的主要用例:

    机器学习算法 交互式分析 流式传输数据

阿卡:来自Letitcrash

Akka 是一个事件驱动的中间件框架,用于在 Java 和 Scala 中构建高性能和可靠的分布式应用程序。 Akka 将业务逻辑与线程、锁和非阻塞 IO 等低级机制分离。使用 Akka,您可以轻松配置 Actor 的创建、销毁、调度和故障重启方式。

请查看这篇typesafe 文章,以更好地了解 Actor 框架。

Akka 提供基于主管层次结构的容错。每个 Actor 都可以创建其他 Actor,然后对其进行监督,从而决定是否应该恢复、重新启动、停用它们,或者是否应该升级问题。

看看Akka文章和SO questions

主要用例:

    事务处理 并发/并行 模拟 批处理 游戏和投注 复杂的事件流处理

【讨论】:

【参考方案4】:

在 Apache Spark、Akka 或 Kafka 之间的选择很大程度上取决于部署它们的用例(特别是要设计的服务的上下文和背景)。其中一些因素包括延迟、音量、第 3 方集成以及所需处理的性质(如批处理或流式传输等)。 我发现这个资源特别有帮助 - https://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/47251

【讨论】:

您还可以查看 Dean Wampler 提供的类似资源:youtube.com/watch?v=hCckk1Nj51Y 是的,读起来很棒。

以上是关于Apache Spark vs Akka [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

spark源码解析总结

spark源码解析总结

Apache Spark 转换:groupByKey vs reduceByKey vs aggregateByKey

大数据技术之_19_Spark学习_06_Spark 源码解析小结

快速 Hadoop 分析(Cloudera Impala vs Spark/Shark vs Apache Drill)

解决spark-shell输出日志信息过多