datax简单入门和oracle数据库安装

概述

什么是datax

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

image.png

DataX的设计

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。

当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

image.png

框架设计

image.png

运行原理

image.png

快速入门

官方地址

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

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

前置要求

  • Linux
  • JDK(1.8以上,推荐1.8)
  • Python(推荐Python2.6.X)

安装

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GudSxmY6-1603157741327)(https://www.rookiegao.top/upload/2020/3/image-0bbc4de270e54dbfaf690ece660477bf.png)]

使用案例

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

1)查看配置模板

[atguigu@hadoop102 bin]$ python datax.py -r streamreader -w streamwriter

DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright © 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

Please save 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

读取MySQL中的数据存放到HDFS

查看官方模板
[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参数解析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gNLj5HEX-1603157741328)(https://www.rookiegao.top/upload/2020/3/image-21b76e6c29ff4df8ae580376d4a0e9dd.png)]

hdfswriter参数解析:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CBrOXMXP-1603157741330)(https://www.rookiegao.top/upload/2020/3/image-84ace995ff8f4d3386b9a88b5368f10a.png)]

准备数据

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');
编写配置文件
[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"
            }
        }
    }
}

执行任务
[atguigu@hadoop102 datax]$ bin/datax.py job/mysql2hdfs.json

2019-05-17 16: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

查看hdfs

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1gJTuSVG-1603157741331)(https://www.rookiegao.top/upload/2020/3/image-f10ddefaddcf406ca4385b56e369b93c.png)]

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

读取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-17 16: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)

Oracle数据库

注意:以下操作使用root账号。

oracle数据库简介

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。

它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。

它是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。

安装前的准备

检查依赖
[root@hadoop102 ~]# rpm -q binutils compat-libstdc++-33 elfutils-libelf elfutils-libelf-devel gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio  libaio-devel libgcc libgomp libstdc++ libstdc++-devel make numactl-devel sysstat unixODBC unixODBC-devel
安装依赖

哪个没有安装哪个,如:

[root@hadoop102 ~]# yum -y install elfutils-libelf-devel gcc gcc-c++ libaio-devel libstdc++-devel numactl-devel unixODBC unixODBC-devel
上传安装包并解压
[root@hadoop102 software]# ls
Oracle_Database_12c_Release2_linuxx64.zip
[root@hadoop102 software]# unzip Oracle_Database_12c_Release2_linuxx64.zip -d /opt/module/

配置用户组

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/
修改配置文件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请求数目。
修改配置文件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

重启机器生效!!!

安装Oracle数据库

进入虚拟机图像化页面操作
[oracle@hadoop102 ~]# cd /opt/module/database
[oracle@hadoop102 database]# ./runInstaller

安装数据库

1)去掉红框位置对勾

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-IdOfiVqL-1603157741332)(https://www.rookiegao.top/upload/2020/3/image-0a523c01215142a9a7cbf63a8be6c623.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-M5FXYabw-1603157741333)(https://www.rookiegao.top/upload/2020/3/image-07f83eed3b924a30acfe3e7e881a8cb0.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PBUAhGnq-1603157741334)(https://www.rookiegao.top/upload/2020/3/image-0c510fe9d2c04b2e9f6fd58c0af87d62.png)]

4)默认下一步

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wLmVMMOj-1603157741335)(https://www.rookiegao.top/upload/2020/3/image-577bdc28e13948a197aae80aa1821529.png)]

5)设置安装位置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lEJUy1Jn-1603157741336)(https://www.rookiegao.top/upload/2020/3/image-1dca29b5cee543e69bc645eadf5989d6.png)]

6)创建产品清单

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ix4OJmzk-1603157741336)(https://www.rookiegao.top/upload/2020/3/image-e710e98b1b4c4c2fae0098dd0c5c91e2.png)]

7)操作系统组设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mzQNHJdh-1603157741337)(https://www.rookiegao.top/upload/2020/3/image-902f7f3d299d4907ba0c8c8791818325.png)]

8)等待安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZoOnXJCa-1603157741338)(https://www.rookiegao.top/upload/2020/3/image-72596aa60cd74af7aa98a95855010152.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ENyw9AuY-1603157741339)(https://www.rookiegao.top/upload/2020/3/image-f50e456acb084ca7965c0f3b4ccd641c.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JDgiwBOH-1603157741340)(https://www.rookiegao.top/upload/2020/3/image-b67593f2c6c84d0dbcb66cbb3335b73d.png)]

10)概要,直接点击安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g12njotH-1603157741340)(https://www.rookiegao.top/upload/2020/3/image-683bf2856088429e9dc0fbaf3e665b46.png)]

11)按提示操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9ZnDCGVB-1603157741341)(https://www.rookiegao.top/upload/2020/3/image-3415d936a2f041eda0f3a8a6433324c8.png)]

12)安装完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MrbrOYxB-1603157741342)(https://www.rookiegao.top/upload/2020/3/image-fe1b5e99627a4251aedca5a54eaab8d9.png)]

设置环境变量

[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

设置Oracle监听

命令行输入以下命令
oracle@hadoop102 ~]$ netca

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-S96kNmEN-1603157741343)(https://www.rookiegao.top/upload/2020/3/image-10efaa0a38c34d57bd21412d7a183d4d.png)]

选择添加

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mke5OmjH-1603157741343)(https://www.rookiegao.top/upload/2020/3/image-0bfe58ec9f9245af85b0570e63e53e9f.png)]

设置监听名,默认即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cXPfyleS-1603157741344)(https://www.rookiegao.top/upload/2020/3/image-5c9a50ea776948d99061a8350c44421a.png)]

选择协议,默认即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PQxaqco5-1603157741345)(https://www.rookiegao.top/upload/2020/3/image-5512e2229b6f4194aeeec884dc623691.png)]

设置端口号,默认即可

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wAybWoML-1603157741345)(https://www.rookiegao.top/upload/2020/3/image-774874173aec44ae84cd4b12ef4dd97f.png)]

配置更多监听,默认

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H4rWS8ix-1603157741346)(https://www.rookiegao.top/upload/2020/3/image-980033abe9454dd695fc80c7d4e7e0c6.png)]

完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FFZBG314-1603157741347)(https://www.rookiegao.top/upload/2020/3/image-1f9697643da34e7eb35ca78694f3159c.png)]

创建数据库

进入创建页面
[oracle@hadoop102 ~]$ dbca
选择创建数据库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qFvAIec9-1603157741348)(https://www.rookiegao.top/upload/2020/3/image-14f6c641c46b45d284ebd33eec268abb.png)]

选择高级配置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Za5PkTCK-1603157741349)(https://www.rookiegao.top/upload/2020/3/image-47fc9e7ee1754f338138e48c7e047636.png)]

选择数据仓库

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oybgROBl-1603157741350)(https://www.rookiegao.top/upload/2020/3/image-36cd0fde4a784370b9a5c0cf8c9e0be0.png)]

将图中所示对勾去掉

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dw14eLX1-1603157741351)(https://www.rookiegao.top/upload/2020/3/image-5aeb4ecfe6ca48fb83caad05856ca82d.png)]

存储选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hyZYx5sy-1603157741352)(https://www.rookiegao.top/upload/2020/3/image-4e8b6209dbd746309523666f1311481d.png)]

快速恢复选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UGHagMXc-1603157741352)(https://www.rookiegao.top/upload/2020/3/image-083d1d8be0d748cfb33b995c97d9a249.png)]

选择监听程序

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MXAx1BqX-1603157741353)(https://www.rookiegao.top/upload/2020/3/image-e4828fe70507490a8fb0883fcd93ae5b.png)]

如图设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-J5g2L5qU-1603157741354)(https://www.rookiegao.top/upload/2020/3/image-7d2c5934d88140468516490b6e25099a.png)]

使用自动内存管理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pCQ3QafK-1603157741355)(https://www.rookiegao.top/upload/2020/3/image-5d048bccb6fc4fb3af926571a3421fa7.png)]

管理选项,默认

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-v6DrLg4m-1603157741355)(https://www.rookiegao.top/upload/2020/3/image-014a8f92028d4896afbaa7aa1d37e258.png)]

设置统一密码

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6Xvi1Rad-1603157741356)(https://www.rookiegao.top/upload/2020/3/image-bce5a572a9d54c4483e500b44f84e7d6.png)]

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3zpJHJGp-1603157741358)(https://www.rookiegao.top/upload/2020/3/image-48ad6c700f7f454991389e2d09627d45.png)]

概要,点击完成

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LaZItl0U-1603157741359)(https://www.rookiegao.top/upload/2020/3/image-3cdd0e5f5bce4cbabbdfc845413f173d.png)]

等待安装

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3DijNjxL-1603157741360)(https://www.rookiegao.top/upload/2020/3/image-b7bb58c1a4ba40eb9af069c6a2181fcb.png)]

简单使用

开启,关闭监听服务

开启服务:

[oracle@hadoop102 ~]$ lsnrctl start

关闭服务:

[oracle@hadoop102 ~]$ lsnrctl stop
进入命令行
[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 rights reserved.

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>

创建用户并授权
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.

进入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:

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×

DataX案例

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

读取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结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ibJZ7TUQ-1603157741361)(https://www.rookiegao.top/upload/2020/3/image-59bbc1a9aeb94e9f8d4bb94bd828aa44.png)]

MongoDB

什么是MongoDB

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

image.png

MongoDB优缺点

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnvXAWVO-1603157741363)(https://www.rookiegao.top/upload/2020/3/image-4e62b0ac0004433da38efc5946fa4fe6.png)]

基础概念解析

SQL术语/概念MongoDB术语/概念解释/说明
databasedatabase数据库
tablecollection数据库表/集合
rowdocument数据记录行/文档
columnfield数据字段/域
indexindex索引
table joins不支持表连接,MongoDB不支持
primary keyprimary key主键,MongoDB自动将_id字段设置为主键

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uUnCbW4D-1603157741364)(https://www.rookiegao.top/upload/2020/3/image-d13ccf86bfdb49e19352e506bf576dda.png)]

安装

下载地址

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

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

基础概念详解

数据库

一个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

文档(Document)

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

{"name":"atguigu"}

注意:

  1. 文档中的键/值对是有序的。
  2. MongoDB区分类型和大小写。
  3. MongoDB的文档不能有重复的键。
  4. 文档的键是字符串。除了少数例外情况,键可以使用任意UTF-8字符。
集合

集合就是 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

DataX导入导出案例

读取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)查看结果

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6O1pGPEe-1603157741365)(https://www.rookiegao.top/upload/2020/3/image-c30b5e0c0c644da1bd5b43e086c664dd.png)]

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

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值