DataX和MongoDB之间的数据导入导出案例

2023-05-16

DataX和MongoDB之间的数据导入导出案例


文章目录

  • DataX和MongoDB之间的数据导入导出案例
    • 0. 写在前面
    • 1. MongoDB前置知识
      • 1.1 基础概念详解
        • 1.1.1 数据库
        • 1.1.2 集合
        • 1.1.3 文档(Document)
    • 2. DataX 导入导出案例
      • 2.1 读取 MongoDB 的数据导入到 HDFS
        • 2.1.1 编写配置文件
        • 2.1.2 执行
        • 2.1.3 查看结果
      • 2.2 读取 MongoDB 的数据导入 MySQL
        • 2.2.1 在 MySQL 中创建表
        • 2.2.2 编写DataX 配置文件
        • 2.2.3 执行
        • 2.2.4 查看结果


0. 写在前面

  • 版本信息说明:

MySQL数据库和DataX安装在一台机器node01上,而MongoDB是安装在node02这一台机器上

DataX版本:DataX3.0(开源版)

MongoDB版本:MongoDB-5.0.2(Linux环境下安装)

Linux版本:CentOS7.5

1. MongoDB前置知识

1.1 基础概念详解

1.1.1 数据库

一个 mongodb 中可以建立多个数据库。MongoDB 的默认数据库为"db",该数据库存储在 data 目录中。MongoDB 的单个实例可以容纳多个独立的数据库,每一个都有自己的集合和权限,不同的数据库也放置在不同的文件中。

常见操作如下

1)显示所有数据库

> show dbs     
admin   0.000GB 
config  0.000GB 
local   0.000GB 

解析如下:

  • admin:从权限的角度来看,这是"root"数据库。要是将一个用户添加到这个数据库,这个用户自动继承所有数据库的权限。一些特定的服务器端命令也只能从这个数据库运行,比如列出所有的数据库或者关闭服务器。

  • local:这个数据永远不会被复制,可以用来存储限于本地单台服务器的任意集合

  • config:当 Mongo 用于分片设置时,config 数据库在内部使用,用于保存分片的相关信息。

2)显示当前使用的数据库

 > db 
 test     

3)切换数据库

> use local 
switched to    db local    
> db 
local   

1.1.2 集合

集合就是 MongoDB 文档组,类似于 MySQL 中的 table。

集合存在于数据库中,集合没有固定的结构,这意味着你在对集合可以插入不同格式和类型的数据,但通常情况下我们插入集合的数据都会有一定的关联性。

MongoDB 中使用 createCollection() 方法来创建集合。下面我们来看看如何创建集合:

语法格式:

db.createCollection(name, options)                                        

参数说明:

  • name: 要创建的集合名称

  • options: 可选参数, 指定有关内存大小及索引的选项,有以下参数:

字段类型描述
capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。 当该值为 true 时,必须指定 size 参数。
autoIndexId布尔(可选)如为 true,自动在 _id 字段创建索引。默认为 false。
size数值(可选)为固定集合指定一个最大值(以字节计)。 如果 cappedtrue,也需要指定该字段。
max数值(可选)指定固定集合中包含文档的最大数量。

案例 1:在 test 库中创建一个 whybigdata 的集合

> use test switched to db test
> db.createCollection("whybigdata")
{ "ok" : 1 }
> show collections 
Whybigdata

// 插入数据
> db.whybigdata.insert({"name":"whybigdata","url":"www.whybigdata.com"}) WriteResult({ "nInserted" : 1 })
// 查看数据
> db.whybigdata.find()
{ "_id" : ObjectId("5d0314ceecb77ee2fb2d7566"), "name" : "whybigdata", "url" : "www.whybigdata.com" }

解析说明:

ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes(默认),由 24 个 16 进制数字组成的字符串(每个字节可以存储两个 16 进制数字),含义是:

  • 前 4 个字节表示创建 unix 时间戳

  • 接下来的 3 个字节是机器标识码

  • 紧接的两个字节由进程 id 组成 PID

  • 最后三个字节是随机数

案例 2:创建一个固定集合 mycol

> db.createCollection("mycol",{ capped : true,autoIndexId : true,size : 6142800, max : 1000})
> show tables; 
whybigdata
mycol

案例 3:自动创建集合

在 MongoDB 中,你不需要创建集合。当你插入一些文档时,MongoDB 会自动创建集合。

> db.mycol2.insert({"name":"whybigdata"}) WriteResult({ "nInserted" : 1 })
> show collections 
whybigdata
mycol 
mycol2

案例 4:删除集合

> db.mycol2.drop() 
True    
> show tables; 
whybigdata    
mycol    

1.1.3 文档(Document)

文档是一组键值(key-value)对组成。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。

一个简单的例子:

{"name":"whybigdata"}

注意:

  • 文档中的键/值对是有序的。

  • MongoDB 区分类型和大小写。

  • MongoDB 的文档不能有重复的键。

  • 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8 字符。

2. DataX 导入导出案例

2.1 读取 MongoDB 的数据导入到 HDFS

2.1.1 编写配置文件

[whybigdata@node01 datax]$ vim job/mongdb2hdfs.json
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mongodbreader",
                    "parameter": {
                        "address": ["node02:27017"],
                        "collectionName": "whybigdata",
                        "column": [
							{
								"name":"name",
								"type":"string"
							},
							{
								"name":"url",
								"type":"string"
							}
						],
                        "dbName": "test",
                    }
                },
                "writer": {
                    "name": "hdfswriter",
                    "parameter": {
                        "column": [
							{
								"name":"name",
								"type":"string"
							},
							{
								"name":"url",
								"type":"string"
							}
						],
                        "defaultFS": "hdfs://node01:8020",
                        "fieldDelimiter": "\t",
                        "fileName": "mongo.txt",
                        "fileType": "text",
                        "path": "/datax-out",
                        "writeMode": "append"
                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}

mongodbreader 参数解析

  • address: MongoDB 的数据地址信息,因为 MonogDB 可能是个集群,则 ip 端口信息需要以 Json 数组的形式给出。【必填】

  • userName:MongoDB 的用户名。【选填】

  • userPassword: MongoDB 的密码。【选填】

  • collectionName: MonogoDB 的集合名。【必填】

  • column:MongoDB 的文档列名。【必填】

  • name:Column 的名字。【必填】

  • type:Column 的类型。【选填】

  • splitter:因为 MongoDB 支持数组类型,但是 Datax 框架本身不支持数组类型,所以mongoDB 读出来的数组类型要通过这个分隔符合并成字符串。【选填】

2.1.2 执行

[whybigdata@node01 datax]$ bin/datax.py job/mongdb2hdfs.json

2.1.3 查看结果

在这里插入图片描述

2.2 读取 MongoDB 的数据导入 MySQL

2.2.1 在 MySQL 中创建表

mysql> create table whybigdata(name varchar(20),url varchar(20));

2.2.2 编写DataX 配置文件

[whybigdata@node01 datax]$ vim job/mongodb2mysql.json
{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mongodbreader",
                    "parameter": {
                        "address": ["node02:27017"],
                        "collectionName": "whybigdata",
                        "column": [
							{
								"name":"name",
								"type":"string"
							},
							{
								"name":"url",
								"type":"string"
							}
						],
                        "dbName": "test",
                    }
                },
                "writer": {
                    "name": "mysqlwriter",
                    "parameter": {
                        "column": ["*"],
                        "connection": [
                            {
                                "jdbcUrl": "jdbc:mysql://node01:3306/datax",
                                "table": ["mongo"]
                            }
                        ],
                        "password": "123456",
                        "username": "root",
                        "writeMode": "insert"
                    }            
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": "1"
            }
        }
    }
}

2.2.3 执行

[whybigdata@node01 datax]$ bin/datax.py job/mongodb2mysql.json   

2.2.4 查看结果

mysql> select * from whybigdata;
+	+	+
| name	| url	|
+	+	+
| whybigdata | www.whybigdata.com |
+	+	+

全文结束!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

DataX和MongoDB之间的数据导入导出案例 的相关文章

  • FieldPath 字段名称不能包含“.”当尝试使用 AGGREGATE 时

    我的查询有什么问题吗 db table aggregate match gt expr gt and gt eq gt size gt events 4 events 0 updated gt lt gt 2019 05 05 我越来越 M
  • MongoDB BSON 文档中的键顺序重要吗?

    我知道某些推荐需要对 hashmap 字典进行排序 但是 MongoDB 中的实际 BSON 文档重要吗 索引是否仍然有效 E g db people ensureIndex LName 1 FName 1 它对两者都有效吗 LName a
  • 从数组中查找前 N 个条目

    我的收藏结构如下 id 1 Trips EndID 5 Tripcount 12 EndID 6 Tripcount 19 id 2 Trips EndID 4 Tripcount 12 EndID 5 Tripcount 1
  • PowerShell 与 MongoDB C# 驱动程序方法不兼容?

    由 C 泛型引起的最新 MongoDB 驱动程序的问题 Cannot find an overload for GetCollection and the argument count 1 我可能可以使用其他没有泛型的 GetCollect
  • 如何使用 MongoDB 实现 ASP.NET Core 3.1 Identity?

    是一个 API 用于简化后端和逻辑代码来管理用户 密码 个人资料数据 角色 声明 令牌 电子邮件确认等 对于 Visual Studio 来说 支撑脚手架 https learn microsoft com en us aspnet cor
  • MongoDB 获取聚合查询中的第一个和最后一个文档

    我如何获得第一个和最后一个文档time场地 我可以用 group并得到 first and last文档 但我不需要在这里分组 只需获取第一个和最后一个完整文档 也许我可以用slice 此查询不起作用 aggregate 353469045
  • MongoDB C# 驱动程序“找不到光标”

    我有一个相当密集的操作MongoCursor循环运行几个小时 在通过 c 驱动程序运行的 vb net 应用程序上 我不太确定是什么导致了它 但一段时间后我遇到了异常 Cursor not found 这可能是由于游标超时造成的 有什么办法
  • 显示来自 mongodb 的所有数据并在 doT.js 模板引擎中渲染它

    我想从 mongodb 中提取数据并将其传递给视图 一切似乎都正常 但我没有看到所有 10000 条记录都显示出来 而是只看到了一条 我觉得我非常接近解决它 但我陷入困境 我正在使用node mongodb native express和d
  • 如何中止 MongoDB shell 中正在运行的查询?

    我不敢相信我必须问这个问题 但是如何停止我刚刚运行的查询 该查询现在正在运行 并且显然需要很长时间才能在 Mongo shell 中完成 Control C似乎会使外壳崩溃 并吐出大量错误 中建议的愚蠢解决方案这个帖子 https stac
  • 使用 Javascript 和 Mongodb 对时间序列数据重新采样

    时间序列数据的数据集需要从具有不规则时间间隔的数据集转换为规则时间序列 可能使用插值和重采样 蟒蛇的pandas Dataframe resample http pandas pydata org pandas docs stable ge
  • CoreMongooseArray 到普通数组

    我正在从一个架构中选出 2 个元素 并希望在另一个架构中进行更新 为此 我使用切片方法将数组中的前 2 个元素列入候选名单 但我越来越 CoreMongooseArray 元素1 元素2 而不是 元素1 元素2 如何删除 CoreMongo
  • MongoDB 和 Mongoose 访问一个数据库,同时针对另一个数据库进行身份验证(NodeJS、Mongoose)

    我有几个数据库 不想为每个数据库创建单独的用户帐户 MongoDB 支持使用另一个数据库中定义的帐户来验证对数据库的访问的概念 但语法示例很难获得 当我终于弄清楚时 我正准备提出一个问题 如果它对其他人有帮助 就放在这里 这是 mongod
  • Spring Data MongoDB 和批量更新

    我正在使用 Spring Data MongoDB 并且想要执行批量更新 就像此处描述的那样 http docs mongodb org manual reference method Bulk find update Bulk find
  • 元素数组中数组的 MongoDB 全文

    当元素数组中的数组包含应与我的搜索匹配的文本时 我无法检索文档 以下是两个示例文档 id foo name Thing1 data text X X name Thing2 data text X Y id foo
  • node-mongodb-native的插入性能

    我正在使用 MongoDB 测试 Node js 的性能 我知道其中每一个都很好 彼此独立 但我正在尝试一些测试来感受它们 我遇到了这个问题 但无法确定来源 问题 我正在尝试在单个 Node js 程序中插入 1 000 000 条记录 它
  • PHP 致命错误:未找到“MongoClient”类

    我有一个使用 Apache 的网站 代码如下 当我尝试访问它时 我在 error log 中收到错误 PHP Fatal Error Class MongoClient not found 以下是可能错误的设置 但我认为没有错误 php i
  • 在单个 mongodb 查询中查找并计数

    我的文档看起来像这样 id ObjectId 572c4bffd073dd581edae045 name What s New in PHP 7 description PHP 7 is the first new major versio
  • 在 mongodb 和 nodejs 中对博客和评级进行建模

    我有一个博客集合 其中包含用户给予的标题 正文和综合评分 另一个集合 评级 其架构引用了博客 以对象 ID 的形式对博客进行评级 如果有的话 的用户以及他们给出的评级 即 1 或 1 当特定用户按照 最新优先 的顺序浏览博客时 比如每页 4
  • Mongodb 数据建模/投票更新(向上和向下)

    Mongo 中有一个关于投票数据模型 更新查询的示例 http www mongodb org display DOCS MongoDB Data Modeling and Rails MongoDBDataModelingandRails
  • C# Mongo DeleteMany - 不使用类

    我在 MongoDB 中有一个普通的 不是 GridFS 集合 我需要访问和删除一些文档 我想 需要在不使用类的情况下执行此操作 昨天 今天尝试了一些事情 并在网上进行了很多搜索并尝试了很多事情 无法弄清楚为什么 deletemany 对我

随机推荐

  • 基于R的Bilibili视频数据建模及分析——建模-因子分析篇

    基于R的Bilibili视频数据建模及分析 建模 因子分析篇 文章目录 基于R的Bilibili视频数据建模及分析 建模 因子分析篇 0 写在前面 1 数据分析 1 1 建模 因子分析 1 2 对数线性模型 1 3 主成分分析 1 4 因子
  • 大数据技术之Maxwell基础知识

    大数据技术之Maxwell基础知识 文章目录 大数据技术之Maxwell基础知识0 写在前面1 Maxwell 概述1 1 Maxwell 定义1 2 Maxwell 工作原理1 2 1 MySQL 主从复制过程1 2 2 Maxwell
  • 大数据技术之Maxwell入门案例学习

    大数据技术之Maxwell入门案例学习 文章目录 大数据技术之Maxwell入门案例学习1 写在前面2 Maxwell 使用2 1 Maxwell 安装部署2 2 Maxwell 入门案例2 2 1 监控 Mysql 数据并在控制台打印2
  • Canal实时监控案例

    Canal实时监控案例 文章目录 Canal实时监控案例0 写在前面1 TCP 模式测试1 1 IDEA创建项目canal module 1 2 通用监视类 CanalClient1 2 1 Canal 封装的数据结构1 2 2 在 can
  • unity笔记--Transform.SetSibling

    transform SetAsLastSibling 将变换移动到本地变换列表的末尾 即设置为同级索引中的最后一项 transform SetAsFirstSibling 将变换移动到本地变换列表的开头 即设置为同级索引中的第一项 tran
  • 大数据技术之Canal入门篇

    大数据技术之Canal入门篇 文章目录 大数据技术之Canal入门篇写在前面第 1 章 Canal 入门1 1 什么是 Canal1 2 MySQL 的Binlog1 2 1 什么是 Binlog1 2 2 Binlog 的分类 1 3 C
  • Doris集成Spark读写的简单示例

    Doris集成Spark读写的简单示例 文章目录 Doris集成Spark读写的简单示例0 写在前面1 Spark Doris Connector介绍2 基本示例2 1 提前准备表和数据2 2 新建项目2 3 使用SQL方式进行读写2 3
  • Linux用户与用户组介绍

    Linux用户与用户组介绍 文章目录 Linux用户与用户组介绍0 写在前面1 group1 1 什么是组 xff1f 1 2 groupadd1 2 groupmod1 3 groupdel1 4 gpasswd1 5 相关文件说明 2
  • Linux安装Oracle数据库

    Linux安装Oracle数据库 文章目录 Linux安装Oracle数据库0 写在前面1 Oracle 数据库1 1 简介1 2 Oracle 与 MySQL 的SQL 区别 2 前置准备2 1 安装依赖包2 2 配置用户组2 3 上传安
  • DataX与DB2导入导出案例

    DataX与DB2导入导出案例 文章目录 DataX与DB2导入导出案例0 写在前面1 DB2介绍2 DB2数据库对象关系3 安装前的准备3 1 安装依赖3 2 修改配置文件 sysctl conf3 3 修改配置文件 limits con
  • Doris集成其他系统——ODBC外部表

    Doris集成其他系统 ODBC外部表 文章目录 Doris集成其他系统 ODBC外部表0 写在前面1 正文1 1 ODBC外部表介绍1 2 使用方式 2 使用 ODBC 的 MySQL 外表2 1 前置芝士2 2 安装 unixODBC2
  • Linux安装ElasticSearch

    Linux安装ElasticSearch 文章目录 Linux安装ElasticSearch0 写在前面1 环境准备2 ES安装2 1ES解压2 2 新增普通用户2 3 给新创建的普通用户授权2 4 给新创建的普通用户设置sudo权限2 5
  • Hadoop入门学习——简介篇

    Hadoop入门学习 简介篇 文章目录 Hadoop入门学习 简介篇1 大数据概论1 1 分布式 并行 1 2 大数据特点 xff08 4V xff09 1 2 1 Volume xff08 大量 xff09 1 2 2 Velocity
  • Hadoop之分布式技术

    Hadoop之分布式技术 文章目录 Hadoop之分布式技术1 我们为什么需要分布式1 1 计算问题1 2 存储问题 2 分布式系统概述3 分布式实现方案4 分布式系统5 集群6 负载均衡7 弹性8 故障转移 1 我们为什么需要分布式 1
  • 认识DataX及简单入门

    认识DataX及简单入门 文章目录 认识DataX及简单入门1 DataX的概述1 1 什么是DataX1 2 DataX 的设计1 3 支持的数据源1 3 支持的数据源1 4 框架设计1 5 运行原理1 6 DataX和Sqoop的对比
  • Nginx 反向代理及https配置

    参考代码 在server中添加 location api proxy set header Host host proxy set header X Real IP remote addr proxy set header X Forwar
  • DataX使用之基础案例

    DataX使用之基础案例 文章目录 DataX使用之基础案例0 写在前面1 从stream 流读取数据并打印到控制台2 读取 MySQL 中的数据存放到 HDFS2 1 查看官方模板2 1 1 mysqlreader 参数解析 xff1a
  • DataX和Oracle使用案例

    DataX和Oracle使用案例 文章目录 DataX和Oracle使用案例0 写在前面1 从 Oracle 中读取数据存到 MySQL1 1 MySQL 中创建表1 2 编写 Datax 配置文件1 3 执行命令 2 读取 Oracle
  • MongoDB初认识

    MongoDB初认识 文章目录 MongoDB初认识0 写在前面1 MongoDB是什么2 MongoDB的优缺点3 基础概念解析4 安装4 1 下载地址4 2 安装MongoDB4 3 pgrep使用4 4 进入 shell 交互页面 0
  • DataX和MongoDB之间的数据导入导出案例

    DataX和MongoDB之间的数据导入导出案例 文章目录 DataX和MongoDB之间的数据导入导出案例0 写在前面1 MongoDB前置知识1 1 基础概念详解1 1 1 数据库1 1 2 集合1 1 3 文档 xff08 Docum