使用 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?的主要内容,如果未能解决你的问题,请参考以下文章