DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。
当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。
下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
源码地址:https://github.com/alibaba/DataX
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)]
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
[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实际执行时会在该文件名后添加随机的后缀作为每个线程写入实际文件名。
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)
注意:以下操作使用root账号。 |
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/
[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
参数解析:
[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@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@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.
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 |
---|---|---|
整型 | number(N)/integer | int/integer |
浮点型 | float | float/double |
字符串类型 | varchar2(N) | varchar(N) |
NULL | ‘’ | null和’'不一样 |
分页 | rownum | limit |
"" | 限制很多,一般不让用 | 与单引号一样 |
价格 | 闭源,收费 | 开源,免费 |
主键自动增长 | × | √ |
if not exists | × | √ |
auto_increment | × | √ |
create database | × | √ |
select * from table as t | × | √ |
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 |
+------+----------+
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 是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MnvXAWVO-1603157741363)(https://www.rookiegao.top/upload/2020/3/image-4e62b0ac0004433da38efc5946fa4fe6.png)]
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 不支持 | 表连接,MongoDB不支持 |
primary key | primary 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
文档是一组键值(key-value)对组成。MongoDB 的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型,这与关系型数据库有很大的区别,也是 MongoDB 非常突出的特点。
一个简单的例子:
{"name":"atguigu"}
注意:
集合就是 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
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)]
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 |
+---------+-----------------+