DataX与DataX-Web安装与使用

DataX

  1. github地址:DataX/introduction.md at master · alibaba/DataX · GitHub

环境准备

  1. Linux环境系统

  2. JDK(1.8及其以上版本,推荐1.8)

  3. Python(2或者3都可以)

  4. Apache Maven 3.x(源码编译安装需要)

安装部署

二进制安装
  1. 下载地址:https://datax-opensource.oss-cn-hangzhou.aliyuncs.com/202308/datax.tar.gz

  2. 上传之Linux服务器指定位置

  3. 解压该文件

    tar -zxvf datax.tar.gz
    
  4. 自检文件

    python /home/opt/datax/datax/bin/datax.py /home/opt/datax/datax/job/job.json

python3支持
  1. 将bin目录下的三个py文件进行修改;

  2. print xxx 替换为 print(xxx)

  3. Exccption, e替换为 Exception as e

  4. 自检文件

    python3 /home/opt/datax/datax/bin/datax.py /home/opt/datax/datax/job/job.json
    

模版文件生成

python3 /home/opt/datax/datax/bin/datax.py -r mysqlreader -w hdfswriter > ~/home/opt/datax/datax/job/mysql2hdfs.json

自定义同步脚本

{"job": {"setting": {"speed": {"channel": 1}},"content": [{"reader": {"name": "streamreader","parameter": {"column": [{"value": "hello world","type": "string"},{"value": "datax","type": "string"},{"value": 12312312,"type": "long"}],"sliceRecordCount": 1 // 读取数据列中的重复次数}},"writer": {"name": "streamwriter","parameter": {"print": true}}}]}
}python3 /home/opt/datax/datax/bin/datax.py /home/opt/datax/datax/job/jobs/job1.json

动态传参

  • 将mysql数据同步到HDFS,多次同步的时候只是表的名字和字段不同。

  • 将mysql的数据增量同步到HDFS或者Hive中的时候,需要指定每一次同步的时间。

  • 所谓的动态传参,就是在json的同步方案中,使用类似变量的方式来定义一些可以改变的参数,在执行同步方案的时候,可以指定这些参数具体的值。

    动态传参的案例

    {
    “job”: {
    “setting”: {
    “speed”: {
    “channel”: 1
    }
    },
    “content”: [
    {
    “reader”: {
    “name”: “streamreader”,
    “parameter”: {
    “column”: [
    {“value”: “hello world”, “type”: “string”},
    {“value”: “datax”, “type”: “string”},
    {“value”: 12312312, “type”: “int”}
    ],
    “sliceRecordCount”: $TIMES // 读取数据列中的重复次数
    }
    },
    “writer”: {
    “name”: “streamwriter”,
    “parameter”: {
    “print”: true
    }
    }
    }
    ]
    }
    }

    python3 /home/opt/datax/datax/bin/datax.py -p “-DTIMES=3” /home/opt/datax/datax/job/jobs/job1.json

并发设置

  • 直接指定Channel数量

  • 通过Bps计算channel数量

  • 通过tps计算channel数量

直接指定

在同步方案的json文件中,可以设置job.setting.speed.channel来设置channel的数量,这是最直接的方式,在这种配置下,channel的Bps为默认的1MBps,即每秒传输1MB的数据。

Bps

Bps(Byte per second) 是一种非常常见的数据传输速率的表示,在DataX中,可以通过参数设置来限制总job的Bps以及单个channel的Bps,来达到限速和channel数量计算的效果。

channel = Job Bps/channel Bps

  • Job Bps: 对一个job进行整体的限速,可以通过job.setting.speed.byte进行设置

  • channel Bps: 对单个channel的限速,可以通过core.transport.channel.speed.byte进行设置

tps

tps(transcation per second)是一种很常见的数据传输速率的表示,在DataX中,可以通过参数设置来限制总Job的tps以及单个channel的tps,来达到限速和channel数量计算的效果。

channel= job tps/channel tps

优先级
  • 如果同时配置了Bps和tps限制,以下的为准。

  • 只有在Bps和tps都没有配置的时候,才会以channel数量配置为准。

stream

streamreader
参数说明

参数

描述

column

定义内存数据的所有列。由一个JSON组成,需要滴定仪数据与类型。

sliceRecordCount

每个channel中,数据重复的数量。

数据类型

在定义每一个列的数据的时候,需要指定每一列的数据类型。DataX中支持如下的数据类型:

  • Long

  • Double

  • String

  • Date

  • Boolean

  • Bytes

streamwriter
参数说明

参数

描述

print

将内存中的数据打印在控制台上。

encoding

输出数据使用的字符集,默认是UTF-8。

mysql

mysqlreader

介绍

MysqlRader插件实现了从mysql读取数据,在底层实现上,MySQLReader通过JDBC远程MySQL数据库,并执行相应的SQL数据,将数据从MySQL数据库中查询出来。

简而言之,MySQLReader通过JDBC连接器连接到远程的MySQL数据库,并根据用户配置的信息生成查询的SQL语句,然后发送到远程MySQL数据库,并将该SQL执行返回结果使用DataX自定义的数据离线拼装为抽象的数据集,并传递给下游writer处理。

对于用户配置Table、column、where的信息,MySQLReader将其拼接成SQL语句发送到MySQL数据库;对于用户配置querySQL信息,MySQLReader直接将其发送到MySQL数据库;

参数说明

参数

描述

必选

默认值

jdbcUrl

描述的是对端数据库的JDBC连接信息,使用JSON的数组描述,并支持一个库填写多个连接地址。之所以使用JSON数组描述连接信息,是因为阿里集团内部支持多个IP探测,如果配置了多个,MySQLReader可以一次探测IP的可能性,直到选择一个合法的IP。如果全部连接失败,MySQLReader报错。注意,jdbcUrl必须包含在connection配置单元中。对于阿里集团外部使用情况,JSON数组填写一个JDBC连接即可。

username

连接到数据库的用户名

password

连接到数据库的密码

table

所选取的需要同步的表。使用JSON的数组描述,因此支持多张表同时抽取。当配置为多张表时,用户自己需要保证多张表是同一个schema结构,MySQLReader不予检查表是否同一逻辑表。注意,table必须包含在connection的配置单元中。

column

所配置的表中需要同步的列名集合,使用JSON数组描述字段信息。用户使用*代表默认使用所有列配置。
支持列裁剪,即列可以挑选部分列进行导出。
支持列换序,即列可以不按照schema信息进行导出。
支持常量配置,用户需要按照MySQL语法格式。[“id”, “tabke”, “1”]

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

类型转换

MySQLReader与MySQL的类型比较

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

案例
{"job": {"setting": {"speed": {"channel": 3},"errorLimit": {"record": 0,"percentage": 0.02}},"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","username","password","age","sex","phone"],"splitPk": "username","connection": [{"table": ["admin"],"jdbcUrl": ["jdbc:mysql://192.168.42.130:3306/springboot-backend"]}]}},"writer": {"name": "streamwriter","parameter": {"print": true}}}]}
}
执行方法
python3 /home/opt/datax/datax/bin/datax.py mysql2stream.json
错误处理

1、在/dataX/plugin/reader/mysqlreader/libs中,把mysql-connector-java-5.1.34.jar包删除

rm -rf mysql-connector-java-5.1.34.jar

2、将MySQL8相关的jar包复制到该目录下

mysqlreader读取模式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

mysqlwriter

介绍

mysqlwriter插件实现了写入数据到mysql数据库的目的表的功能。在底层实现上,mysqlwriter通过JDBC连接到远程数据库,并执行相应的inster into…或者replace into…的SQL语句,将数据写入到MySQL的数据库,内部会分批次提交入库,需要数据库本身采用innodb引擎。

MySQLwriter面向ETL开发工程师,使用MySQLwriter从数仓导入数据到MySQL,同时MySQLwriter也可以作为数据迁移工具,为DBA等用户提供服务。

实现原理

MySQLwriter通过DataX框架获取Reader生成的协议数据,根据你配置的writerMode生成

  • Insert: Insert into … (当主键、唯一性索引冲突时会写不进去冲突的行)

  • replace:replace into…(没有遇到主键、唯一性索引冲突时,与insert info行为一致,冲突时会用新行替换原有行的所有字段)

  • update:Insert into… on duplicate key update…(如果 on duplicate key update的子句中要更新的值为原来的值都一样,则不更新,否则就更新)

生成上述的雨具写入数据到MySQL,处于性能考虑,采用PreparedStatement+Batch,并且设置了rewriteBatchedStatement=true,将数据缓冲到线程上下文buffer中,当buffer累计到预定阈值时,才发起写入请求。

注意

目标表所在数据库必须要主表才能写入数据;整合任务至少需要具备insert into/replace into的权限,是否需要其他权限,取决于你任务配置中在presql和postsql中指定的语句。

参数说明

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

错误处理

1、在/dataX/plugin/reader/mysqlreader/libs中,把mysql-connector-java-5.1.34.jar包删除
rm -rf mysql-connector-java-5.1.34.jar

2、将MySQL8相关的jar包复制到该目录下

案例
{"job": {"setting": {"speed": {"channel": 3}},"content": [{"reader": {"name": "mysqlreader","parameter": {"username": "root","password": "123456","column": ["id","username","password","age","sex","phone"],"splitPk": "username","connection": [{"table": ["admin"],"jdbcUrl": ["jdbc:mysql://192.168.42.130:3306/springboot-backend"]}]}},"writer": {"name": "mysqlwriter","parameter": {"username": "root","password": "123456","column": ["id","username","password","age","sex","phone"],"writeMode": "replace","splitPk": "username","connection": [{"table": ["admin_bak"],"jdbcUrl": "jdbc:mysql://192.168.42.130:3306/springboot-backend"}]}}}]}
}
执行
python3 /home/opt/datax/datax/bin/datax.py mysql2mysql.json

shell脚本

#!/bin/bash# 设置需要同步的哪一天的数据
# 一般情况下,当天产生的数据,会在第二天的凌晨增量导入到数据仓库中
dt=`date -d yesterday +"%Y-%m-%d"`# 提取时间分量
year=${dt:0:4}
month=${dt:5:2}#设置DataX的路径
DATAX_HOME=/home/opt/datax/datax#设置jobs的路径
JOBS_HOME=/home/opt/datax/datax/job/jobs# 增量同步数据
python3 $DATAX_HOME/bin/datax.py -p "-Ddate=$dt" $JOBS_HOME/mysql2mysql.json

DataX | MySQL多表全量同步和多表定时增量同步_datax同步多张表-CSDN博客

crond服务的安装与管理

  1. 安装crond服务工具

    yum install crontabs #安装,注意包名

  2. 开启crond服务

    sudo systemctl start crond #立即启动 crond 服务
    sudo systemctl enable crond #设置 crond 服务开机自启
    sudo systemctl enable --now crond #设置开机自启同时启动

  3. 关闭crond服务

    sudo systemctl stop crond #立即停止 crond 服务
    sudo systemctl disable crond #取消 crond 服务的开机自启
    sudo systemctl disable --now crond #取消开机自启同时停止

  4. 查看crond服务的状态

    sudo systemctl status crond #该命令会显示 crond 服务当前的运行状态以及是否已启用开机自启

  5. 重启crond服务

    sudo systemctl restart crond #重启 crond 服务

配置定时任务脚本

  1. 添加定时器,脚本授权

    chmod 777 shell1.sh
    
  2. 编辑定时器

    */1 * * * * /home/opt/datax/datax/job/shells/shell1.sh > /home/opt/datax/datax/job/shells/log.log
    
  3. 查看crontab日志

    tail -f /var/log/cron
    或
    tail -f /var/spool/mail/root
    
  4. 修改shell1.sh脚本

    #!/bin/bash
    . /etc/profile
    # 设置需要同步的哪一天的数据
    # 一般情况下,当天产生的数据,会在第二天的凌晨增量导入到数据仓库中
    dt=`date -d yesterday +"%Y-%m-%d"`# 提取时间分量
    year=${dt:0:4}
    month=${dt:5:2}#设置DataX的路径
    DATAX_HOME=/home/opt/datax/datax#设置jobs的路径
    JOBS_HOME=/home/opt/datax/datax/job/jobs# 增量同步数据
    python3 $DATAX_HOME/bin/datax.py -p "-Ddate=$dt" $JOBS_HOME/mysql2mysql.json
    

DataX-Web

1、datax-web介绍

1.1、datax-web是什么

项目地址: GitHub - WeiYe-Jing/datax-web: DataX集成可视化页面,选择数据源即可一键生成数据同步任务,支持RDBMS、Hive、HBase、ClickHouse、MongoDB等数据源,批量创建RDBMS数据同步任务,集成开源调度系统,支持分布式、增量同步数据、实时查看运行日志、监控执行器资源、KILL运行进程、数据源信息加密等。

datax-web是一个在DataX之上开发的分布式数据同步工具,提供简单易用的操作界面,降低该用户使用DataX的学习成本,缩短任务配置事件,避免配置过程中出错。用户可以通过页面选择数据源,即可创建数据同步任务。支持RDBMS、Hive、HBase、ClickHouse、MongDB等数据源。RDBMS数据源可以批量创建数据同步任务,支持实时查看同步进度及日志,并提供终止功能同步,集成二次开发xxl-job,可根据时间、自增主键增量同步数据。

任务“执行器”支持集群部署,支持执行器多节点路由策略选择,支持超时控制、失败重试、失败警告、任务依赖、执行器CPU、内存、负载的监控等等。

1.2、datax-web架构

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2、datax-web部署

2.1、环境要求

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

2.2、按照
2.2.1、二进制安装

直接将安装包下载,解压安装到指定路径

https://github.com/WeiYe-Jing/datax-web/archive/refs/tags/v-2.1.2.tar.gz

tar -zxvf datax-web-2.1.2.tar.gz

在/bin下执行install.sh文件

sh install.sh

如果不想交互式执行,直接执行

sh install.sh -force

修改数据库配置

/datax-web-2.1.2/modules/datax-admin/conf/bootstrap.properties

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

配置

安装完成之后,在项目目录: /datax-web-2.1.2/modules/datax-admin/bin/env.properties 配置邮件服务(可跳过)

# mail account
MAIL_USERNAME=""
MAIL_PASSWORD=""

此文件中包括一些默认配置参数,例如:server.port,具体查看文件。

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

在项目目录下/datax-web-2.1.2/modules/datax-executor/bin/env.properties执行PYTHON_PATH的路径

# environment variables#JAVA_HOME=""SERVICE_LOG_PATH=${BIN}/../logs
SERVICE_CONF_PATH=${BIN}/../conf
DATA_PATH=${BIN}/../data## datax json文件存放位置
JSON_PATH=${BIN}/../json## executor_port
EXECUTOR_PORT=9999## 保持和datax-admin端口一致
DATAX_ADMIN_PORT=## PYTHON脚本执行位置
#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=/home/opt/datax/datax/bin/datax.py## dataxweb 服务端口
SERVER_PORT=9504#PID_FILE_PATH=${BIN}/service.pid#debug 远程调试端口
#REMOTE_DEBUG_SWITCH=true
#REMOTE_DEBUG_PORT=7004

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

启动

一键启动所有服务

sh /home/opt/datax/datax-web-2.1.2/bin/start-all.sh

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

启动成功后会显示两个进程

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

一键停用所有服务

sh /home/opt/datax/datax-web-2.1.2/bin/stop-all.sh

WebUI

部署完成后,在浏览器输入http://ip:9527/index.html就可以访问对应的直接面(IP为datax-admin部署所在的服务器IP,port为datax-admin指定的运行端口)

输入用户名 admin 密码 123456就可以直接访问系统

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/64844.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电子应用设计方案69:智能护眼台灯系统设计

智能护眼台灯系统设计 一、引言 随着人们对眼睛健康的重视,智能护眼台灯成为了越来越多人的选择。本设计方案旨在打造一款功能丰富、护眼效果显著且智能便捷的台灯系统。 二、系统概述 1. 系统目标 - 提供无频闪、无蓝光危害的均匀柔和光线,保护眼睛。…

cesium 常见的 entity 列表

Cesium 是一个用于创建3D地球和地图的开源JavaScript库。它允许开发者在Web浏览器中展示地理空间数据,并且支持多种类型的空间实体(entities)。 Entities是Cesium中用于表示地面上或空中的对象的一种高层次、易于使用的接口。它们可以用来表示点、线、多边形、模型等,并且可…

在Visual Studio 2022中配置C++计算机视觉库Opencv

本文主要介绍下载OpenCV库以及在Visual Studio 2022中配置、编译C计算机视觉库OpenCv的方法 1.Opencv库安装 ​ 首先,我们需要安装OpenCV库,作为一个开源库,我们可以直接在其官网下载Releases - OpenCV,如果官网下载过慢&#x…

【Java基础面试题035】什么是Java泛型的上下界限定符?

回答重点 Java泛型的上下界限定符用于对泛型类型参数进行范围限制,主要有上界限定符和下届限定符。 1)上界限定符 (? extends T): 定义:通配符?的类型必须是T或者T的子类,保证集合元素一定是T或者T的子类作用&…

WPF+MVVM案例实战与特效(四十七)-实现一个路径绘图的自定义按钮控件

文章目录 1、案例效果2、创建自定义 PathButton 控件1、定义 PathButton 类2、设计样式与控件模板3、代码解释3、控件使用4、直接在 XAML 中绑定命令3、源代码获取4、总结1、案例效果 2、创建自定义 PathButton 控件 1、定义 PathButton 类 首先,我们需要创建一个新的类 Pat…

共模电感的工作原理

共模电感也称为共模扼流线圈,是一种抑制共模干扰的器件,它是由两个尺寸相同,匝数相同的线圈对称地绕制在同一个铁氧体环形磁芯上,形成的一个四端器件。当共模电流流过共模电感时,磁芯上的两个线圈产生的磁通相互叠加&a…

外连接转AntiJoin的应用场景与限制条件 | OceanBase SQL 查询改写系列

在《SQL 改写系列:外连接转内连接的常见场景与错误》一文中,我们了解到谓词条件可以过滤掉连接结果中的 null 情形的,将外连接转化为内连接的做法是可行的,正如图1中路径(a)所示。此时,敏锐的你或许会进一步思考&#…

二、windows环境下vscode使用wsl教程

本篇文件介绍了在windows系统使用vscode如何连接使用wsl,方便wsl在vscode进行开发。 1、插件安装 双击桌面vscode,按快捷键CtrlShiftX打开插件市场,搜索【WSL】点击安装即可。 2、开启WSL的linux子系统 点击左下方图标【Open a Remote Win…

因子问题(真EASY)

描述 任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。 输入描述 包括两个整数N、M。N不超过1,000,000。 输出描述 输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1 用例…

2024 高频 Java 面试合集整理 (1000 道附答案解析)

2024 年马上就快要过去了,总结了上半年各类 Java 面试题,初中级和中高级都有,包括 Java 基础,JVM 知识面试题库,开源框架面试题库,操作系统面试题库,多线程面试题库,Tcp 面试题库&am…

(2024.12)Ubuntu20.04安装openMVS<成功>.colmap<成功>和openMVG<失败>记录

一、安装openMVS 官方文档:https://github.com/cdcseacave/openMVS/wiki/Building sudo apt-get -y install git mercurial cmake libpng-dev libjpeg-dev libtiff-dev libglu1-mesa-dev eigen git clone https://gitlab.com/libeigen/eigen --branch 3.4 mkdi…

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能,确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW,可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法,并结合硬件选型提供实…

【恶意软件检测】一种基于API语义提取的Android恶意软件检测方法(期刊等级:CCF-B、Q2)

一种基于API语义提取的Android恶意软件检测方法 A novel Android malware detection method with API semantics extraction 摘要 由于Android框架和恶意软件的持续演变,使用过时应用程序训练的传统恶意软件检测方法在有效识别复杂演化的恶意软件方面已显不足。为…

FLTK - build fltk-1.1.10 on vs2019

文章目录 FLTK - build fltk-1.1.10 on vs2019概述笔记buildtest测试程序运行 END FLTK - build fltk-1.1.10 on vs2019 概述 看书上用到了fltk-1.1.10, 用vs2019试试能否正常编译使用? 笔记 build 从官网下载fltk-1.1.10-source.tar.bz2 用7zip解开 fltk-1.1.10-source.…

业财融合,决策有据:工程项目管理的财务新视角

在工程项目管理领域,业财融合正开启全新篇章。传统模式下,业务与财务各自为政,常导致信息滞后、决策盲目。如今,借助先进理念与技术,二者紧密相连。 在项目规划阶段,财务部门依据业务需求与市场趋势&#…

汽车IVI中控开发入门及进阶(44):杰发科智能座舱芯片

概述: 杰发科技自成立以来,一直专注于汽车电子芯片及相关系统的研发与设计。 产品布局: 合作伙伴: 杰发科技不断提升产品设计能力和产品工艺,确保产品达 到更高的质量标准。目前杰发科技已通过ISO9001质 量管理体系与CMMIL3认证。 杰发科技长期合作的供应商(芯片代工厂、…

算法专题——双指针

目录 前言 1、移动0 2、复写零 3、快乐数 4、盛最多水的容器 5、有效三⻆形的个数 6、和为s的两个数字 7、三数之和 8、四数之和 前言 本文主要介绍一些用到双指针的常见算法题。 1、移动0 链接:https://leetcode.cn/problems/move-zeroes/description/…

人工智能与云计算的结合:如何释放数据的无限潜力?

引言:数据时代的契机 在当今数字化社会,数据已成为推动经济与技术发展的核心资源,被誉为“21世纪的石油”。从个人消费行为到企业运营决策,再到城市管理与国家治理,每个环节都在生成和积累海量数据。然而,数…

【Chrome Extension】一、CSDN计时扩展设计

【Chrome Extension】一、CSDN计时扩展设计 重点内容内容脚本 content_scripts 文件目录1、整体目录2、manifest.json3、scripts/content.js4、css/content.css 重点内容 内容脚本 content_scripts 1、manifest.json文件配置 {"manifest_version": 3, # *依赖Chro…

javaEE-线程的常用方法-4

目录 一.start():启动一个线程 调用start()方法 start()方法只能调用一次: java中的API: start()和run()的区别: 二.中断一个线程 中断线程方法1:引入标志位 中断线程方法2:调⽤interrupt()⽅法 抛出的异常: 三.等待一个线程 join() 四、获取线程引用 五…