如何使用执行程序运行的长期昂贵的实例化实用程序服务?

时间:2015-11-19 15:22:01

标签: apache-spark

我的Spark处理逻辑依赖于长期,昂贵的实例化实用程序对象来执行数据持久性操作。这些对象不仅可能不是Serializable,而且在任何情况下分配它们的状态可能都是不切实际的,因为所述状态可能包括有状态的网络连接。

我想要做的是在每个执行程序中将这些对象本地实例化,或者在每个执行程序生成的线程中本地实例化。 (任何替代方案都是可以接受的,只要实例化不会发生在RDD中的每个元组上。)

有没有办法编写我的Spark驱动程序,以便它指示执行程序调用一个函数来本地实例化一个对象(并将其缓存在执行程序的本地JVM内存空间中),而不是在其中实例化它。然后驱动程序尝试序列化并将其分发给执行程序?

1 个答案:

答案 0 :(得分:1)

可以在分区级别共享对象:

我试过这个:How to make Apache Spark mapPartition work correctly?

使numPartitions的重新分区与执行者数量的倍数相匹配。