【发布时间】:2015-05-19 06:30:53
【问题描述】:
能否请您告诉我 Apache Spark 和 AKKA 之间的区别,我知道这两个框架都旨在对分布式和并行计算进行编程,但我没有看到它们之间的联系或区别。
此外,我想获得适合每个人的用例。
【问题讨论】:
标签: apache-spark parallel-processing akka distributed-computing
能否请您告诉我 Apache Spark 和 AKKA 之间的区别,我知道这两个框架都旨在对分布式和并行计算进行编程,但我没有看到它们之间的联系或区别。
此外,我想获得适合每个人的用例。
【问题讨论】:
标签: apache-spark parallel-processing akka distributed-computing
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 的评论。
【讨论】:
Spark 用于数据处理,Akka 用于管理应用程序中的数据和指令流。
TL;DR
Spark 和 Akka 是两个不同的框架,具有不同的用途和用例。
在构建分布式或其他应用程序时,可能需要通过并行方法(例如使用线程)来调度和管理任务。想象一个有很多线程的巨大应用程序。那会有多复杂?
TypeSafe(现在称为 Lightbend)的 Akka 工具包允许您使用 Actor 系统(最初源自 Erlang),它为您提供了线程上的抽象层。 这些参与者能够通过将任何东西作为消息传递来相互通信,并且可以并行执行操作,而不会阻塞其他代码。
Akka 为您提供了在分布式环境中运行 Actors 的方法,从而为您提供了一流的服务。
另一方面,Apache Spark 是一个用于无法手动处理的海量数据集的数据处理框架。 Spark 利用了我们所说的 RDD(或弹性分布式数据集),它是分布式列表,类似于传统数据结构上的抽象层,因此可以在不同节点上并行执行操作。
Spark 使用 Akka 工具包在不同节点之间调度作业。
【讨论】:
Apache Spark:
Apache Spark™ 是用于大规模数据处理的快速通用引擎。
Spark 在内存中运行程序的速度比 Hadoop MapReduce 快 100 倍,或者在磁盘上快 10 倍。
Spark 为我们提供了一个全面、统一的框架来管理具有各种性质不同的数据集(文本数据、图形数据等)以及数据源的大数据处理需求(批量与实时流数据)。
与 Hadoop 生态系统和数据源(HDFS、Amazon S3、Hive、HBase、Cassandra 等)很好地集成
可以在由 Hadoop YARN 或 Apache Mesos 管理的集群上运行,也可以在 Standalone 模式下运行
在 Scala、Java 和 Python 中提供 API,并正在支持其他语言(例如 R)
除了 Map 和 Reduce 操作之外,它还支持 SQL 查询、流数据、机器学习和图形数据处理。
我们应该将 Spark 视为 Hadoop MapReduce 的替代品,而不是 Hadoop 的替代品。
Spark 的主要用例:
阿卡:来自Letitcrash
Akka 是一个事件驱动的中间件框架,用于在 Java 和 Scala 中构建高性能和可靠的分布式应用程序。 Akka 将业务逻辑与线程、锁和非阻塞 IO 等低级机制分离。使用 Akka,您可以轻松配置 Actor 的创建、销毁、调度和故障重启方式。
请查看这篇typesafe 文章,以更好地了解 Actor 框架。
Akka 提供基于主管层次结构的容错。每个 Actor 都可以创建其他 Actor,然后对其进行监督,从而决定是否应该恢复、重新启动、停用它们,或者是否应该升级问题。
看看Akka文章和SO questions
主要用例:
【讨论】:
在 Apache Spark、Akka 或 Kafka 之间的选择很大程度上取决于部署它们的用例(特别是要设计的服务的上下文和背景)。其中一些因素包括延迟、音量、第 3 方集成以及所需处理的性质(如批处理或流式传输等)。 我发现这个资源特别有帮助 - https://conferences.oreilly.com/strata/strata-ca-2016/public/schedule/detail/47251
【讨论】: