अपडेट :
2016-07-04
पिछले अपडेट के बाद से MongoDB स्पार्क कनेक्टर काफी परिपक्व हो गया है। यह अप-टू-डेट बायनेरिज़ और डेटा स्रोत आधारित API प्रदान करता है लेकिन यह SparkConf
. का उपयोग कर रहा है कॉन्फ़िगरेशन इसलिए यह Stratio/Spark-MongoDB की तुलना में विषयगत रूप से कम लचीला है।
2016-03-30
मूल उत्तर के बाद से मुझे स्पार्क से MongoDB से जुड़ने के दो अलग-अलग तरीके मिले:
- मोंगोडब/मोंगो-स्पार्क
- स्ट्रैटियो/स्पार्क-मोंगोडीबी
जबकि पहले वाला अपेक्षाकृत अपरिपक्व प्रतीत होता है, बाद वाला मोंगो-हडूप कनेक्टर की तुलना में बेहतर विकल्प की तरह दिखता है और स्पार्क एसक्यूएल एपीआई प्रदान करता है।
# Adjust Scala and package version according to your setup
# although officially 0.11 supports only Spark 1.5
# I haven't encountered any issues on 1.6.1
bin/pyspark --packages com.stratio.datasource:spark-mongodb_2.11:0.11.0
df = (sqlContext.read
.format("com.stratio.datasource.mongodb")
.options(host="mongo:27017", database="foo", collection="bar")
.load())
df.show()
## +---+----+--------------------+
## | x| y| _id|
## +---+----+--------------------+
## |1.0|-1.0|56fbe6f6e4120712c...|
## |0.0| 4.0|56fbe701e4120712c...|
## +---+----+--------------------+
यह mongo-hadoop-spark
. की तुलना में कहीं अधिक स्थिर प्रतीत होता है , स्थिर कॉन्फ़िगरेशन के बिना विधेय पुशडाउन का समर्थन करता है और बस काम करता है।
मूल उत्तर :
दरअसल, यहां काफी कुछ हिलने-डुलने वाले हिस्से हैं। मैंने एक साधारण डॉकर छवि बनाकर इसे थोड़ा और अधिक प्रबंधनीय बनाने की कोशिश की, जो मोटे तौर पर वर्णित कॉन्फ़िगरेशन से मेल खाती है (हालांकि मैंने संक्षिप्तता के लिए Hadoop पुस्तकालयों को छोड़ दिया है)। आप GitHub
. पर पूरा स्रोत पा सकते हैं (DOI 10.5281/zenodo.47882) और इसे शुरुआत से बनाएं:
git clone https://github.com/zero323/docker-mongo-spark.git
cd docker-mongo-spark
docker build -t zero323/mongo-spark .
या एक छवि डाउनलोड करें जिसे मैंने डॉकर हब पर धकेल दिया है ताकि आप बस docker pull zero323/mongo-spark
कर सकें ):
प्रारंभ छवियां:
docker run -d --name mongo mongo:2.6
docker run -i -t --link mongo:mongo zero323/mongo-spark /bin/bash
--jars
passing पास करने के लिए PySpark शेल प्रारंभ करें और --driver-class-path
:
pyspark --jars ${JARS} --driver-class-path ${SPARK_DRIVER_EXTRA_CLASSPATH}
और अंत में देखें कि यह कैसे काम करता है:
import pymongo
import pymongo_spark
mongo_url = 'mongodb://mongo:27017/'
client = pymongo.MongoClient(mongo_url)
client.foo.bar.insert_many([
{"x": 1.0, "y": -1.0}, {"x": 0.0, "y": 4.0}])
client.close()
pymongo_spark.activate()
rdd = (sc.mongoRDD('{0}foo.bar'.format(mongo_url))
.map(lambda doc: (doc.get('x'), doc.get('y'))))
rdd.collect()
## [(1.0, -1.0), (0.0, 4.0)]
कृपया ध्यान दें कि पहली क्रिया के बाद मोंगो-हडूप कनेक्शन बंद कर देता है। तो उदाहरण के लिए कॉल करना rdd.count()
संग्रह के बाद एक अपवाद फेंक देगा।
इस छवि को बनाने में मुझे जिन विभिन्न समस्याओं का सामना करना पड़ा है, उनके आधार पर मेरा मानना है कि गुजरना mongo-hadoop-1.5.0-SNAPSHOT.jar
और mongo-hadoop-spark-1.5.0-SNAPSHOT.jar
दोनों को --jars
और --driver-class-path
एकमात्र कठिन आवश्यकता है ।
नोट :
- यह छवि शिथिल रूप से jaceklaskowski/docker-spark पर आधारित है, इसलिए कृपया कुछ अच्छे कर्म @jacek-laskowski को भेजना सुनिश्चित करें यदि यह मदद करता है।
- यदि नए एपीआई सहित विकास संस्करण की आवश्यकता नहीं है तो
--packages
. का उपयोग करें संभवतः एक बेहतर विकल्प है।