2020-03-18

大数据技术之DataX


版本:V1.0

第1章概述

1.1 什么是DataX


       DataX是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。

1.2 DataX的设计

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

1.3 框架设计

1.4 运行原理

第2章快速入门

2.1 官方地址

下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

源码地址:https://github.com/alibaba/DataX

2.2 前置要求

- Linux

- JDK(1.8以上,推荐1.8)

- Python(推荐Python2.6.X)

2.3 安装

1)将下载好的datax.tar.gz上传到hadoop102的/opt/softwarez

[atguigu@hadoop102

software]$ ls

datax.tar.gz

2)解压datax.tar.gz到/opt/module

[atguigu@hadoop102

software]$ tar -zxvf datax.tar.gz -C /opt/module/

3)运行自检脚本

[atguigu@hadoop102

bin]$ cd /opt/module/datax/bin/

[atguigu@hadoop102

bin]$ python datax.py /opt/module/datax/job/job.json

第3章使用案例

3.1 从stream流读取数据并打印到控制台

1)查看配置模板

[atguigu@hadoop102

bin]$ python datax.py -r streamreader -w streamwriter


DataX

(DATAX-OPENSOURCE-3.0), From Alibaba !

Copyright

(C) 2010-2017, Alibaba Group. All Rights Reserved.



Please

refer to the streamreader document:

     https://github.com/alibaba/DataX/blob/master/streamreader/doc/streamreader.md


Please

refer to the streamwriter document:

    https://github.com/alibaba/DataX/blob/master/streamwriter/doc/streamwriter.md


Pleasesave the following configuration as a json file and  use

     python {DATAX_HOME}/bin/datax.py{JSON_FILE_NAME}.json

to run

the job.


{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"streamreader",

                    "parameter": {

                        "column": [],

                       "sliceRecordCount": ""

                    }

                },

                "writer": {

                    "name":"streamwriter",

                    "parameter": {

                        "encoding":"",

                        "print": true

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel":""

            }

        }

    }

}

2)根据模板编写配置文件

[atguigu@hadoop102

job]$ vim stream2stream.json


填写以下内容:


{

  "job": {

    "content": [

      {

        "reader": {

          "name":"streamreader",

          "parameter": {

            "sliceRecordCount": 10,

            "column": [

              {

                "type":"long",

                "value":"10"

              },

              {

                "type":"string",

                "value": "hello,DataX"

              }

            ]

          }

        },

        "writer": {

          "name":"streamwriter",

          "parameter": {

            "encoding":"UTF-8",

            "print": true

          }

        }

      }

    ],

    "setting": {

      "speed": {

        "channel": 1

       }

    }

  }

}

3)运行

[atguigu@hadoop102

job]$

/opt/module/datax/bin/datax.py

/opt/module/datax/job/stream2stream.json

3.2 读取MySQL中的数据存放到HDFS

3.2.1 查看官方模板

[atguigu@hadoop102

~]$ python /opt/module/datax/bin/datax.py -r mysqlreader -w hdfswriter


{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"mysqlreader",

                    "parameter": {

                        "column": [],

                        "connection":[

                            {

                                "jdbcUrl": [],

                               "table": []

                            }

                        ],

                        "password":"",

                        "username":"",

                        "where":""

                    }

                },

                "writer": {

                    "name":"hdfswriter",

                    "parameter": {

                        "column": [],

                        "compress":"",

                        "defaultFS":"",

                       "fieldDelimiter": "",

                        "fileName":"",

                        "fileType":"",

                        "path":"",

                        "writeMode":""

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel":""

            }

        }

    }

}

mysqlreader参数解析:

hdfswriter参数解析:

3.2.2 准备数据

1)创建student表

mysql>

create database datax;

mysql>

use datax;

mysql>

create table student(id int,name varchar(20));

2)插入数据

mysql>

insert into student values(1001,'zhangsan'),(1002,'lisi'),(1003,'wangwu');

3.2.3 编写配置文件

[atguigu@hadoop102

datax]$ vim /opt/module/datax/job/mysql2hdfs.json


{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"mysqlreader",

                    "parameter": {

                        "column": [

                            "id",

                            "name"

                        ],

                        "connection":[

                            {

                               "jdbcUrl": [

                                   "jdbc:mysql://hadoop102:3306/datax"

                                ],

                               "table": [

                                   "student"

                                ]

                            }

                        ],

                        "username":"root",

                        "password":"000000"

                    }

                },

                "writer": {

                    "name":"hdfswriter",

                    "parameter": {

                        "column": [

                            {

                               "name": "id",

                               "type": "int"

                            },

                            {

                               "name": "name",

                               "type": "string"

                            }

                        ], 

                        "defaultFS":"hdfs://hadoop102:9000",

                        "fieldDelimiter":"\t",

                        "fileName":"student.txt",

                        "fileType":"text",

                        "path":"/",

                        "writeMode":"append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": "1"

            }

        }

    }

}

3.2.4 执行任务

[atguigu@hadoop102

datax]$ bin/datax.py job/mysql2hdfs.json


2019-05-1716:02:16.581 [job-0] INFO  JobContainer -

任务启动时刻                    : 2019-05-17 16:02:04

任务结束时刻                    : 2019-05-17 16:02:16

任务总计耗时                    :                 12s

任务平均流量                    :                3B/s

记录写入速度                    :              0rec/s

读出记录总数                    :                   3

读写失败总数                    :                   0

3.2.5 查看hdfs

注意:HdfsWriter实际执行时会在该文件名后添加随机的后缀作为每个线程写入实际文件名。

3.3 读取HDFS数据写入MySQL

1)将上个案例上传的文件改名

[atguigu@hadoop102

datax]$ hadoop fs -mv /student.txt* /student.txt

2)查看官方模板

[atguigu@hadoop102

datax]$ python bin/datax.py -r hdfsreader -w mysqlwriter


{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"hdfsreader",

                    "parameter": {

                        "column": [],

                        "defaultFS":"",

                        "encoding":"UTF-8",

                       "fieldDelimiter": ",",

                        "fileType":"orc",

                        "path":""

                    }

                },

                "writer": {

                    "name":"mysqlwriter",

                    "parameter": {

                        "column": [],

                        "connection": [

                            {

                               "jdbcUrl": "",

                               "table": []

                            }

                        ],

                        "password":"",

                        "preSql": [],

                        "session":[],

                        "username":"",

                        "writeMode":""

                    }

                }

            }

       ],

        "setting": {

            "speed": {

                "channel":""

            }

        }

    }

}

3)创建配置文件

[atguigu@hadoop102

datax]$ vim job/hdfs2mysql.json


{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"hdfsreader",

                    "parameter": {

                        "column":["*"],

                        "defaultFS":"hdfs://hadoop102:9000",

                        "encoding":"UTF-8",

                       "fieldDelimiter": "\t",

                        "fileType":"text",

                        "path":"/student.txt"

                    }

                },

                "writer": {

                    "name":"mysqlwriter",

                    "parameter": {

                        "column": [

                            "id",

                            "name"

                        ],

                        "connection":[

                            {

                               "jdbcUrl": "jdbc:mysql://hadoop102:3306/datax",

                               "table": ["student2"]

                            }

                        ],

                        "password": "000000",

                        "username":"root",

                        "writeMode":"insert"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel":"1"

            }

        }

    }

}

4)在MySQL的datax数据库中创建student2

mysql>

use datax;

mysql>

create table student2(id int,name varchar(20));

5)执行任务

[atguigu@hadoop102

datax]$ bin/datax.py job/hdfs2mysql.json


2019-05-1716:21:53.616 [job-0] INFO  JobContainer -

任务启动时刻                    : 2019-05-17 16:21:41

任务结束时刻                    : 2019-05-17 16:21:53

任务总计耗时                    :                 11s

任务平均流量                    :                3B/s

记录写入速度                    :              0rec/s

读出记录总数                    :                   3

读写失败总数                    :                   0

6)查看student2表

mysql>

select * from student2;

+------+----------+

|id   | name     |

+------+----------+

| 1001

| zhangsan |

| 1002| lisi     |

| 1003| wangwu   |

+------+----------+

3 rows

in set (0.00 sec)

第4章 Oracle数据库

以下操作使用root账号。

4.1 oracle数据库简介

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。

4.2 安装前的准备

4.2.1 检查依赖

[root@hadoop102~]# rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-develgcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers kshlibaio  libaio-devel libgcc libgomplibstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC-devel

4.2.2 安装依赖

哪个没有安装哪个,如:

[root@hadoop102

~]# yum -y install elfutils-libelf-devel gcc gcc-c++ libaio-devel

libstdc++-devel numactl-devel unixODBC unixODBC-devel

4.2.3 上传安装包并解压

[root@hadoop102

software]# ls

Oracle_Database_12c_Release2_linuxx64.zip

[root@hadoop102

software]# unzip Oracle_Database_12c_Release2_linuxx64.zip -d /opt/module/

4.2.4 配置用户组

Oracle安装文件不允许通过root用户启动,需要为oracle配置一个专门的用户。

1)创建sql 用户组

[root@hadoop102

software]#groupadd sql

2)创建oracle 用户并放入sql组中

[root@hadoop102

software]#useradd oracle -g sql

3)修改oracle用户登录密码,输入密码后即可使用oracle用户登录系统

[root@hadoop102

software]#passwd oracle

4)修改所属用户和组

[root@hadoop102

module]# chown -R oracle:sql /opt/module/database/

[root@hadoop102

module]# chgrp -R sql /opt/module/database/

4.2.5 修改配置文件sysctl.conf

[root@hadoop102

module]# vim /etc/sysctl.conf

删除里面的内容,添加如下内容

net.ipv4.ip_local_port_range

= 9000 65500

fs.file-max

= 6815744

kernel.shmall

= 10523004

kernel.shmmax

= 6465333657

kernel.shmmni

= 4096

kernel.sem

= 250 32000 100 128

net.core.rmem_default=262144

net.core.wmem_default=262144

net.core.rmem_max=4194304

net.core.wmem_max=1048576

fs.aio-max-nr

= 1048576

参数解析:

net.ipv4.ip_local_port_range :可使用的IPv4端口范围

fs.file-max :该参数表示文件句柄的最大数量。文件句柄设置表示在linux系统中可以打开的文件数量。

kernel.shmall :该参数表示系统一次可以使用的共享内存总量(以页为单位)

kernel.shmmax :该参数定义了共享内存段的最大尺寸(以字节为单位)

kernel.shmmni :这个内核参数用于设置系统范围内共享内存段的最大数量

kernel.sem :该参数表示设置的信号量。

net.core.rmem_default:默认的TCP数据接收窗口大小(字节)。

net.core.wmem_default:默认的TCP数据发送窗口大小(字节)。

net.core.rmem_max:最大的TCP数据接收窗口(字节)。

net.core.wmem_max:最大的TCP数据发送窗口(字节)。

fs.aio-max-nr :同时可以拥有的的异步IO请求数目。

4.2.6 修改配置文件limits.conf

[root@hadoop102 module]# vim /etc/security/limits.conf

在文件末尾添加:

oracle

soft nproc 2047

oracle

hard nproc 16384

oracle

soft nofile 1024

oracle

hard nofile 65536

重启机器生效。

4.3 安装Oracle数据库

4.3.1 进入虚拟机图像化页面操作

[oracle@hadoop102 ~]# cd /opt/module/database

 [oracle@hadoop102 database]# ./runInstaller

4.3.2 安装数据库

1)去掉红框位置对勾

2)选择仅安装数据库软件

3)选择单实例数据库安装


4)默认下一步

5)设置安装位置

6)创建产品清单

7)操作系统组设置

8)等待安装

9)查看验证,按提示修改,如果不能修改再点击忽略

10)概要,直接点击安装

11)按提示操作

12)安装完成

4.4 设置环境变量

[oracle@hadoop102

dbhome_1]# vim /home/oracle/.bash_profile

添加:

#ORACLE_HOME

export

ORACLE_HOME=/home/oracle/app/oracle/product/12.2.0/dbhome_1

export

PATH=$PATH:$ORACLE_HOME/bin

export

ORACLE_SID=orcl

export

NLS_LANG=AMERICAN_AMERICA.ZHS16GBK


[oracle@hadoop102

~]$ source /home/oracle/.bash_profile

4.5 设置Oracle监听

4.5.1 命令行输入以下命令

[oracle@hadoop102

~]$ netca


4.5.2 选择添加

4.5.3 设置监听名,默认即可

4.5.4 选择协议,默认即可

4.5.5 设置端口号,默认即可

4.5.6 配置更多监听,默认

4.5.7 完成

4.6 创建数据库

4.6.1 进入创建页面

[oracle@hadoop102

~]$ dbca

4.6.2 选择创建数据库

4.6.3 选择高级配置

4.6.4 选择数据仓库

4.6.5 将图中所示对勾去掉

4.6.6 存储选项

4.6.7 快速恢复选项

4.6.8 选择监听程序

4.6.9 如图设置

4.6.10 使用自动内存管理

4.6.11 管理选项,默认

4.6.12 设置统一密码

4.6.13 创建选项,选择创建数据库

4.6.14 概要,点击完成

4.6.15 等待安装

4.7 简单使用

4.7.1 开启,关闭监听服务

开启服务:

[oracle@hadoop102

~]$ lsnrctl start

关闭服务:

[oracle@hadoop102

~]$ lsnrctl stop

4.7.2 进入命令行

[oracle@hadoop102

~]$ sqlplus


SQL*Plus:

Release 12.2.0.1.0 Production on Wed May 29 17:08:05 2019


Copyright(c) 1982, 2016, Oracle.  All rightsreserved.


Enter

user-name: system

Enter

password: (这里输入之前配置的统一密码)

Last

Successful login time: Wed May 29 2019 13:03:39 +08:00


Connected

to:

Oracle

Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production


SQL>

4.7.3 创建用户并授权

SQL>

create user atguigu identified by 000000;

User created.

SQL>

grant create session,create table,create view,create sequence,unlimited

tablespace to atguigu;

Grant

succeeded.

4.7.4 进入atguigu账号,创建表

SQL>create

TABLE student(id INTEGER,name VARCHAR2(20));

SQL>insert

into student values (1,'zhangsan');

SQL>

select * from student;

        ID  NAME

----------

----------------------------------------

         1  zhangsan

注意:安装完成后重启机器可能出现ORACLE not

available错误,解决方法如下:

[oracle@hadoop102

~]$ sqlplus / as sysdba

SQL>startup

SQL>conn

atguigu

Enter

password:

4.8 Oracle与MySQL的SQL区别

类型OracleMySQL

整型number(N)/integerint/integer

浮点型floatfloat/double

字符串类型varchar2(N)varchar(N)

NULL''null和''不一样

分页rownumlimit

""限制很多,一般不让用与单引号一样

价格闭源,收费开源,免费

主键自动增长×√

if  not exists×√

auto_increment×√

create  database×√

select  * from table as t×√

4.9 DataX案例

4.9.1 从Oracle中读取数据存到MySQL

1)MySQL中创建表

[oracle@hadoop102

~]$ mysql -uroot -p000000

mysql>

create database oracle;

mysql>

use oracle;

mysql>

create table student(id int,name varchar(20));

2)编写datax配置文件

[oracle@hadoop102

~]$ vim /opt/module/datax/job/oracle2mysql.json


{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"oraclereader",

                    "parameter": {

                        "column":["*"],

                        "connection":[

                            {

                               "jdbcUrl": ["jdbc:oracle:thin:@hadoop102:1521:orcl"],

                               "table": ["student"]

                            }

                        ],

                        "password":"000000",

                        "username":"atguigu"

                    }

                },

                "writer": {

                    "name":"mysqlwriter",

                    "parameter": {

                        "column":["*"],

                        "connection":[

                            {

                                "jdbcUrl":"jdbc:mysql://hadoop102:3306/oracle",

                               "table": ["student"]

                            }

                        ],

                        "password":"000000",

                        "username":"root",

                        "writeMode":"insert"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel":"1"

            }

        }

    }

}

3)执行命令

[oracle@hadoop102

~]$

/opt/module/datax/bin/datax.py

/opt/module/datax/job/oracle2mysql.json


查看结果:

mysql>

select * from student;

+------+----------+

|id   | name     |

+------+----------+

|    1 | zhangsan |

+------+----------+

4.9.2 读取Oracle的数据存入HDFS中

1)编写配置文件

[oracle@hadoop102

datax]$ vim job/oracle2hdfs.json

{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"oraclereader",

                    "parameter": {

                        "column":["*"],

                        "connection":[

                            {

                               "jdbcUrl":["jdbc:oracle:thin:@hadoop102:1521:orcl"],

                                "table":["student"]

                            }

                        ],

                        "password":"000000",

                        "username":"atguigu"

                    }

                },

                "writer": {

                    "name":"hdfswriter",

                    "parameter": {

                        "column": [

                            {

                               "name": "id",

                               "type": "int"

                            },

                            {

                               "name": "name",

                               "type": "string"

                            }


                        ],

                        "defaultFS":"hdfs://hadoop102:9000",

                       "fieldDelimiter": "\t",

                        "fileName":"oracle.txt",

                        "fileType":"text",

                        "path":"/",

                        "writeMode":"append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel":"1"

            }

        }

    }

}

2)执行

[oracle@hadoop102

datax]$ bin/datax.py job/oracle2hdfs.json

3)查看HDFS结果

第5章MongoDB

5.1 什么是MongoDB

MongoDB 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

5.2 MongoDB优缺点

5.3 基础概念解析

SQL术语/概念MongoDB术语/概念解释/说明

databasedatabase数据库

tablecollection数据库表/集合

rowdocument数据记录行/文档

columnfield数据字段/域

indexindex索引

table  joins 不支持表连接,MongoDB不支持

primary  keyprimary  key主键,MongoDB自动将_id字段设置为主键

通过下图实例,我们也可以更直观的了解Mongo中的一些概念:

5.4 安装

5.4.1 下载地址

https://www.mongodb.com/download-center#community

5.4.2 安装

1)上传压缩包到虚拟机中

[atguigu@hadoop102

software]$ ls

mongodb-linux-x86_64-4.0.10.tgz

2)解压

[atguigu@hadoop102

software]$ tar -zxvf mongodb-linux-x86_64-4.0.10.tgz -C /opt/module/

3)重命名

[atguigu@hadoop102

module]$ mv mongodb-linux-x86_64-4.0.10/ mongodb

4)创建数据库目录

MongoDB的数据存储在data目录的db目录下,但是这个目录在安装过程不会自动创建,所以需要手动创建data目录,并在data目录中创建db目录。

[atguigu@hadoop102

module]$ sudo mkdir -p /data/db

[atguigu@hadoop102

mongodb]$ sudo chmod 777 -R /data/db/

5)启动MongoDB服务

[atguigu@hadoop102

mongodb]$ bin/mongod

6)进入shell页面

[atguigu@hadoop102

~]$ cd /opt/module/mongodb/

[atguigu@hadoop102

mongodb]$ bin/mongo


MongoDB

shell version v4.0.10

connecting

to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb

Implicit

session: session { "id" :

UUID("66e2b331-e3c3-4b81-b676-1ee4bac87abf") }

MongoDB

server version: 4.0.10

Welcome

to the MongoDB shell.

…………..

5.5 基础概念详解

5.5.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

5.5.2 文档(Document)

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

一个简单的例子:

{"name":"atguigu"}

注意:

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

2.MongoDB区分类型和大小写。

3.MongoDB的文档不能有重复的键。

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

5.5.3 集合

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

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

下面我们来看看如何创建集合:

MongoDB 中使用 createCollection() 方法来创建集合。

语法格式:

db.createCollection(name,

options)

参数说明:


name: 要创建的集合名称

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

options 可以是如下参数:

字段类型描述

capped布尔(可选)如果为 true,则创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。当该值为 true 时,必须指定 size 参数。

autoIndexId布尔(可选)如为 true,自动在 _id 字段创建索引。默认为 false。

size数值(可选)为固定集合指定一个最大值(以字节计)。如果 capped true,也需要指定该字段。

max数值(可选)指定固定集合中包含文档的最大数量。

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

>

use test

switched

to db test

>

db.createCollection("atguigu")

{

"ok" : 1 }

>

show collections

Atguigu


//插入数据

>

db.atguigu.insert({"name":"atguigu","url":"www.atguigu.com"})

WriteResult({

"nInserted" : 1 })

//查看数据

>

db.atguigu.find()

{

"_id" : ObjectId("5d0314ceecb77ee2fb2d7566"),

"name" : "atguigu", "url" :

"www.atguigu.com" }

说明:

ObjectId 类似唯一主键,可以很快的去生成和排序,包含 12 bytes,含义是:

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

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

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

最后三个字节是随机数

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

>

db.createCollection("mycol",{ capped : true,autoIndexId : true,size :

6142800, max : 1000})

>

show tables;

atguigu

mycol

案例3:自动创建集合

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

>

db.mycol2.insert({"name":"atguigu"})

WriteResult({

"nInserted" : 1 })

>

show collections

atguigu

mycol

mycol2

案例4:删除集合

>

db.mycol2.drop()

True

>

show tables;

atguigu

mycol

5.6 DataX导入导出案例

5.6.1 读取MongoDB的数据导入到HDFS

1)编写配置文件

[atguigu@hadoop102

datax]$ vim job/mongdb2hdfs.json

{

    "job": {

        "content": [

            {

                "reader": {

                    "name":"mongodbreader",

                    "parameter": {

                        "address":["127.0.0.1:27017"],

                       "collectionName": "atguigu",

                        "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://hadoop102:9000",

                       "fieldDelimiter": "\t",

                        "fileName":"mongo.txt",

                        "fileType":"text",

                        "path":"/",

                        "writeMode":"append"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel":"1"

            }

        }

    }

}

2)mongodbreader参数解析

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

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

userPassword: MongoDB的密码。【选填】

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

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

name:Column的名字。【必填】

type:Column的类型。【选填】

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

3)执行

[atguigu@hadoop102

datax]$ bin/datax.py job/mongdb2hdfs.json

4)查看结果

5.6.2 读取MongoDB的数据导入MySQL

1)在MySQL中创建表

mysql>

create table atguigu(name varchar(20),url varchar(20));

2)编写DataX配置文件

[atguigu@hadoop102

datax]$ vim job/mongodb2mysql.json

{

    "job": {

        "content": [

            {

                "reader": {

                    "name": "mongodbreader",

                    "parameter": {

                        "address":["127.0.0.1:27017"],

                       "collectionName": "atguigu",

                        "column": [

                               {

                                      "name":"name",

                                      "type":"string"

                               },

                               {

                                      "name":"url",

                                      "type":"string"

                               }

                        ],

                        "dbName":"test",

                    }

                },

                "writer": {

                    "name":"mysqlwriter",

                    "parameter": {

                        "column": ["*"],

                        "connection":[

                            {

                               "jdbcUrl": "jdbc:mysql://hadoop102:3306/test",

                               "table": ["atguigu"]

                            }

                        ],

                        "password":"000000",

                        "username":"root",

                        "writeMode":"insert"

                    }

                }

            }

        ],

        "setting": {

            "speed": {

                "channel": "1"

            }

        }

    }

}

3)执行

[atguigu@hadoop102

datax]$ bin/datax.py job/mongodb2mysql.json

4)查看结果

mysql>

select * from atguigu;

+---------+-----------------+

|name    | url             |

+---------+-----------------+

|

atguigu | www.atguigu.com |

+---------+-----------------+

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,348评论 6 491
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,122评论 2 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,936评论 0 347
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,427评论 1 283
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,467评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,785评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,931评论 3 406
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,696评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,141评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,483评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,625评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,291评论 4 329
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,892评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,741评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,977评论 1 265
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,324评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,492评论 2 348

推荐阅读更多精彩内容

  • hive学习笔记 一、hive入门 1.1 什么是hive   Hive:由Facebook开源用于解决海量结构化...
    bd75129df185阅读 285评论 0 0
  • 一、HBase简介 1.1 HBase是什么 HBase是一个分布式的、面向列的开源数据库,Hadoop 数据库。...
    这一刻_776b阅读 921评论 0 0
  • 数据库导入电影信息数据,建表:movieinfo,user,personalratings,recommendre...
    ElfACCC阅读 302评论 0 0
  • MongoDB数据库 简介: Windows 下安装 MongoDB 数据库: 运行 MongoDB : 连接 M...
    modesty123阅读 200评论 0 0
  • 一Hive的介绍和下载安装 http://archive.apache.org/ 1.1 Hive的三种模式 1....
    钟敏_1788阅读 982评论 0 0