CDH5.13.0集群环境 安装部署datax-web(单机部署,log4j版本为2.16)


前言

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

任务"执行器"支持集群部署,支持执行器多节点路由策略选择,支持超时控制、失败重试、失败告警、任务依赖,执行器CPU.内存.负载的监控等等。后续还将提供更多的数据源支持、数据转换UDF、表结构同步、数据同步血缘等更为复杂的业务场景。


提示:以下是本篇文章正文内容,下面案例可供参考

一、安装环境准备

1.MySQL (5.5+) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库(本次部署mysql版本为5.7.36,参考https://blog.youkuaiyun.com/weixin_51485976/article/details/110529351) 2.JDK (1.8.0_xxx) 必选(本次部署java版本为1.8.0_131) 3.Maven (3.6.1+) 必选(本次部署maven版本为3.6.3) 4.Python (2.x) (支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下) 必选,主要用于调度执行底层DataX的启动脚本,默认的方式是以Java子进程方式执行DataX,用户可以选择以Python方式来做自定义的改造 (本次部署Python版本为2.7.5) 5.DataX 必选 (本次部署DataX 版本为3.0)

二、DataX 安装

两种安装方法:

1.DataX工具包

网址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
下载后解压至本地某个目录,进入bin目录,即可运行同步作业:

$ cd  {YOUR_DATAX_HOME}/bin
$ python datax.py {YOUR_JOB.json}

自检脚本: python {YOUR_DATAX_HOME}/bin/datax.py {YOUR_DATAX_HOME}/job/job.json

2.DataX源码包安装

网址:https://github.com/alibaba/DataX
下载DataX源码:

$ git clone git@github.com:alibaba/DataX.git

通过maven打包:

$ cd  {DataX_source_code_home}
$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true

打包成功,日志显示如下:

[INFO] BUILD SUCCESS
[INFO] -----------------------------------------------------------------
[INFO] Total time: 08:12 min
[INFO] Finished at: 2015-12-13T16:26:48+08:00
[INFO] Final Memory: 133M/960M
[INFO] -----------------------------------------------------------------

打包成功后的DataX包位于 {DataX_source_code_home}/target/datax/datax/ ,结构如下:

$ cd  {DataX_source_code_home}
$ 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  {YOUR_DATAX_HOME}/bin
$  python datax.py -r streamreader -w streamwriter
DataX (UNKNOWN_DATAX_VERSION), From Alibaba !
Copyright (C) 2010-2015, 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": ""
            }
        }
    }
}

根据模板配置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

$ cd {YOUR_DATAX_DIR_BIN}
$ python datax.py ./stream2stream.json 

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

...
2015-12-17 11:20:25.263 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2015-12-17 11:20:15
任务结束时刻                    : 2015-12-17 11:20:25
任务总计耗时                    :                 10s
任务平均流量                    :              205B/s
记录写入速度                    :              5rec/s
读出记录总数                    :                  50
读写失败总数                    :                   0

三、DataX-WEB 安装部署

1.IDEA编译打包(由于集群为CDH5.13.0,为了版本适配自己编译打包)

下载链接:https://pan.baidu.com/s/10P_52oU4Pt7AxW4kPWCoKg?pwd=data
提取码:data
备注:官方提供的版本tar版本包
https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg 提取码:cpsk

2.解压安装包

在选定的安装目录,解压安装包

[root@cdh01 soft]# tar -zxvf datax-web-2.1.2.tar.gz -C /data/

3.登录msyql建库

为接下来一键安装部署准备,这里我建的库是dataxweb(自己定义就好,前后保持一致)

mysql> create database dataxweb;

4.执行一键安装脚本

进入解压后的目录,找到bin目录下面的install.sh文件,如果选择交互式的安装,则直接执行

[root@cdh01 bin]# ./install.sh 

然后按照提示操作即可。包含了数据库初始化,如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:

Scan out mysql command, so begin to initalize the database
Do you want to initalize database with sql: [{INSTALL_PATH}/bin/db/datax-web.sql]? (Y/N)y
Please input the db host(default: 127.0.0.1): 
Please input the db port(default: 3306): 
Please input the db username(default: root): 
Please input the db password(default: ): 
Please input the db name(default: dataxweb)

按照提示输入数据库地址,端口号,用户名,密码以及数据库名称,大部分情况下即可快速完成初始化。 如果服务上并没有安装mysql命令,则可以取用目录下/bin/db/datax-web.sql脚本去手动执行,完成后修改相关配置文件

vim /data/datax-web-2.1.2/modules/datax-admin/conf/bootstrap.properties
#Database
#DB_HOST=
#DB_PORT=
#DB_USERNAME=
#DB_PASSWORD=
#DB_DATABASE=

按照具体情况配置对应的值即可。
不建议执行下面的

./bin/install.sh --force

在交互模式下,对各个模块的package压缩包的解压以及configure配置脚本的调用,都会请求用户确认,可根据提示查看是否安装成功,如果没有安装成功,可以重复尝试; 如果不想使用交互模式,跳过确认过程,则执行以下命令安装

./bin/install.sh --force

4.其他配置

4.1邮件服务

在项目目录:/data/datax-web-2.1.2/modules/datax-admin/bin/env.properties 配置邮件服务(可跳过)

MAIL_USERNAME=""
MAIL_PASSWORD=""

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

4.2指定PYTHON_PATH的路径

vim /data/datax-web-2.1.2/modules/datax-executor/bin/env.properties

### 执行datax的python脚本地址
PYTHON_PATH=/data/datax/bin/datax.py

### 保持和datax-admin服务的端口一致;默认是9527,如果没改datax-admin的端口,可以忽略
DATAX_ADMIN_PORT=

此文件中包括一些默认配置参数,例如:executor.port,json.path,data.path等,具体请查看文件。

5.启动服务

5.1一键启动所有服务

[root@cdh01 datax-web-2.1.2]# cd /data/datax-web-2.1.2

[root@cdh01 datax-web-2.1.2]# ./bin/start-all.sh

中途可能发生部分模块启动失败或者卡住,可以退出重复执行,如果需要改变某一模块服务端口号,则:

vi ./modules/{module_name}/bin/env.properties

找到SERVER_PORT配置项,改变它的值即可。 当然也可以单一地启动某一模块服务:

./bin/start.sh -m {module_name}

module_name可以为datax-admin或datax-executor

5.2一键停止所有服务

[root@cdh01 datax-web-2.1.2]# cd /data/datax-web-2.1.2
[root@cdh01 datax-web-2.1.2]# ./bin/stop-all.sh

当然也可以单一地停止某一模块服务:

./bin/stop.sh -m {module_name}

module_name可以为datax-admin或datax-executor

5.3查看服务(注意!注意!)

在Linux环境下使用JPS命令,查看是否出现DataXAdminApplication和DataXExecutorApplication进程,如果存在这表示项目运行成功

如果项目启动失败,请检查启动日志:
modules/datax-admin/bin/console.out
或者
modules/datax-executor/bin/console.out

ips: 脚本使用的都是bash指令集,如若使用sh调用脚本,可能会有未知的错误

四、DataX-WEB 运行

1.前端界面

部署完成后,在浏览器中输入 http://ip:port/index.html 就可以访问对应的主界面(ip为datax-admin部署所在服务器ip,port为为datax-admin 指定的运行端口9527)
在这里插入图片描述

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

2.datax-web API

datax-web部署成功后,可以了解datax-web API相关内容,网址: http://ip:port/doc.html
在这里插入图片描述

五、DataX-WEB 运行日志

部署完成之后,在modules/对应的项目/data/applogs下(用户也可以自己指定日志,修改application.yml 中的logpath地址即可),用户可以根据此日志跟踪项目实际启动情况

如果执行器启动比admin快,执行器会连接失败,日志报"拒绝连接"的错误,一般是先启动admin,再启动executor,30秒之后会重连,如果成功请忽略这个异常。

六、DataX-WEB 实操

1.查看执行器

查看web界面是否有注册成功的执行器,另外执行器可以根据需要改名称。
在这里插入图片描述

2.创建项目

在这里插入图片描述

在这里插入图片描述

3.创建任务模板

3.1查看服务选择执行器:已成功注册的执行器(可以手动注册)

在这里插入图片描述

3.2路由策略:当执行器集群部署时,提供丰富的路由策略,包括:

FIRST(第一个):固定选择第一个机器;
LAST(最后一个):固定选择最后一个机器;
ROUND(轮询):依次分配任务;
RANDOM(随机):随机选择在线的机器;
CONSISTENT_HASH(一致性HASH):每个任务按照Hash算法固定选择某一台机器,且所有任务均匀散列在不同机器上。
LEAST_FREQUENTLY_USED(最不经常使用):使用频率最低的机器优先被选举;
LEAST_RECENTLY_USED(最近最久未使用):最久为使用的机器优先被选举;
FAILOVER(故障转移):按照顺序依次进行心跳检测,第一个心跳检测成功的机器选定为目标执行器并发起调度;
BUSYOVER(忙碌转移):按照顺序依次进行空闲检测,第一个空闲检测成功的机器选定为目标执行器并发起调度;
参考:https://www.jianshu.com/p/fa7186bea84b
阻塞处理策略:调度过于密集执行器来不及处理时的处理策略;
- 单机串行:调度请求进入单机执行器后,调度请求进入FIFO队列并以串行方式运行;
- 丢弃后续调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,本次请求将会被丢弃并标记为失败;
- 覆盖之前调度:调度请求进入单机执行器后,发现执行器存在运行的调度任务,将会终止运行中的调度任务并清空队列,然后运行本地调度任务;
增量增新建议将阻塞策略设置为丢弃后续调度或者单机串行
设置单机串行时应该注意合理设置重试次数(失败重试的次数*每次执行时间<任务的调度周期),重试的次数如果设置的过多会导致数据重复,例如任务30秒执行一次,每次执行时间需要20秒,设置重试三次,如果任务失败了,第一个重试的时间段为1577755680-1577756680,重试任务没结束,新任务又开启,那新任务的时间段会是1577755680-1577758680

3.3任务类型

先选择DataX任务,后续配置完详细任务后可以更改

3.4其它

可以根据需求填写

在这里插入图片描述

在这里插入图片描述

4.数据源管理

根据不同数据源,配置参数。
在这里插入图片描述

5.任务构建

构建reader
在这里插入图片描述
下一步:
构建writer
在这里插入图片描述
“defaultFS”:“hdfs://ip:8020”,
“fieldDelimiter”:“^”,
“fileName”:“fileName”,
“fileType”:“text”,
“path”:“hdfs路径,
“writeMode”:“append”
下一步:
在这里插入图片描述
下一步:
点击"构建”
在这里插入图片描述
点击"选择模板"
在这里插入图片描述
点击下一步,任务到此创建成功。刷新页面,点击 任务管理 -》 任务管理
在这里插入图片描述

6.任务执行

点击 “编辑”
在这里插入图片描述

可以根据需求更改参数
在这里插入图片描述
点击 “执行一次”
在这里插入图片描述
点击 “查询日志” (如果无法查询到,尝试刷新页面,进入 日志管理 即可看到)
在这里插入图片描述

总结

1.问题一 ```bash 安装问题汇总 Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).]. - 具体错误信息为:java.sql.SQLException: Method not supported 参考链接: https://github.com/WeiYe-Jing/datax-web/issues/296 https://github.com/WeiYe-Jing/datax-web/commit/040cca6d83d0b3587bb08309fbb313edf67f8139
datax-web配置 HIVE(reader) -> MySQL(writer)
提示脏数据,报错信息为:"message":"No enum constant com.alibaba.datax.plugin.reader.hdfsreader.DFSUtil.Type.BIGINT",
是由于大家下载的datax的tar包或者datax编译打包中,hdfsreader中的DFSUtil类中  ,没有bigint类型
 private enum Type {
        STRING, LONG, BOOLEAN, DOUBLE, DATE
    }
解决方案:
1.添加bigint类型,重新打包,替换hdfsreader的jar包,
2.直接在datax-web构建的任务重,直接将bigint类型改为string类型即可    

2.问题二

发邮件配置文件/data/datax-web-2.1.2/modules/datax-admin/conf/application.yml
![在这里插入图片描述](https://img-blog.csdnimg.cn/60fcf67db4034d80bc2752e3477b0049.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5rW36L655o2h6LSd5aOz55qE6ICB5aS0,size_8,color_FFFFFF,t_70,g_se,x_16#pic_center)
配置完后,模拟任务失败发邮件,发现还是报错,报错信息如下:
```bash
2021-12-31 17:45:23,147 ERROR [datax-web, admin JobFailMonitorHelper] c.w.d.a.c.t.JobFailMonitorHelper [JobFailMonitorHelx-web, job fail alarm email send error, JobLogId:11
org.springframework.mail.MailSendException: Mail server connection failed; nested exception is javax.mail.MessagingExceptost: smtp.exmail.qq.com, port: 465, response: -1. Failed messages: javax.mail.MessagingException: Could not connect to SMt: 465, response: -1

发现这个有坑
在这里插入图片描述
mail中的smtp与socketFactory属于同级别了,socketFactory应该为smtp的下一级。果断改一下:
在这里插入图片描述
再次尝试邮成功。
在这里插入图片描述
3.curl提交post请求,代码中token设置的是7天更新一次,可以直接改源码
将"7"改为“36500”

    private static final long EXPIRATION_REMEMBER = 36500 * EXPIRATION;
curl -X POST "http://172.25.2.28:9527/api/job/trigger" -H "Authorization:Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiIxLGFkbWluIiwiaXNzIjoiYWRtaW4iLCJleHAiOjE2NDE0NDY3OTMsImlhdCI6MTY0MDg0MTk5Mywicm9sIjoiUk9MRV9BRE1JTiJ9.GQBuHpKKqm8xwwQONhjpVSphZS9ax0OEwllljrx7T3FIRdXT4G66t8yPadtCJjJkcLK32Lc7UfoSQO5uyWRy8w" -H "Request-Origion:SwaggerBootstrapUi" -H "accept:*/*" -H "Content-Type:application/json" -d "{\"executorParam\":\"\",\"jobId\":7}"

4.分隔符tab问题:
mysql2hive,如果hive表为textfile格式,分隔符为tab,创建任务时,填写分隔符为 \t ,最后构建json的时候发现 “fieldDelimiter”: “\t”,此时必须删除一个转义符,否则导出会报错。
如果通过curl http方式构建任务,直接传入 \t 即可。
5.增量同步时间传参:
1).-DlastTime=‘%s’ -DcurrentTime=‘%s’ 这个参数为已经设定好的参数,其中lastTime为增量开始时间,currentTime为当前时间,建议用这两个参数设定,并且同时传入这两个参数(如果传入一个lastTime参数,那么系统任务是你传入的上次更新后的时间)
2).增量同步自定义sql时,where条件不支持传参,只能通过json生成后,再次修改,加入参数,比如
SUBSTR(active_date,1,10) = DATE_SUB(FROM_UNIXTIME(${currentTime},‘%Y-%m-%d’),interval 1 day)

5.hdfs2hdfs
1)目标端对应的表可以创建为textfile或者orc格式,如果不指定分隔符,默认为 \u0001
2)源端数据有部分字段为空,如果目标端表为textfile格式,那么数据导入后,为空字段变为NULL;如果目标端表为orc格式,那么数据导入后,为空字段变为 \N
3)如果目标端为orc格式,有打算把为空的字段导入数据后变为NULL,需要在源端json中进行设置:
“nullFormat”: “\N”,
在这里插入图片描述
6.部署启动datax-admin报错

Exception in thread "main" java.lang.IllegalArgumentException: LoggerFactory is not a Logback LoggerContext but Logback is on the classpath. Either remove Logback or the competing implementation (class org.slf4j.impl.Log4jLoggerFactory loaded from file:/data01/datax-web-2.1.2/modules/datax-admin/lib/slf4j-log4j12-1.7.26.jar). If you are using WebLogic you will need to add 'org.slf4j' to prefer-application-packages in WEB-INF/weblogic.xml: org.slf4j.impl.Log4jLoggerFactory

将 /data01/datax-web-2.1.2/modules/datax-admin/lib/slf4j-log4j12-1.7.26.jar移除即可解决
7.从一个集群的hdfs到另外一个集群的hdfs同步数据,经常会同步失败的情况,报错信息:readLog fail, logFile not exists,但是直接选择终止任务,发现根本就无法终止。

readLog fail, logFile not exists
说明只是调度失败,并不是执行了,
调度失败可能是会因为配置的调度策略有关,比如丢弃后续调度.
这种情况下是没有日志的,因为没有运行

查看任务配置发现下面的配置没问题,JobThread内部维护了一个阻塞队列,单机串行的话,会将后续任务塞入队列中,理论上是没什么问题的
在这里插入图片描述
果断重启这个节点的executor服务,重启后,发现问题没有了。

综上 欢迎大家在评论区留言,知识共享!!!
参考网址

data-web一键部署
链接:https://gitee.com/WeiYe-Jing/datax-web#linux%E4%B8%80%E9%94%AE%E9%83%A8%E7%BD%B2
链接:https://github.com/WeiYe-Jing/datax-web
如需其他CDH版本datax-web下载,评论区留言,或者关注,给您私发链接
dataX阿里开源
链接:https://github.com/alibaba/DataX
MYSQL 5.7安装
链接:https://blog.youkuaiyun.com/weixin_51485976/article/details/110529351

DataX介绍以及优缺点分析
链接:https://zhuanlan.zhihu.com/p/81817787
DATAX踩坑路
链接:https://www.icode9.com/content-4-1085267.html
链接:https://blog.youkuaiyun.com/weixin_39939661/article/details/110659224?spm=1001.2101.3001.6650.9&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-9.essearch_pc_relevant&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Edefault-9.essearch_pc_relevant
DataX在有赞大数据平台的实践
链接:https://blog.youkuaiyun.com/weixin_33778544/article/details/91379471

关于Datax-web 以及 Datax的maven依赖仓库
链接:http://maven.aliyun.com/nexus/content/groups/public/
链接:https://maven.aliyun.com/repository/google/
链接:https://maven.aliyun.com/repository/jcenter/
链接:https://maven.aliyun.com/repository/public
链接:https://repo.maven.apache.org/maven2/
链接:https://repo1.maven.org/maven2/
链接:https://public.nexus.pentaho.org/repository/proxy-public-3rd-party-release/
链接:https://www.nuget.org/api/v2/

其他流行开源ETL工具
链接:https://github.com/DTStack/flinkx
链接:https://nightlies.apache.org/flink/flink-docs-release-1.14/zh/docs/dev/table/sqlclient/
链接:https://ververica.github.io/flink-cdc-connectors/master/
链接:http://streamxhub.com/zh/
————————————————
版权声明:本文为优快云博主「海边捡贝壳的老头」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.youkuaiyun.com/weixin_51485976/article/details/119204167

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值