使用Spark 1.6(RPC)哪个更具可扩展性:Netty还是AKKA?

时间:2016-12-25 14:58:49

标签: apache-spark akka netty rpc

Spark 1.6可以配置为使用AKKA或Netty for RPC。如果配置了Netty,这是否意味着Spark运行时不使用actor模型进行消息传递(例如,在worker和驱动程序块管理器之间),或者甚至在netty配置的情况下,依赖于Netty使用自定义简化actor模型。

我认为AKKA本身依赖于netty而Spark只使用了AKKA的一部分。但是,与netty相比,配置AKKA对于可扩展性(就工人数而言)更好吗?有关这种特殊火花配置的任何建议吗?

1 个答案:

答案 0 :(得分:4)

添加到@ user6910411s指针,该指针很好地解释了设计决策。

link解释灵活性和消除对Akka的依赖是设计决策..

  

问题:

     

我认为AKKA本身依赖于netty而Spark只使用了一部分   AKKA。仍然,配置AKKA对于可扩展性更好(就其而言   工人数量与净额相比?对此有任何建议   特别是火花配置?

是可以将Spark 1.6配置为使用AKKA或Netty for RPC。

可以通过spark.rpc进行配置,即val rpcEnvName = conf.get("spark.rpc", "netty"),即默认值:netty。

see 1.6 code base

这里有更多的见解,比如何去寻找......

Akka和Netty都处理异步处理和消息处理,但它们在W.R.T scalablity的不同级别工作。

Akka 更高级别框架 ,用于构建事件驱动,可伸缩,容错的应用程序。它侧重于用于消息处理的Actor类。演员有等级安排,父母演员负责监督他们的儿童演员。

Netty 也适用于消息,但它是稍低级别,并且更多地处理网络问题。它的核心是NIO。 Netty具有许多使用各种协议(如HTTP,FTP,SSL等)的功能。此外,您还可以对线程模型进行更细粒度的控制。

Netty实际上是在Akka w.r.t中使用的。分布式演员。

  

所以尽管它们都是异步的和面向消息,有   Akka你在你的问题领域中更抽象地思考,并且   Netty你更关注网络实施。

结论:Netty和Akka都具有同等的可扩展性。请注意,Spark2以上默认为Netty我不能将Akka视为spark.rpc标志,我的意思是val rpcEnvName = conf.get("spark.rpc", "netty")不可用。在Spark2.0 code see RpcEnv.scala