首页 > 解决方案 > 使用 Spark-MongoDB 连接器时连接池关闭

问题描述

当我尝试使用 Mmngo-spark 从 mongoDB 读取时,我遇到了错误connector_2.11:2.2.7

在初始化 spark 上下文 mongodb 接受连接之后,就在我尝试从中读取集合之后,我得到:

INFO MongoClientCache: Closing MongoClient: [localhost:27017]
INFO connection: Closed connection [connectionId{localValue:2, 
serverValue:17}] to localhost:27017 because the pool has been closed.

MongoDB 容器输出:

I NETWORK  [initandlisten] connection accepted from 172.18.0.1:65513 #6 
(2 connections now open)
I NETWORK  [initandlisten] connection accepted from 172.18.0.1:65515 #7 
(3 connections now open) I NETWORK  [conn7] end connection 
172.18.0.1:65515 (2 connections now open) I NETWORK  [conn6] end 
connection 172.18.0.1:65513 (1 connection now open)

所有组件 mongoDB、Spark master 和 worker 都是 Docker 中的容器(暴露了必要的端口,我可以使用 shell 连接到所有组件)。

所以我真的不知道出了什么问题

我有一个正在运行的 spark 集群,有一个 master 和一个 worker,所有节点都具有将 spark 连接到 mongoDB 的必要依赖项

 MongoDBsession = SparkSession \
        .builder \
        .appName("MongoDB Export to Hive") \
        .master("spark://localhost:7077") \
        .config("spark.mongodb.input.uri", "mongodb://localhost:27017/db_name.collection_name?readPreference=primaryPreferred") \
        .config("spark.mongodb.input.partitioner","MongoSamplePartitioner") \
        .config("spark.jars.packages", "org.mongodb.spark:mongo-spark-connector_2.11:2.2.7") \
        .getOrCreate()


    df_mongoDB_messageLogs = MongoDBsession.read \
        .format("mongo") \
        .option("database","db_name") \
        .option("collection","collection_name") \
        .load() 

更新:

仅当将 spark 应用程序提交到 spark-cluster (localhost:7077) 时才会发生这种情况。如果我使用 master=local 运行 spark-submit,则从 mongoDB 读取数据没有问题。有任何想法吗 ?

标签: pythonmongodbapache-sparkhadooppyspark

解决方案


好吧,最后它甚至不是mongodb或spark的错误。这只是码头工人的事情。我无法使用 localhost 访问 mongodb。


推荐阅读