首先,我们明确的是访问Mongos和访问单机Mongod并没有什么区别。接下来的方法都是既可以访问mongod又可以访问Mongos的。

另外,读作java写作scala,反正大家都看得懂......大概?

1、不带认证集群的连接方法(JAVAscala):

  首先是创建连接的方法,我们先声明一个client,然后指定访问的DB和collection:

    private lazy val mongo = new MongoClient("192.168.2.51", 27017)
private lazy val db = mongo.getDatabase("test")
private lazy val dbColl = db.getCollection("origin2")

   然后我们读取数据:

import com.mongodb.client.model.Filters.{eq => eqq}
val docs = dbColl.find(eqq("basiclabel.procedure", "second")).iterator()

  额。。上面那段代码是带filter过滤的读取数据。首先Import com.mongodb.client.model.Filters.eq并把eq重命名为eqq,然后通过dbColl.find(Bson)方法读取指定数据。剩下的就是正常的迭代器的使用方法了,docs获取出来的数据是Iterator[Document]。

  然后我们更新数据:

dbColl.updateOne(eqq("_id", x.get("_id")), set("segdata", fenduan(str, name)))

  上面这段代码是说找到_id对应的数据,并将其中一个字段set为一个新的值,这个值可以为Document,String,Int,List等一系列数据结构。我这里fenduan方法返回的是一个Document,做了一层嵌套。

  至于插入数据更为简单: 

dbColl.insertOne(doc)

2、不带认证的spark读取方法(scala,理直气壮)

  两种方式,其一是在创建sparksession的时候(SparkContext可以使用第二种方法,醒醒兄弟,2017年了),直接指定"spark.mongodb.input.uri"。然后使用正常的MongoSpark来读取数据。(pipeline里面是过滤条件,愿意尝试的各位可以自己试试filter下的其他方法)。使用rdd是因为rdd更适合进行map和flatmap等一系列精细的转换操作,如果只需要读数据,可以使用MongoSpark.read(spark)方法,直接获取DataFrameReader。

val spark = SparkSession.builder()
.master("spark://192.168.2.51:7077")
.config(new SparkConf().setJars(Array("hdfs://192.168.2.51:9000/mongolib/mongo-spark-connector_2.11-2.0.0.jar",
"hdfs://192.168.2.51:9000/mongolib/bson-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/mongo-java-driver-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/mongodb-driver-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/mongodb-driver-core-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/commons-io-2.5.jar",
"hdfs://192.168.2.51:9000/segwithorigin2.jar")))
.config("spark.cores.max", 80)
.config("spark.executor.cores", 16)
.config("spark.executor.memory", "32g")
.config("spark.mongodb.input.uri", "mongodb://192.168.2.51:27017/test.origin2")
// .config("spark.mongodb.output.uri", "mongodb://192.168.12.161:27017/test.origin2")
.getOrCreate()
val rdd = MongoSpark.builder().sparkSession(spark).pipeline(Seq(`match`(eqq("basiclabel.procedure", "second")))).build.toRDD()

  第二种方式也较为简单,创建一个ReadConfig,这个是connector提供的一个单例类,可以设置很多参数,例如(此时不必指定"spark.mongodb.input.uri"),如下所示是通过sparkcontext和通过sparksession两种方式读取数据的方法:

      val readConfig = ReadConfig(Map(
"uri" -> "mongodb://192.168.2.48:27017/",
"database" -> "test",
"collection" -> "test"
))
    val r2 = MongoSpark.load(spark, readConfig).rdd
//    val r2 = MongoSpark.load(spark.sparkContext, readConfig)

3、带认证的Java读取方法:

  带认证的需要先创建一个MongoURI,在URI里把用户名,密码和认证库都指定清楚。这种方法通用性比较强,因为spark也这么用,如果使用其他方式认证要么是必须使用库等于认证库,要么是没有通用性。这种方法可以在admin认证然后去读test的数据,就很好。
//带认证的需要先创建一个MongoURI,在URI里把用户名,密码和认证库都指定清楚,至于为什么需要指定库建议看上一篇博客
val mongoURI = new MongoClientURI("mongodb://gaoze:gaolaoban@192.168.2.48:27017/?authSource=admin")
//val mongoURI = new MongoClientURI("mongodb://192.168.2.48:27017/");
lazy val mongo = new MongoClient(mongoURI)
private lazy val db = mongo.getDatabase("test")
private lazy val dbColl = db.getCollection("test")
//然后和1一样

4、带认证的Spark读取方法:

  同3一样,在URI里加入用户名密码和库就行了:

val spark = SparkSession.builder()
.master("spark://192.168.2.51:7077")
.config(new SparkConf().setJars(Array("hdfs://192.168.2.51:9000/mongolib/mongo-spark-connector_2.11-2.0.0.jar",
"hdfs://192.168.2.51:9000/mongolib/bson-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/mongo-java-driver-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/mongodb-driver-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/mongodb-driver-core-3.4.2.jar",
"hdfs://192.168.2.51:9000/mongolib/commons-io-2.5.jar",
"hdfs://192.168.2.51:9000/segwithorigin2.jar")))
.config("spark.cores.max", 80)
.config("spark.executor.cores", 16)
.config("spark.executor.memory", "32g")
//这里这个配置项指定了用户名gaoze,密码gaolaoban,认证库admin
.config("spark.mongodb.input.uri", "mongodb://gaoze:gaolaoban@192.168.2.51:27017/test.origin2?authSource=admin")
.getOrCreate()
val rdd = MongoSpark.builder().sparkSession(spark).pipeline(Seq(`match`(eqq("basiclabel.procedure", "second")))).build.toRDD()

或者:

//这里指定了用户名rw,密码1,认证库test
val readConfig = ReadConfig(Map(
"uri" -> "mongodb://rw:1@192.168.2.48:27017/?authSource=test",
"database" -> "test",
"collection" -> "test"
))

val rdd = MongoSpark.builder().sparkSession(spark).readConfig(readConfig).build().toRDD()
//val r2 = MongoSpark.load(spark.sparkContext, readConfig)

 

java及spark2.X连接mongodb3.X单机或集群的方法(带认证及不带认证)的更多相关文章

  1. 【运维技术】Zookeeper单机以及集群搭建教程

    Zookeeper单机以及集群搭建教程 单机搭建 单机安装以及启动 安装zookeeper的前提是必须有java环境 # 选择目录进行下载安装 cd /app # 下载zk,可以去官方网站下载,自己上 ...

  2. java架构之路(MQ专题)kafka集群配置和简单使用

    前面我们说了RabbitMQ和RocketMQ的安装和简单的使用,这次我们说一下Kafka的安装配置,后面我会用几个真实案例来说一下MQ的真实使用场景.天冷了,不愿意伸手,最近没怎么写博客了,还请见谅 ...

  3. Redis 5.0.7 讲解,单机、集群模式搭建

    Redis 5.0.7 讲解,单机.集群模式搭建 一.Redis 介绍 不管你是从事 Python.Java.Go.PHP.Ruby等等... Redis都应该是一个比较熟悉的中间件.而大部分经常写业 ...

  4. Zookeeper集群搭建(多节点,单机伪集群,Docker集群)

    Zookeeper介绍 原理简介 ZooKeeper是一个分布式的.开源的分布式应用程序协调服务.它公开了一组简单的原语,分布式应用程序可以在此基础上实现更高级别的同步.配置维护.组和命名服务.它的设 ...

  5. 备忘zookeeper(单机+伪集群+集群)

    #下载: #单机模式 解压到合适目录. 进入zookeeper目录下的conf子目录, 复制zoo_sample.cfg-->zoo.cfg(如果没有data和logs就新建):tickTime ...

  6. Greenplum源码编译安装(单机及集群模式)完全攻略

    公司有个项目需要安装greenplum数据库,让我这个gp小白很是受伤,在网上各种搜,结果找到的都是TMD坑货帖子,但是经过4日苦战,总算是把greenplum的安装弄了个明白,单机及集群模式都部署成 ...

  7. zookeeper安装和配置(单机+伪集群+集群)

    #单机模式 解压到合适目录. 进入zookeeper目录下的conf子目录, 复制zoo_sample.cfg-->zoo.cfg(如果没有data和logs就新建):tickTime=2000 ...

  8. redis在Windows下以后台服务一键搭建集群(单机--伪集群)

    redis在Windows下以后台服务一键搭建集群(单机--伪集群) 一.概述 此教程介绍如何在windows系统中同一台机器上布置redis伪集群,同时要以后台服务的模式运行.布置以脚本的形式,一键 ...

  9. Spark Tachyon编译部署(含单机和集群模式安装)

    Tachyon编译部署 编译Tachyon 单机部署Tachyon 集群模式部署Tachyon 1.Tachyon编译部署 Tachyon目前的最新发布版为0.7.1,其官方网址为http://tac ...

随机推荐

  1. python小练--使用正则表达式将json解析成dict

    练习python语法,自己实现了一个简单的解析json字符,存为dict字典对象. { "id":12, "name":"jack", &q ...

  2. (1.9)SQL优化——mysql导入导出优化

    (1.9)SQL优化——mysql导入导出优化 1.大批量插入数据 [1.1]MyISAM: (1)如果存在表且有数据,插入前先关闭所有非唯一索引. (2)如果表是空的,默认就是先导入数据再创建索引, ...

  3. 帝国cms调用相关文章若没有则调取最新文章

    前面我们说了帝国cms调用最新文章 利用文字调用标签phomenews,现在我们说下相关文章的调用,如果文章有设置关键词的话可以直接用[!--other.link--]进行调取,现在我们来升级一下,如 ...

  4. 中文全文检索讯搜xunsearch安装

    Xunsearch (迅搜)是一套免费开源的专业中文全文检索解决方案,简单易用而且 功能强大.性能卓越能轻松处理海量数据的全文检索.它包含后端索引.搜索服务程序和前端 脚本语言编写的开发工具包(称之为 ...

  5. redis.conf密码设置的问题

    requirepass是终端客户端登录需要的密码,配置在服务端 masterauth是从服务器端登录master端需要的密码,配置在从服务端

  6. vue中$set的用法

    数组: this.$set(Array,index, newValue) 对象: this.$set(Object, key, value)

  7. Echart绘制趋势图和柱状图总结

    1.legend名字与series名字一样,即可联动,且不可手动去掉联动效果 2.通过legend图例联动,隐藏绘制图线后,对应( yAxisIndex: 1)坐标y轴如果没有同时设置min和max的 ...

  8. js分页器插件

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  9. Linux和windows 查看程序、进程的依赖库的方法

    Linux: 1. 利用ldd查看可执行程序的依赖库   [root@~]# ldd /usr/local/php/bin/php   linux-vdso.so.1 => (0x00007ff ...

  10. python gui messagebox

    类似于win32的MessageBox框 //test.py from Tkinter import * from tkMessageBox import * root = Tk() li = ['C ...