Spark 1.6(RPC):Netty或Akka更可扩展



Spark 1.6可以配置为使用Akka或Netty作为RPC。如果Netty配置了,这是否意味着Spark Runtime不会使用Actor模型进行消息传递(例如,在工人和驱动程序的BlockManagers之间),甚至在Netty配置的情况下,都可以通过依赖Netty来使用自定义的简化Actor模型。

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

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

通过链接灵活性和消除对Akka的依赖是设计决定。

问题:

我认为akka本身依赖于Netty,Spark只使用了一个子集 akka。尽管如此,配置AKKA还是更适合可伸缩性(用 与Netty相比,工人数量)?对此提出任何建议 特别的火花配置?

是的Spark 1.6可以配置为使用Akka或Netty作为RPC。

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

请参阅1.6代码库

这里有更多的见解,就像什么时候去做什么...


akka和netty都交易异步处理和消息处理,但它们在不同级别工作w.r.t scabablity。

akka 更高级别的框架用于构建事件驱动,可扩展,容忍失误的应用程序。它专注于用于消息处理的演员类。演员有分层安排,家长演员负责对其儿童演员的监督。

netty 也可以围绕消息工作,但是它是少于较低级别的,并且与网络有关。它具有NIO的核心。Netty具有许多用于使用HTTP,FTP,SSL等各种协议的功能。此外,您对线程模型具有更细粒度的控制。

Netty实际上是在Akka W.R.T.中使用的。分布式演员。

因此,即使它们都是异步&以消息为导向的 akka,您在问题域中更抽象地思考 Netty您更专注于网络实现。

结论:Netty和Akka都同样可扩展。请注意,Spark2 Onwards默认值是Netty,我看不到Akka,因为那里的spark.rpc标志,我的意思是val rpcEnvName = conf.get("spark.rpc", "netty")不可用。在Spark2.0代码中,请参见rpcenv.scala。

最新更新