Spark 1.6 (RPC) 的可扩展性更好:Netty 或 AKKA?

Maz*_*ine 5 rpc akka netty apache-spark

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

我认为 AKKA 本身依赖于 netty,而 Spark 仅使用 AKKA 的一个子集。不过,与 Netty 相比,配置 AKKA 是否更具有可扩展性(就工作人员数量而言)?对这个特定的火花配置有什么建议吗?

Ram*_*ram 4

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

正如链接所解释的,灵活性和消除对 Akka 的依赖是设计决策。

问题 :

我认为 AKKA 本身依赖于 netty,而 Spark 仅使用 AKKA 的一个子集。不过,与 Netty 相比,配置 AKKA 是否更具有可扩展性(就工作人员数量而言)?对这个特定的火花配置有什么建议吗?

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

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

参见1.6代码库

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


Akka 和 Netty 都处理异步处理和消息处理,但它们在不同级别的 WRT 可扩展性上工作。

Akka是一个更高级别的框架,用于构建事件驱动、可扩展、容错的应用程序。它重点关注用于消息处理的 Actor 类。Actor 具有层级结构,父 Actor 负责监督其子 Actor。

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

Netty 实际上是在 Akka wrt 分布式 Actor 中使用的。

因此,尽管它们都是异步且面向消息的,但使用 Akka,您可以在问题域中进行更抽象的思考,而使用 Netty,您可以更专注于网络实现。

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