摩拜单车项目02--MongoDB

MongoDB

Mongo简介

百度百科
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。

mongodb一个NoSql数据库,里面存储的是json(bson),支持集群,高可用,可扩展。
mongodb中的一些概念

MongoDBMySql
databasedatabase
collectiontable
json二维表
不支持sqlSQL
_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()
  }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值