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

Posted

技术标签:

【中文标题】使用 Spark 1.6 (RPC) 哪个更具可扩展性:Netty 还是 AKKA?【英文标题】:Which is more scalable with Spark 1.6 (RPC): Netty or AKKA? 【发布时间】:2016-12-25 14:58:49 【问题描述】:

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

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

【问题讨论】:

【参考方案1】:

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

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

问题:

我认为 AKKA 本身依赖于 netty 而 Spark 只使用了 阿卡。尽管如此,配置 AKKA 是否更适合可扩展性(在 工人数量)与净值相比?对此有任何建议 特定的火花配置?

是的,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 类。 Actor 有等级安排,父 Actor 负责监督其子 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。

【讨论】:

以上是关于使用 Spark 1.6 (RPC) 哪个更具可扩展性:Netty 还是 AKKA?的主要内容,如果未能解决你的问题,请参考以下文章

Spark RPC

是啥让 Node.js 比 Apache 更具可扩展性?

网络上的可扩展性

是否有比此查询更具可扩展性的子选择替代方案?

分片技术(Sharding):如何使区块链更具可扩展性?

在 for 循环中哪个更 Pythonic:压缩还是枚举?