2016-08-30 2 views
0

In der link wurde vorgeschlagen, einen Verbindungspool zu erstellen, der im Spark-Streaming-Auftrag über mehrere rdds hinweg verfügbar ist.Erstellen eines globalen Verbindungsobjekts über einen Executor in Spark, wenn Daten an mongodb übergeben werden

rdd.foreachpartition(iter => { 
val client = MongoClient(host,port) 
val col = client.getDataBase("testDataBase").getCollection("testCollection") 

// Ich bin Einfügen bascically Daten in dem Iterator auf das Testcollection

})

aber ich nicht in der Lage war, um herauszufinden, wie eine Verbindung Pool zu erstellen, die eine Verbindung Objekt zurückgibt zu eine Mongodb-Sammlung. Ich war in der Lage, foreachpartition zu verwenden, um eine einzelne Verbindung für die gesamte Partition zu erstellen. Kann mir jemand bitte sagen, wie man ein Verbindungsobjekt erstellt, das über den Executor zur Wiederverwendung verfügbar ist.

+0

Hallo @YuvalItzchakov Hier ist was ich getan habe. Ich habe ein Client-Objekt in foreachpartition erstellt, mit dem ich Daten nach mongodb gepusht habe. Kannst du bitte klarstellen, was ich genau posten soll? – Rishi

+0

Ich möchte sehen, welchen Code Sie für einen Objektpool getan haben. –

+0

Hallo @ YuvalItzchakov. Ich habe den Code gepostet, den ich benutze. Ich konnte nicht herausfinden, wie man einen Verbindungspool erstellt, der über mehrere Partitionen hinweg verfügbar ist. – Rishi

Antwort

0

Die MongoDB Spark Connector intern verwendet broadcast variables dies zu erreichen:

Broadcast-Variablen kann der Programmierer auf jeder Maschine eher eine schreibgeschützte Variable gecached halten, als eine Kopie davon mit Aufgaben versenden.

Sie sollten in der Lage sein, den MongoClient und den Verbindungspool über Aufgaben hinweg zu teilen.

Verwandte Themen