在mongodb上使用Spark

spark构建在hadoop之上,提供了比mapreduce更多的操作,支持在流式数据上进行迭代计算。

因为spark构建在hadoop和hdfs上,所以它兼容任何hdfs数据源,mongo-hadoop connector连接hadoop和mongodb,运行hadoop对mongodb进行直接的读写。所以连接mongodb和spark理论上是可行的

然后怎么配置mongo-hadoop来连接spark.经过一些列的尝试。终于连接完成。
https://github.com/plaa/mongo-spark

不同版本的API
hadoop生态系统充满了不同的和各种不兼容的api版本,最主要的版本改变是hadoop 0.20:旧版的org.apache.hadoop.mapred变成新版的org.apache.hadoop.mapreduce。 同样mongodb-hadoop也有不通的包,spark相应的也有不通的方法hadoopRDD和newAPIHadoopRDD

使用mongo-hadoop
mongo-hadoop的配置参数是通过Configuration对象传递的。其中最重要的参数是mongo.input.uri和mongo.output.uri.
每个mongo的集合作为一个分开的RDD被SparkContext加载。
JavaPairRDD<Object, BSONObject> rdd = sc.newAPIHadoopRDD(config, MongoInputFormat.class, Object.class, BSONObject.class);

这里使用新的api。MongoInputFormt必须从com.mongodb.hadoop中导入。

返回的类型是RDD<Object,BSONObject>.第一个参数是一个ObjectId实例,就是mongodb文档的对象ID,第二个参数就是包含BSON文档。
保存一个RDD到mongodb使用了 saveAsNewAPIHadoopFile  方法。
rdd.saveAsNewAPIHadoopFile(" file:///bogus ", Object.class, Object.class, MongoOutputFormat.class, config);









来自为知笔记(Wiz)


你可能感兴趣的:(在mongodb上使用Spark)