Apache Spark 与 Like

Apache Spark vs Akka

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

此外,我想得到适合他们每个人的用例。

A​​pache Spark 实际上是建立在 Akka 之上的。

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

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

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

2016 年 4 月更新

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

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

TL;DR

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

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

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

Akka 为您提供在分布式环境中 运行 Actor 的方法,让您如虎添翼。

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

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

Apache Spark:

Apache Spark™ is a fast and general engine for large-scale data processing.

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

Spark 为我们提供了一个全面、统一的框架来管理大数据处理需求,包括各种性质各异的数据集(文本数据、图形数据等)作为数据源(批处理与实时流数据)。

  1. 与 Hadoop 生态系统和数据源(HDFS、Amazon S3、Hive、HBase、Cassandra 等)完美集成

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

  3. Scala、JavaPython 中提供 API,并提供支持对于其他语言(例如 R)正在开发中

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

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

查看 infoQ and toptal 篇文章以便更好地理解。

Spark 的主要用例:

  1. 机器学习算法
  2. 交互式分析
  3. 流式数据

阿卡: 来自 Letitcrash

Akka is an event-driven middleware framework, for building high performance and reliable distributed applications in Java and Scala. Akka decouples business logic from low-level mechanisms such as threads, locks and non-blocking IO. With Akka, you can easily configure how actors will be created, destroyed, scheduled, and restarted upon failure.

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

Akka provides fault-tolerance based on supervisor hierarchies. Every Actor can create other Actors, which it will then supervise, making decisions if they should be resumed, restarted, retired or if the problem should be escalated.

看看Akka article & SO questions

主要用例:

  1. 事务处理
  2. Concurrency/parallelism
  3. 模拟
  4. 批处理
  5. 游戏和博彩
  6. 复杂事件流处理

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