【发布时间】:2016-05-01 19:48:50
【问题描述】:
我是 Spark 的新手。
我想使用 Spark 和 map-reduce 方法并行化我的计算。 但是,我将这个计算放入 Map 阶段的 PairFunction 实现中,需要初始化一些上下文。此上下文包括来自 3rd 方 jar 的多个单例对象,并且此对象不可序列化,因此我无法将它们分布在工作节点上,也无法在我的 PairFunction 中使用它们。
所以我的问题是:我可以使用 Apache Spark 以某种方式并行化需要不可序列化上下文的作业吗?还有其他解决方案吗?也许我可以告诉 Spark 在每个工作节点上初始化所需的上下文?
【问题讨论】:
-
你的问题对我来说有点模棱两可。我将尝试根据我对它的理解来回答。 Spark 有两个主要的执行环境: 代码将以正常(非分布式)方式运行的驱动程序。您可以在此处初始化上下文并打开 spark 上下文。分布式代码将在worker上执行。
-
我的问题是关于应该在工人身上执行的分布式代码。问题是这段代码必须使用不可序列化的第三方对象。所以我不能在主服务器上实例化它们一次,然后通过网络传递给工作人员。我想知道是否有任何解决方法。
-
如果您的代码将被发送给工作人员,则应该对其进行序列化。没有变通办法。如果您在工作人员中不需要这些对象,您可以将它们声明为瞬态。
标签: java serialization apache-spark mapreduce