Spark 独立设置中的内存使用情况
Memory usage in Spark stand alone setup
我有一个 spark 设置,其中有一个 worker 有 6 个核心。现在我向工作人员广播一个对象 x。
我有三个问题 -
对于 map reduce 作业,将生成我的 obj x 的 6 个副本还是 x 的单个副本将由所有内核共享?
x 的生命周期是多少,即;它什么时候会被摧毁。我问是因为这个对象 x 占用了大量内存。
如果我从文件中读取该对象,是否有其他方法可以在所有 6 个内核之间共享该对象。
每个执行程序(java 进程)传输和存储广播数据一次,而不是每个核心一次。换句话说,如果您有一个节点,并且将 spark.executor.instances 设置为 2,并将 spark.executor.cores 设置为3 你最终会在节点上有两个 java 进程,每个进程都有你的数据副本。这是使用广播而不是仅仅使用闭包将数据传递到执行程序代码的好处之一。
至于生命周期,当驱动程序上的广播句柄不再有任何引用时,广播数据将被删除。这也意味着在使用该广播数据的任何任务 运行 之后。如果您查看 spark 日志,您会在发生这种情况时看到 "Broadcast removed" 行的消息。
我有一个 spark 设置,其中有一个 worker 有 6 个核心。现在我向工作人员广播一个对象 x。 我有三个问题 -
对于 map reduce 作业,将生成我的 obj x 的 6 个副本还是 x 的单个副本将由所有内核共享?
x 的生命周期是多少,即;它什么时候会被摧毁。我问是因为这个对象 x 占用了大量内存。
如果我从文件中读取该对象,是否有其他方法可以在所有 6 个内核之间共享该对象。
每个执行程序(java 进程)传输和存储广播数据一次,而不是每个核心一次。换句话说,如果您有一个节点,并且将 spark.executor.instances 设置为 2,并将 spark.executor.cores 设置为3 你最终会在节点上有两个 java 进程,每个进程都有你的数据副本。这是使用广播而不是仅仅使用闭包将数据传递到执行程序代码的好处之一。
至于生命周期,当驱动程序上的广播句柄不再有任何引用时,广播数据将被删除。这也意味着在使用该广播数据的任何任务 运行 之后。如果您查看 spark 日志,您会在发生这种情况时看到 "Broadcast removed" 行的消息。