Apache Spark对阿卡

请告诉我Apache Spark和AKKA之间的区别,我知道这两个框架意味着编程分布和并行计算,但我没有看到它们之间的链接或差异。

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

Apache Spark实际上是build立在Akka上的。

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

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

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

更新2016年4月

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

Spark是用于处理Akka在应用程序中pipe理数据和指令stream的数据。

TL; DR

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

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

TypeSafe的Akka工具包允许您使用Actor系统(最初来自Erlang),它为您提供线程上的抽象层。 这些行为者能够通过将任何事情和一切传递给消息来相互沟通,并且不会阻塞其他代码。

Akka为您提供了在分布式环境中运行Actor的方法。

另一方面,Apache Spark则是一个无法手动处理的海量数据集的数据处理框架。 Spark利用我们所说的RDD(或弹性分布式数据集),它是像传统数据结构上的抽象层那样的分布式列表,以便可以在不同的节点上相互平行地执行操作。

Spark利用Akka工具包来调度不同节点之间的作业。

Apache Spark:

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

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

Spark为我们提供了一个全面的,统一的框架来pipe理大量的数据处理需求,包括各种不同的数据集(文本数据,graphics数据等)以及数据源(批量数据和实时stream数据) 。

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

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

  3. 提供Scala,JavaPython中的 API,支持其他语言(如R)

  4. 除了Map和Reduce操作之外,它还支持SQL查询,stream数据,机器学习和graphics数据处理。

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

看看infoQ和toptal文章更好的理解。

Spark的主要用例:

  1. 机器学习algorithm
  2. 交互式分析
  3. stream数据

阿卡:从Letitcrash

Akka是一个事件驱动的中间件框架,用于在Java和Scala中构build高性能和可靠的分布式应用程序。 Akka将业务逻辑与线程,锁和非阻塞IO等低级机制分离开来。 通过Akka,您可以轻松configuration参与者如何在失败时创build,销毁,计划和重新启动。

看看这个types安全的文章,以更好地了解Actor框架。

Akka提供基于监督员层次结构的容错function。 每个演员都可以创build其他演员,然后监督,决定是否应该恢复,重新启动,退休或者如果问题应该升级。

看看Akka的文章和SO问题

主要用例:

  1. 事务处理
  2. 并发/并行
  3. 模拟
  4. 批量处理
  5. 游戏和投注
  6. 复杂的事件stream处理