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

Which is more scalable with Spark 1.6 (RPC): Netty or AKKA?

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

我认为AKKA本身依赖于netty,而Spark只使用了AKKA的一个子集。尽管如此,与 netty 相比,配置 AKKA 是否更利于可扩展性(就工作人员数量而言)?对这个特殊的火花配置有什么建议吗?

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

正如 link 所解释的那样,灵活性和消除对 Akka 的依赖是设计决策..

Question :

I think AKKA itself relies on netty and Spark uses only a subset of AKKA. Still, is configuring AKKA is better for scalability (in terms of number of workers) as compared to netty? any suggestion on this particular spark configuration?

是的 Spark 1.6 可以配置为使用 AKKA 或 Netty 进行 RPC。

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

see 1.6 code base

这里有更多见解,例如什么时候去做什么...


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

Akka 是一个 更高级别的框架 用于构建事件驱动、可扩展、错误-宽容的应用程序。它专注于消息处理的Actor class。 Actor有等级安排,父actor负责监督子actor。

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

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

So even though they are both asynchronous & message-oriented, with Akka you are thinking more abstractly in your problem domain, and with Netty you are more focused on the networking implementation.

结论:Netty 和 Akka 都具有同等的可扩展性。另请注意,Spark2 之后的默认设置是 Netty,我看不到 Akka 作为 spark.rpc 标志,我的意思是 val rpcEnvName = conf.get("spark.rpc", "netty") 不可用。在 Spark2.0 code see RpcEnv.scala.