更新 :
2016-07-04
前回の更新以降、MongoDBSparkConnectorはかなり成熟しました。最新のバイナリとデータソースベースのAPIを提供しますが、SparkConf
を使用しています。 構成なので、Stratio/Spark-MongoDBよりも主観的に柔軟性が低くなります。
2016-03-30
最初の回答以来、SparkからMongoDBに接続する2つの異なる方法を見つけました:
- mongodb / mongo-spark
- Stratio / Spark-MongoDB
前者は比較的未成熟のようですが、後者はMongo-Hadoopコネクタよりもはるかに優れた選択肢のように見え、SparkSQLAPIを提供します。
# 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
よりもはるかに安定しているようです 、静的構成なしで述語プッシュダウンをサポートし、単純に機能します。
元の答え :
確かに、ここにはかなりの数の可動部分があります。説明した構成にほぼ一致する単純なDockerイメージを構築することで、もう少し管理しやすくしようとしました(ただし、簡潔にするために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 Hubにプッシュしたイメージをダウンロードして、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
を渡して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)]
mongo-hadoopは、最初のアクションの後に接続を閉じているように見えることに注意してください。たとえば、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に適切なカルマを送信してください。
- 新しいAPIを含む開発バージョンが必要ない場合は、
--packages
を使用します おそらくより良い選択肢です。