Spark如何将任务分配给多个工作人员

时间:2018-03-08 10:49:12

标签: scala apache-spark

当我们写

RDD.map(x => x + 1)

这对应于master将发送给所有工作人员在其分区内执行的任务。

但我对这些魔法的细节很感兴趣。假设我们使用spark-submit提交包含所有这些函数的jar。一旦这个jar提交给master,主人如何理解并提取所有这些转换并将其发送给所有工人?它是否使用java的reflecton机制?

为了举例,您可以制作一个简单的map并使用例如akka来做同样的魔术吗?

1 个答案:

答案 0 :(得分:1)

组装的uber-JAR不是提交给主人,而是提交给spark-submit脚本。此脚本确保JAR可用于主节点和所有工作节点,并且所有类路径都已正确设置。只有这样才能启动应用程序并启动主节点。反射在这里没有用,因为所有需要的类(包括在.map(x => x + 1)中实现闭包的编译的匿名内部类)在JAR本身中都可用。当需要在map中应用闭包时,master可以使用普通序列化来将闭包所依赖的值发送给worker。然后,工作人员将从JAR加载闭包代码,用反序列化闭包中的必要参数补充它,然后将闭包应用于RDD。

你当然可以使用Akka使用map来实现rdd(这就是Spark所做的),但这并不完全是简单,至少不够简单以适应单个SO答案

交互式Spark repl与spark-submit脚本完全不同,因为它必须在应用程序运行时编译新代码。

相关问题