美文网首页
2020-03-18

2020-03-18

作者: 小熊志远 | 来源:发表于2021-05-31 23:32 被阅读0次

    大数据技术之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 |

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

    相关文章

      网友评论

          本文标题:2020-03-18

          本文链接:https://www.haomeiwen.com/subject/uivqyhtx.html