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

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



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 |
+	+	+

全文结束!

  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
### 回答1: 我可以提供一种使用Apache DataXMongoDB数据同步到Kudu的方法。步骤如下:1.安装Apache DataXMongoDB Kudu Connector;2.在DataX中配置MongoDB Reader和Kudu Writer;3.运行DataX任务,将MongoDB中的数据同步到Kudu中。 ### 回答2: 编写dataxmongodb到kudu的数据迁移任务需要以下步骤: 1. 安装和配置datax:首先,需要在目标服务器上安装和配置datax,以确保其可以正常运行。可以从datax官方网站下载并安装相应版本的datax。 2. 配置mongodb读取器:在datax的配置文件中,需要指定mongodb作为数据源。可以使用mongodb读取器插件来实现数据的读取。配置文件需要指定mongodb的连接信息(如主机名、端口号、数据库名称和集合名称等)以及读取的字段。 3. 配置kudu写入器:在配置文件中,还需要指定kudu作为数据目标。可以使用kudu写入器插件来实现数据的写入。配置文件需要指定kudu的连接信息(如主机名、端口号和表名等)。 4. 定义字段映射和转换规则:根据需求,需要在配置文件中定义字段映射和转换规则,以使数据能够正确地从mongodb迁移到kudu。例如,可以指定如何映射mongodb中的字段到kudu表中的字段,以及如何进行数据类型转换和格式化等操作。 5. 运行datax任务:配置文件准备好后,可以使用datax命令行工具来运行任务。在命令行中指定配置文件的路径,datax将会读取配置文件并执行数据迁移任务。在执行过程中,可以查看日志来监控任务的运行情况。 总的来说,编写dataxmongodb到kudu的数据迁移任务,需要安装和配置datax,配置mongodb读取器和kudu写入器,定义字段映射和转换规则,最后通过datax命令行工具运行任务。这样就可以实现将mongodb中的数据迁移到kudu中。 ### 回答3: 编写datax数据MongoDB导入到Kudu需要以下几个步骤: 1. 确保已经安装好了MongoDB和Kudu,并且能够正常连接到它们。 2. 下载并安装DataXDataX是一个开源的大数据同步工具,可以用于从不同的数据导入导出数据。 3. 创建DataX的配置文件,配置文件是一个json格式的文件,用于指定数据源和目标源的相关信息。 4. 在配置文件中,指定MongoDB和Kudu的连接地址、用户名和密码,以及需要导入MongoDB数据库和集合,以及Kudu的表和列的映射关系。 5. 配置数据转换规则,由于MongoDB和Kudu的数据类型可能不一致,需要使用DataX提供的转换规则来将数据进行格式转换和映射。 6. 运行DataX任务,将数据MongoDB导入到Kudu。可以通过命令行或者图形界面来启动DataX任务。 7. 监控导入任务,可以通过DataX的日志来查看导入进度和错误情况,以及导入数据量和时间。 需要注意的是,编写DataX任务需要一定的编程和配置经验,对MongoDB和Kudu的相关知识也有一定的了解。另外,由于DataX是一个通用的数据同步工具,还可以用来从其他数据导入数据到Kudu,具体配置和步骤可能有所不同。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值