Spark - 如何为每个执行程序上下文创建不同的变量?

时间:2016-11-16 13:51:39

标签: java mongodb apache-spark

我的Spark应用程序启动了几个执行程序。 我有几个分区可以遍布我的执行程序。

在这些分区上使用map()时,我想使用MongoDB连接(MongoDB Java Driver)并从那里查询更多数据,处理这些数据并将其作为map()函数的输出返回。

我想为每个执行者创建一个连接。 然后,每个分区都应该访问此executor-local变量并使用它来查询数据。

为每个分区建立连接可能不是一个好主意。广播连接无法正常工作,因为它不可序列化(我认为?)。

总结一下:

  • 如何为每个执行器上下文创建不同的变量?

1 个答案:

答案 0 :(得分:1)

您应该使用MongoConnector

它将处理创建集合并由缓存支持,该缓存可有效地处理任何MongoClients的关闭。它是可序列化的,因此它可以是广播,它可以采用选项,readConfig或Spark上下文来配置连接的位置。

MongoConnector使用贷款模式处理与MongoDB的基础连接的引用管理,并允许MongoClientMongoDatabaseMongoCollection级别的访问。