文章目录
MongoDB
Mongo简介
百度百科
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
mongodb一个NoSql数据库,里面存储的是json(bson),支持集群,高可用,可扩展。
mongodb中的一些概念
MongoDB | MySql |
---|---|
database | database |
collection | table |
json | 二维表 |
不支持sql | SQL |
_id | 主键 |
支持对所有建索引 | 支持对主键建索引 |
MongoDB数据库安装
安装
#创建一个普通用户xiaoniu
useradd xiaoniu
#为hadoop用户添加密码:
echo 123456 | passwd --stdin xiaoniu
#将bigdata添加到sudoers
echo “xiaoniu ALL = (root) NOPASSWD:ALL” | tee /etc/sudoers.d/xiaoniu
chmod 0440 /etc/sudoers.d/xiaoniu
#解决sudo: sorry, you must have a tty to run sudo问题,在/etc/sudoer注释掉 Default requiretty 一行
sudo sed -i ‘s/Defaults requiretty/Defaults:xiaoniu !requiretty/’ /etc/sudoers
#配置mongo的yum源
sudo vi /etc/yum.repos.d/mongodb-org-3.6.repo
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
#关闭selinux
vi /etc/sysconfig/selinux
SELINUX=disabled
#重新启动
reboot
#mongo的安装和基本使用
#在机器上使用xiaoniu用户登录(本地安装给你了rpm包,rpm -ivh *.rpm)
sudo yum install -y mongodb-org
#修改mongo的配置文件
sudo vi /etc/mongod.conf
#注释掉bindIp或者修改成当前机器的某一个ip地址
#启动mongo
sudo service mongod start
#连接到mongo
#如果注释掉了bindIp,那么连接时用
mongo
#指定了ip地址
mongo --host 192.168.145.201 --port 27017
相关操作
#查看数据库
show dbs;
#使用或创建database,直接使用数据库就行,如果没有自动创建。
use xiaoniu
#创建集合(表)
db.createCollection(“bike”)
#插入数据
db.bike.insert({"_id": 100001, “status”: 1, “desc”: “test”})
db.bike.insert({"_id": 100002, “status”: 1, “desc”: “test”})
#查找数据(所有)
db.bine.find()
#退出
exit
服务设置
#关闭mongo服务
sudu service mongod stop
#设置服务开机启动
sudo checkconfig mongod on
#设置mongo服务开机不启动
sudo chkconfig mongod off
mongo安全认证配置
#如果修改了mongo存储是的目录那么一定要修改该目录的所属用户和组为mongod
#修改mongo的配置文件/etc/mongod.conf
storage:
dbPath: /data/mongo
journal:
enabled: true
#chown -R mongod:mongod /data/mongo/
#添加管理员用户
#使用admin这个database
use admin
#在没有开启认证的情况下,创建一个超级用户
db.createUser(
{
user: “laozhao”,
pwd: “laozhao123”,
roles: [ {role: “root”, db: “admin” }]
}
)
#修改mongo的配置文件/etc/mongod.conf,配置mongo的安全认证
security:
authorization: enabled
#重启mongo服务
service mongod restart
#重新使用mongo shell连接
mongo
#使用admin database
use admin
#授权登录
db.auth(“laozhao”, “laozhao123”)
#创建一个bike数据库
use bike
#添加一个普通用户,具备读写权限
db.createUser(
{
user: “xiaoniu”,
pwd: “123456”,
roles: [“readWrite”]
}
)
基本操作
#使用小牛用户登录
mongo
use bike
db.auth(“xiaoniu”, “123456”)
#在database下创建collection
db.createCollection(“users”)
db.createCollection(“bikes”)
db.createCollection(“logs”)
show tables;
#插入数据
db.users.insert( { name: “laozhao”, age: 30 } )
db.users.insert({name:“laowang”, age: 20})
db.users.insert({name:“laoli”, age: 25})
#查找
db.users.find()
db.users.update({‘name’:‘laozhao’},{$set:{‘age’: 18}},{multi:true}) #查找到多个结果,多个结果都要更新
db.users.remove({‘name’: ‘laoduan’})
db.users.remove({‘name’: ‘laoduan’}, 1)
db.users.find({“name”:“laoduan”, “fv”: 99.99})
#查看当前db的索引
db.logs.getIndexes()
#创建索引
db.logs.ensureIndex({“name”:1})
#删除索引
db.logs.dropIndex({“name”:1})
JavaAPI
通过小程序添加单车,并显示全部单车
微信小程序中的相关数据
controller相关代码:
service相关代码
查看mongo数据库
记录日志到mongoDB
Spark处理mongoDB中的数据
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.initialize.bike</groupId>
<artifactId>spark2mongo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>spark2mongo</name>
<description>Demo project for Spring Boot</description>
<properties>
<spark.version>2.2.0</spark.version>
</properties>
<dependencies>
<!-- 导入spark的依赖 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!-- 导入spark-sql的依赖 -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>${spark.version}</version>
</dependency>
<!-- spark整合mongo的依赖 -->
<dependency>
<groupId>org.mongodb.spark</groupId>
<artifactId>mongo-spark-connector_2.11</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies>
</project>
package com.initialize.bike
import com.mongodb.spark.MongoSpark
import com.mongodb.spark.rdd.MongoRDD
import org.apache.spark.{SparkConf, SparkContext}
import org.bson.Document
/**
* company: www.abc.com
* Author: liuys
* Create Data: 2019/8/13
*/
object MongoSparkRDD {
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
.setAppName("MongoSparkRDD")
.setMaster("local[*]")
.set("spark.mongodb.input.uri", "mongodb://192.168.145.201:27017/bike.logs")
.set("spark.mongodb.output.uri", "mongodb://192.168.145.201:27017/bike.reslut")
//创建sparkcontext(RDD,SparkCore)
val sc = new SparkContext(conf)
val docsRDD: MongoRDD[Document] = MongoSpark.load(sc)
// val filtered: RDD[Document] = docsRDD.filter(doc => {
// val age = doc.get("age")
// if (age == null) {
// false
// } else {
// val ageDouble = age.asInstanceOf[Double]
// ageDouble >= 31
// }
// })
//先过滤,filteredRDD,缓存(cache)
val pv = docsRDD.count()
val uv = docsRDD.map(doc => {
doc.getString("openid")
}).distinct().count()
println("pv: " + pv + " uv: " + uv)
//val r = docsRDD.collect()
//println(r.toBuffer)
//val filtered = docsRDD.withPipeline(Seq(Document.parse("{ $match: { age : { $gt : 31 } } }")))
//println(filtered.collect().toBuffer)
//val documents = sc.parallelize((1 to 10).map(i => Document.parse(s"{age: $i}")))
//val r = filtered.collect()
//println(r.toBuffer)
//将计算好的结果保存到mongo中
//MongoSpark.save(filtered)
sc.stop()
// val spark = SparkSession.builder()
// .master("local")
// .appName("MongoSparkConnectorIntro")
// .config("spark.mongodb.input.uri", "mongodb://192.168.1.13:27200/niu.bi")
// //.config("spark.mongodb.output.uri", "mongodb://127.0.0.1/test.myCollection")
// .getOrCreate()
//
// val df: DataFrame = MongoSpark.load(spark)
//
// df.show()
}
}
package com.initialize.bike
import com.mongodb.spark.MongoSpark
import org.apache.spark.sql.{DataFrame, SparkSession}
/**
* company: www.abc.com
* Author: liuys
* Create Data: 2019/8/13
*/
object MongoSparkSQL {
def main(args: Array[String]): Unit = {
val session = SparkSession.builder()
.master("local")
.appName("MongoSparkConnectorIntro")
.config("spark.mongodb.input.uri", "mongodb://192.168.145.201:27017/bike.logs")
.config("spark.mongodb.output.uri", "mongodb://192.168.145.201:27017/bike.reslut")
.getOrCreate()
val df: DataFrame = MongoSpark.load(session)
df.createTempView("v_logs")
//val result:DataFrame = session.sql("SELECT age, name FROM v_student WHERE age >= 30 ORDER BY age DESC")
//val result = session.sql("SELECT age, name FROM v_student WHERE age is null")
//val pv = session.sql("select count(*) from v_logs")
val uv = session.sql("select count(*) pv, count(distinct openid) uv from v_logs")
//pv.show()
//uv.show()
MongoSpark.save(uv)
//MongoSpark
session.stop()
}
}