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数据) 。
-
与Hadoop生态系统和数据源( HDFS,Amazon S3,Hive,HBase,Cassandra等)完美集成
-
可以在由Hadoop YARN或Apache Mesospipe理的群集上运行,也可以在独立模式下运行
-
提供Scala,Java和Python中的 API,支持其他语言(如R)
-
除了Map和Reduce操作之外,它还支持SQL查询,stream数据,机器学习和graphics数据处理。
我们应该将Spark视为Hadoop MapReduce的替代scheme,而不是Hadoop的替代品。
看看infoQ和toptal文章更好的理解。
Spark的主要用例:
- 机器学习algorithm
- 交互式分析
- stream数据
阿卡:从Letitcrash
Akka是一个事件驱动的中间件框架,用于在Java和Scala中构build高性能和可靠的分布式应用程序。 Akka将业务逻辑与线程,锁和非阻塞IO等低级机制分离开来。 通过Akka,您可以轻松configuration参与者如何在失败时创build,销毁,计划和重新启动。
看看这个types安全的文章,以更好地了解Actor框架。
Akka提供基于监督员层次结构的容错function。 每个演员都可以创build其他演员,然后监督,决定是否应该恢复,重新启动,退休或者如果问题应该升级。
看看Akka的文章和SO问题
主要用例:
- 事务处理
- 并发/并行
- 模拟
- 批量处理
- 游戏和投注
- 复杂的事件stream处理