首页 > 其他分享 >DataX入门教程1

DataX入门教程1

时间:2022-11-23 23:35:50浏览次数:54  
标签:name daydayup 入门教程 job DataX oracle hadoop102 datax

DataX入门教程

概述

什么是DataX

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

DataX的设计

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

支持的数据源

DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。

框架设计

运行原理

举例来说,用户提交了一个DataX作业,并且配置了20个并发,目的是将一个100张分表的mysql数据同步到odps里面。 DataX的调度决策思路是:

1)DataXJob根据分库分表切分成了100个Task。

2)根据20个并发,DataX计算共需要分配4个TaskGroup。

3)4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

与Sqoop的对比

快速入门

官方地址

下载地址: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/software

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

[daydayup@hadoop102 software]$ tar -zxvf datax.tar.gz -C /opt/module/

3)运行自检脚本

[daydayup@hadoop102 bin]$ cd /opt/module/datax/bin/

[daydayup@hadoop102 bin]$ python datax.py /opt/module/datax/job/job.json

使用案例

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

1)查看配置模板

[daydayup@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

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)根据模板编写配置文件

[daydayup@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)运行

[daydayup@hadoop102 job]$

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

读取MySQL中的数据存放到HDFS

查看官方模板

[daydayup@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参数解析:

准备数据

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');

编写配置文件

[daydayup@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"

}

}

}

}

执行任务

[daydayup@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

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

关于HA的支持

"hadoopConfig":{
"dfs.nameservices": "ns",
"dfs.ha.namenodes.ns": "nn1,nn2",
"dfs.namenode.rpc-address.ns.nn1": "主机名:端口",
"dfs.namenode.rpc-address.ns.nn2": "主机名:端口",
"dfs.client.failover.proxy.provider.ns": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
}

读取HDFS数据写入MySQL

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

[daydayup@hadoop102 datax]$ hadoop fs -mv /student.txt* /student.txt

2)查看官方模板

[daydayup@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)创建配置文件

[daydayup@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)执行任务

[daydayup@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数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库解决方案。

安装前的准备

安装依赖

yum install -y bc binutils compat-libcap1 compat-libstdc++33 elfutils-libelf elfutils-libelf-devel fontconfig-devel glibc glibc-devel ksh libaio libaio-devel libX11 libXau libXi libXtst libXrender libXrender-devel libgcc libstdc++ libstdc++-devel libxcb make smartmontools sysstat kmod* gcc-c++ compat-libstdc++-33

配置用户组

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

上传安装包并解压

注意:19c需要把软件包直接解压到ORACLE_HOME的目录下

[root@hadoop102 software]# mkdir -p /home/oracle/app/oracle/product/19.3.0/dbhome_1

[root@hadoop102 software]# unzip LINUX.X64_193000_db_home.zip -d /home/oracle/app/oracle/product/19.3.0/dbhome_1

修改所属用户和组

[root@hadoop102 dbhome_1]# chown -R oracle:sql /home/oracle/app/

修改配置文件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 dbhome_1]# vim /home/oracle/.bash_profile

添加:

#ORACLE_HOME

export ORACLE_BASE=/home/oracle/app/oracle

export ORACLE_HOME=/home/oracle/app/oracle/product/19.3.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 ~]# cd /opt/module/oracle

[oracle@hadoop102 database]# ./runInstaller

安装数据库

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

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

3)选择企业版,默认

4)设置安装位置

5)操作系统组设置

6)配置root脚本自动执行

7)条件检查通过后,选择开始安装

8)运行root脚本

9)安装完成

设置Oracle监听

命令行输入以下命令

[oracle@hadoop2 ~]$ netca

选择添加

设置监听名,默认即可

选择协议,默认即可

设置端口号,默认即可

配置更多监听,默认

完成

创建数据库

进入创建页面

[oracle@hadoop2 ~]$ dbca

选择创建数据库

选择高级配置

选择数据仓库

将图中所示对勾去掉

存储选项

快速恢复选项

选择监听程序

如图设置

使用自动内存管理

管理选项,默认

设置统一密码

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

概要,点击完成

等待安装

简单使用

开启,关闭监听服务

开启服务:

[oracle@hadoop102 ~]$ lsnrctl start

关闭服务:

[oracle@hadoop102 ~]$ lsnrctl stop

进入命令行

[oracle@hadoop102 ~]$ sqlplus

SQL*Plus: Release 19.0.0.0.0 - Production on Fri Sep 3 01:44:30 2021

Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle. All rights reserved.

Enter user-name: system

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

Connected to:

Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production

Version 19.3.0.0.0

SQL>

创建用户并授权

SQL> create user daydayup identified by 000000;

User created.

SQL> grant create session,create table,create view,create sequence,unlimited tablespace to daydayup;

Grant succeeded.

进入daydayup账号,创建表

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 daydayup

Enter password:

Oracle与MySQL的SQL区别

类型

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

×

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": "daydayup"

}

},

"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": "daydayup"

}

},

"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结果

标签:name,daydayup,入门教程,job,DataX,oracle,hadoop102,datax
From: https://www.cnblogs.com/kkk247843405/p/16920511.html

相关文章

  • DataX入门教程2
    DataX入门教程2接DataX入门教程1MongoDB什么是MongoDBMongoDB是由C++语言编写的,是一个基于分布式文件存储的开源数据库系统。MongoDB旨在为WEB应用提供可扩展的高性......
  • 3.2 Docker最新入门教程-Docker入门-将应用程序容器化
    3.2将应用程序容器化对于本指南的其余部分,您将使用一个在Node.js中运行的简单待办事项列表管理器。如果您不熟悉Node.js,请不要担心。本指南不需要JavaScript经验。......
  • 3.1 Docker最新入门教程-Docker入门-概述
    3.1概述欢迎!我们很高兴您想学习Docker。本指南包含有关如何开始使用Docker的分步说明。您将在本指南中学到和做的一些事情是:构建并运行镜像作为容器使用DockerHub共......
  • 【入门教程】tmux精简教程
    Tmux是一个linux下的服务端会话管理工具,可以持久化服务端的session,非常适合用命令行管理服务器的情况。【安装】Ubuntu或Debian$sudoapt-getinstalltmuxCentOS......
  • 3.1 Docker最新入门教程-Docker入门-概述
    3.1概述欢迎!我们很高兴您想学习Docker。本指南包含有关如何开始使用Docker的分步说明。您将在本指南中学到和做的一些事情是:构建并运行镜像作为容器使用DockerH......
  • 2、Docker最新入门教程-Docker安装
    1.1Dockerforlinuxcentos7安装Docker1.1.1安装前必读在安装Docker之前,先说一下配置,我这里是Centos7Linux内核:官方建议3.10以上,3.8以上貌似也可。注意:本文的......
  • 1、Docker最新入门教程-Docker概述
    1.Docker概述Docker是一个用于开发、运输和运行应用程序的开放平台。Docker使您能够将应用程序与基础架构分开,以便您可以快速交付软件。使用Docker,您可以像管理应用程......
  • python零基础入门教程(非常详细),从零基础入门到精通,看完这一篇就够了
    前言本文罗列了了python零基础入门到精通的详细教程,内容均以知识目录的形式展开。第一章:python基础之markdownTypora软件下载Typora基本使用Typora补充说明编程与编......
  • golang分层测试之http接口测试入门教程
    前言前几话主要讲解关于使用golang进行单元测试,在单元测试的上一层就是接口测试,本节主要讲使用golang进行接口测试,其中主要以http协议的接口测试来讲解golang中的http请......
  • 【入门教程】常用汇编指令整理
    X86常用的汇编指令 一、寄存器在X86指令集中寄存器分为四类:通用寄存器、指令指针寄存器、段寄存器、标志寄存器。数据寄存器EAX(Accumulator) 累加EBX(Base) 基......