Datax+DataX-Web分布式搭建

news/2024/11/15 6:47:02/

Datax+DataX-Web分布式搭建

DataX简介

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

DataX本身作为数据同步框架,将不同数据源的同步抽象为从源头数据源读取数据的Reader插件,以及向目标端写入数据的Writer插件,理论上DataX框架可以支持任意数据源类型的数据同步工作。同时DataX插件体系作为一套生态系统, 每接入一套新数据源该新加入的数据源即可实现和现有的数据源互通。

在这里插入图片描述

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

DataX 框架设计

在这里插入图片描述

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。

  • Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。
  • Writer: Writer为数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。
  • Framework:Framework用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,并发,数据转换等核心技术问题。

DataX插件体系

经过几年积累,DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。DataX目前支持数据如下:

类型数据源Reader(读)Writer(写)文档
RDBMS 关系型数据库MySQL读 、写
Oracle读 、写
OceanBase读 、写
SQLServer读 、写
PostgreSQL读 、写
DRDS读 、写
达梦读 、写
通用RDBMS(支持所有关系型数据库)读 、写
阿里云数仓数据存储ODPS读 、写
ADS
OSS读 、写
OCS读 、写
NoSQL数据存储OTS读 、写
Hbase0.94读 、写
Hbase1.1读 、写
MongoDB读 、写
Hive读 、写
无结构化数据存储TxtFile读 、写
FTP读 、写
HDFS读 、写
Elasticsearch

DataX Framework提供了简单的接口与插件交互,提供简单的插件接入机制,只需要任意加上一种插件,就能无缝对接其他数据源。详情请看:DataX数据源指南

DataX核心架构

DataX 开源版本支持单机多线程模式完成同步作业运行,本小节按一个DataX作业生命周期的时序图,从整体架构设计非常简要说明DataX各个模块相互关系。

在这里插入图片描述

核心模块介绍:

  1. DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
  2. DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
  5. DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0

DataX调度流程:

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

  1. DataXJob根据分库分表切分成了100个Task。
  2. 根据20个并发,DataX计算共需要分配4个TaskGroup。
  3. 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

DataX调度流程:

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

  1. DataXJob根据分库分表切分成了100个Task。
  2. 根据20个并发,DataX计算共需要分配4个TaskGroup。
  3. 4个TaskGroup平分切分好的100个Task,每一个TaskGroup负责以5个并发共计运行25个Task。

DataX单机部署

系统需求

  • Linux
  • JDK(1.8以上,推荐1.8)
  • Python(2或3都可以)
  • Apache Maven 3.x (Compile DataX)

安装部署

(1)、下载DataX源码:

wget https://github.com/alibaba/DataX/archive/refs/tags/datax_v202210.tar.gz

(2)、通过maven打包:

cd DataX-datax_v202210
mvn -U clean package assembly:assembly -Dmaven.test.skip=true

编译报错:

在这里插入图片描述

手动下载

# 搜索缺失jar包
https://mvnrepository.com/artifact/org.pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde
# 无法下载
# Google 搜到 https://repository.mapr.com/nexus/content/groups/mapr-public/conjars/org/pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde/wget https://repository.mapr.com/nexus/content/groups/mapr-public/conjars/org/pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde/pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar
wget https://repository.mapr.com/nexus/content/groups/mapr-public/conjars/org/pentaho/pentaho-aggdesigner-algorithm/5.1.5-jhyde/pentaho-aggdesigner-algorithm-5.1.5-jhyde.pom
# 或参照 https://blog.csdn.net/AlierSnow/article/details/125105548# 手动安装到本地库
mvn install:install-file -Dfile=./pentaho-aggdesigner-algorithm-5.1.5-jhyde.jar -DgroupId=org.pentaho -DartifactId=pentaho-aggdesigner-algorithm -Dversion=5.1.5-jhyde -Dpackaging=jar
# 搜索缺失jar包
https://mvnrepository.com/artifact/eigenbase/eigenbase-properties/1.1.4
# 无法下载
# Google 搜到 https://archiva.wikimedia.org/repository/mirrored/eigenbase/eigenbase-properties/1.1.4/wget https://archiva.wikimedia.org/repository/mirrored/eigenbase/eigenbase-properties/1.1.4/eigenbase-properties-1.1.4.jar
wget https://archiva.wikimedia.org/repository/mirrored/eigenbase/eigenbase-properties/1.1.4/eigenbase-properties-1.1.4.pom# 手动安装到本地库
mvn install:install-file -DgroupId=eigenbase -DartifactId=eigenbase-properties -Dversion=1.1.4 -Dpackaging=jar -Dfile=eigenbase-properties-1.1.4.jar

编译成功

ls ./target/datax/datax/
# 结构如下
bin		conf		job		lib		log		log_perf	plugin		script		tmp

配置示例

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

  • 第一步、创建作业的配置文件(json格式)

    可以通过命令查看配置模板: python datax.py -r {YOUR_READER} -w {YOUR_WRITER}

    cd ./target/datax/datax/bin
    vim stream2stream.json
    

    根据模板配置json如下:

    # 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": 5}}}
    }
    
  • 第二步:启动DataX

    python datax.py ./stream2stream.json 
    

    同步结束,显示日志如下:

在这里插入图片描述

datax编译成功。

DataX-Web简介

系统需求

1、datax:datax-web的核心资源包
2、jdk(jdk版本建议1.8.201以上)
3、Maven(编译工具)
4、python (推荐python 2.7, python 3需要修改datax相关配置)
5、tomcat (可不装)
6、mysql 5.7 或者8 (用于存放datax-web相关用户信息以及任务信息)

安装部署

基础环境准备

# 测试是否安装
java -version
mvn -v
python --version

在这里插入图片描述

安装mysql5.7

# 这里使用docker安装
docker run --name ainns-mysql -e MYSQL_ROOT_PASSWORD=wntime*8 -d -v /tmp/mysql-dir:/var/lib/mysql -p 3306:3306 mysql:5.7.42-oracle --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_cidocker exec -it ainns-mysql /bin/bash
# 配置mysql
mysql -uroot -p;
use mysql;
select host, user, authentication_string, plugin from user;
GRANT ALL ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;

安装datax

# data 安装路径 ~/Programs/datax/
cd ~/Programs/datax/
python ./bin/datax.py ./job/job.json# 配置环境变量
vim ~/.bashrc
#set datax environment
export DATAX_HOME=/home/WNTime/Programs/datax
export PATH=$PATH:$DATAX_HOME/bin

如下图所示,表示datax安装成功

在这里插入图片描述

安装datax-web

tar -zxf ~/Downloads/datax-web-v-2.1.2.tar.gz
cd datax-web-v-2.1.2

初始化数据库

# 找到 bin/db/datax_web.sql 文件,进行初始化

打包程序

mvn clean install

在./build/文件夹中可以找到打包好的文件

测试运行

cd ./build/
tar -zxf datax-web-2.1.2.tar.gzcd datax-web-2.1.2/
./bin/install.sh #按照提示安装

安装后效果

在这里插入图片描述

修改admin配置

vim ./modules/datax-admin/conf/bootstrap.properties#Database
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=wntime*8
DB_DATABASE=datax_web

环境变量配置文件

vim ./modules/datax-admin/bin/env.properties# environment variables#JAVA_HOME=""WEB_LOG_PATH=${BIN}/../logs
WEB_CONF_PATH=${BIN}/../confDATA_PATH=${BIN}/../data
SERVER_PORT=9527#PID_FILE_PATH=${BIN}/dataxadmin.pid# mail account
MAIL_USERNAME=""
MAIL_PASSWORD=""#debug
#REMOTE_DEBUG_SWITCH=true
#REMOTE_DEBUG_PORT=7003

启动admin

./bin/start.sh -m datax-admin

在这里插入图片描述

修改executor

环境变量配置文件

vim ./modules/datax-executor/bin/env.properties# 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=9527## PYTHON脚本执行位置
#PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=${BIN}/../python## dataxweb 服务端口
SERVER_PORT=9504#PID_FILE_PATH=${BIN}/service.pid#debug 远程调试端口
#REMOTE_DEBUG_SWITCH=true
#REMOTE_DEBUG_PORT=7004

启动executor

./bin/start.sh -m datax-executor

在这里插入图片描述

分布式安装

for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"ssh ubuntu@10.10.10.$i 'source /etc/profile; \java -version; \mvn -v; \python --version;';
done;

配置maven

for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"scp ~/Downloads/apache-maven-3.6.3.tar.gz ubuntu@10.10.10.$i:~/;ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \#sudo rm -f /etc/profile.d/Z99-wntime-env-config.sh; \sudo touch /etc/profile.d/Z99-wntime-env-config.sh; \sudo tar -zxf ~/apache-maven-3.6.3.tar.gz -C /opt/software/;';# config envrm -rf /tmp/"10.10.10.$i"/;mkdir -p /tmp/"10.10.10.$i"/;scp ubuntu@10.10.10.$i:/etc/profile.d/Z99-wntime-env-config.sh /tmp/"10.10.10.$i"/Z99-wntime-env-config.sh;sudo cat>>/tmp/"10.10.10.$i"/Z99-wntime-env-config.sh<<EOF# MVN_HOME
export MVN_HOME=/opt/software/apache-maven-3.6.3
export PATH=\$PATH:\$MVN_HOME/binEOFcat /tmp/10.10.10.$i/Z99-wntime-env-config.sh;scp /tmp/10.10.10.$i/Z99-wntime-env-config.sh ubuntu@10.10.10.$i:~/Z99-wntime-env-config.sh;ssh ubuntu@10.10.10.$i 'sudo mv ~/Z99-wntime-env-config.sh /etc/profile.d/Z99-wntime-env-config.sh; \sudo chmod +x /etc/profile.d/Z99-wntime-env-config.sh; \source /etc/profile; \echo $MVN_HOME;'
done;

安装python

for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"ssh ubuntu@10.10.10.$i 'sudo apt install python2; \source /etc/profile; \java -version; \mvn -v; \python --version;';
done;

安装datax

for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"scp ~/Downloads/datax_v202210.tar.gz ubuntu@10.10.10.$i:~/;ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \#sudo rm -f /etc/profile.d/Z99-wntime-env-config.sh; \sudo touch /etc/profile.d/Z99-wntime-env-config.sh; \sudo tar -zxf ~/datax_v202210.tar.gz -C /opt/software/; \sudo mv /opt/software/datax /opt/software/datax_v202210';# config envrm -rf /tmp/"10.10.10.$i"/;mkdir -p /tmp/"10.10.10.$i"/;scp ubuntu@10.10.10.$i:/etc/profile.d/Z99-wntime-env-config.sh /tmp/"10.10.10.$i"/Z99-wntime-env-config.sh;sudo cat>>/tmp/"10.10.10.$i"/Z99-wntime-env-config.sh<<EOF# MVN_HOME
export DATAX_HOME=/opt/software/datax_v202210
export PATH=\$PATH:\$DATAX_HOME/binEOFcat /tmp/10.10.10.$i/Z99-wntime-env-config.sh;scp /tmp/10.10.10.$i/Z99-wntime-env-config.sh ubuntu@10.10.10.$i:~/Z99-wntime-env-config.sh;ssh ubuntu@10.10.10.$i 'sudo mv ~/Z99-wntime-env-config.sh /etc/profile.d/Z99-wntime-env-config.sh; \sudo chmod +x /etc/profile.d/Z99-wntime-env-config.sh; \source /etc/profile; \echo $DATAX_HOME;'
done;

验证datax 安装

for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"ssh ubuntu@10.10.10.$i 'cd /opt/software/datax_v202210; \source /etc/profile; \python ./bin/datax.py ./job/job.json;';
done;

安装datax-web

for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"scp ~/Downloads/datax-web-2.1.2.tar.gz ubuntu@10.10.10.$i:~/;ssh ubuntu@10.10.10.$i 'sudo mkdir -p /opt/software/; \sudo rm -rf /opt/software/datax-web-2.1.2; \sudo tar -zxf ~/datax-web-2.1.2.tar.gz -C /opt/software/;';ssh ubuntu@10.10.10.$i 'cd /opt/software/datax-web-2.1.2; \sudo ./bin/install.sh --force; \sudo chown -R ubuntu:ubuntu /opt/software/datax-web-2.1.2;';
done;

启动admin

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {134..135} 151;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "sed -i 's/127.0.0.1/10.10.10.77/g' /opt/software/datax-web-2.1.2/modules/datax-admin/conf/bootstrap.properties; \
source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/start.sh -m datax-admin;";done;

停止admin

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {134..135} 151;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/stop.sh -m datax-admin;";done;

启动executor

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "sed -i 's/^DATAX_ADMIN_ADDRESSES=.*\$/DATAX_ADMIN_ADDRESSES=http:\/\/10.10.10.134:9527,http:\/\/10.10.10.135:9527,http:\/\/10.10.10.151:9527/g' /opt/software/datax-web-2.1.2/modules/datax-executor/bin/env.properties; \
source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/start.sh -m datax-executor;";done;

停止executor

# vim ./modules/datax-admin/conf/bootstrap.properties
for i in {133..135} 151 157;
doecho -e "\n********************************** Config ubuntu@10.10.10.$i **********************************\n"
ssh ubuntu@10.10.10.$i "source /etc/profile; \
cd /opt/software/datax-web-2.1.2/; \
./bin/stop.sh -m datax-executor;";done;

在这里插入图片描述


http://www.ppmy.cn/news/345282.html

相关文章

服装库存管理系统 Mybatis+Layui+MVC+JSP【完整功能介绍+实现详情+源码】

完整源码资料 地址直达&#xff1a;http://t.csdn.cn/RWsGw 前言 这是大二时候写的第一个Java项目&#xff0c;框架基本上都没有用到、而且用到的技术很老很老。只简单使用了一个Mybatis简化数据库的操作。前端框架用的还是Layui&#xff0c;贼难用。闲的无聊&#xff0c;对这…

室内全彩显示屏型号与价格范围一览:如何选择适合需求的显示屏解决方案

室内全彩显示屏作为一种重要的室内广告和信息展示媒介&#xff0c;为各种场合提供丰富多彩的视觉体验。然而&#xff0c;在众多型号中选择合适的室内全彩显示屏并了解其价格范围并不容易。本文将介绍室内全彩显示屏的几种常见型号&#xff0c;并提供相应的价格范围&#xff0c;…

全倒装COB小间距LED全彩显示屏必将推动下一代显示技术的发展。

近年来&#xff0c;Mini/Micro LED新型显示技术受到业界极大关注&#xff0c;随着物质水平的提高及互联网的快速发展&#xff0c;人类对视觉体验需求成为LED芯片尺寸和像素间距不断缩小的驱动力&#xff0c;受5G、超高清视频产业、新基建等加速发展&#xff0c;推进了超大尺寸显…

LED全彩显示屏三种基色

LED全彩显示屏通常由红色&#xff08;Red&#xff09;、绿色&#xff08;Green&#xff09;和蓝色&#xff08;Blue&#xff09;三种基色的LED灯珠组成。这种组合被称为RGB三基色系统。其实LED显示屏分为单色、双色和全彩类型。 红色&#xff08;Red&#xff09;&#xff1a;红…

会议室可以使用全彩LED显示屏吗?

回答是肯定的&#xff0c;全彩LED显示屏在会议显示方面有一定的优势&#xff0c;但也存在一些不足。一般情况下&#xff0c;如果会议室较大&#xff0c;观看距离较远&#xff0c;则适合采用全彩LED显示屏&#xff0c;因为它能最大程度地弥补分辨率低的不足。若为小会议室&#…

stm32 led屏控制卡_全彩LED显示屏出现亮线的时候怎么处理比较好呢?

全彩LED显示屏相对于液晶拼接屏而言&#xff0c;其出现亮线、屏幕小故障的概率要比液晶拼接屏大很多&#xff0c;但是&#xff0c;一般来说这些小故障很容易处理&#xff0c;所以全彩LED显示屏的拥护者还是众多的。全彩LED显示屏出现亮线的时候怎么处理比较好呢&#xff1f; 一…

STM32单片机初学6-SPI通信驱动IPS彩屏

SPI是串行外设接口&#xff08;Serial Peripheral Interface&#xff09;的缩写&#xff0c;是一种高速的&#xff0c;全双工&#xff0c;同步的通信总线&#xff0c;并且在芯片的管脚上只占用四根线。 和IIC一样&#xff0c;是单片机开发中最常用的通信方式之一。对比IIC&…

卡莱特led显示屏调试教程_|卡莱特LED显示屏校正软件(Calibration Pro)下载v3.5.0 官方版 - 欧普软件下载...

Calibration Pro是基于卡莱特同步接收卡推出的一款LED显示屏校正软件&#xff0c;主要用于整屏和单箱校正&#xff0c;包括参数设置、相机调节、拍摄照片调整、生成系数等&#xff0c;另外附件中还提供了Calibration Pro使用教程&#xff0c;需要的朋友赶快下载吧&#xff01; …