我有一个火花设置,一个工人有6个核心。现在我向对象广播一个对象x。 我有三个问题 -
对于地图缩小作业,将生成6个我的对象x副本,还是所有核心共享x的单个副本?
x的生命周期是什么;什么时候会被摧毁我问,因为这个对象占用了大量的内存。
如果我从文件中读取该对象,是否有其他方法可以在所有6个核心之间共享对象。
答案 0 :(得分:1)
广播数据每个执行程序(java进程)传输和存储一次,而不是每个核心一次。换句话说,如果您有一个节点,并且将 spark.executor.instances 设置为2,并将 spark.executor.cores 设置为3,您将最终得到节点上的两个java进程,每个进程都有一个数据副本。这是使用广播而不是仅使用闭包将数据传递到执行程序代码中的好处之一。
对于生命周期,当驱动程序上的广播句柄不再有任何引用时,将删除广播数据。这也意味着在运行使用该广播数据的任何任务之后。如果您观看火花日志,当发生这种情况时,您将看到“广播已删除”的消息。