当前位置:   article > 正文

DataX + xxl-job_datax xxljob

datax xxljob

 

目录

 

1、xxl-job

1.1 部署

1.2 集群部署

1.3 执行器编写-java自动

1.4 执行器编写-脚本变成

1.5 父子任务

1.6 二次开发

2、datax 

3、xxl-job和datax整合


1、xxl-job

1.1 部署

官网:https://www.xuxueli.com/xxl-job/ 里面由详细的讲解

我用的版本:

安装docker mysql

  1. docker pull mysql:8.0.19
  2. docker run -itd --name mysql-xxljob -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
  3. mysql -u root -h 127.0.0.1 -P3306 -p
  4. 进行授权远程连接(注意mysql 8.0跟之前的授权方式不同)

插曲:MYSQL 2059问题的解决

mysql脚本: https://gitee.com/xuxueli0323/xxl-job/tree/2.2.0/doc/db/tables_xxl_job.sql  拷贝sql放入mysql中执行。

  1. docker pull xuxueli/xxl-job-admin:2.2.0
  2. docker run -e PARAMS="--spring.datasource.url=jdbc:mysql://192.168.10.11:3306/xxl_job?Unicode=true&characterEncoding=UTF-8&useSSL=false --spring.datasource.username=root --spring.datasource.password=123456 --xxl.admin.login=false" -p 9080:8080 --name xxl-job-admin -d 6a35dd59e569

登录:http://192.168.10.11:9080/xxl-job-admin/toLogin   admin/123456

1.2 集群部署

调度中心集群部署时,几点要求和建议:

  • DB配置保持一致;
  • 集群机器时钟保持一致(单机集群忽视);
  • 建议:推荐通过nginx为调度中心集群做负载均衡,分配域名。调度中心访问、执行器回调配置、调用API服务等操作均通过该域名进行。

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

1.3 执行器编写-java自动

step1:

执行器可理解为客户端,很简单:从gitee 上下载   xxl-job-executor-samples,然后配置: 

  1. xxl.job.admin.addresses=http://192.168.10.11:9080//xxl-job-admin
  2. .......
  3. xxl.job.executor.appname=xxl-job-executor-steven

调度器中:

启动执行器,就能在调度器中看到该执行器上线了:

step2:

在执行器中写调度任务:

然后在调度器中设置:

直接就可以测试执行了。

1.4 执行器编写-脚本变成

先了解一下运行的原理:

(1)脚本任务的源码托管在调度中心,脚本逻辑在执行器运行。当触发脚本任务时,执行器会加载脚本源码在执行器机器上生成一份脚本文件,然后通过Java代码调用该脚本;并且实时将脚本输出日志写到任务日志文件中,从而在调度中心可以实时监控脚本运行情况。

(2)需要注意的是,即便你只想调度shell,执行器还是要的,可以参考xxl-job-executor-sample-springboot写一个简单的执行器。

以powershell脚本为例:

运行,在/data/applogs/xxl-job/jobhandler/gluesource路径下,看到其生成了8_1606897999000.ps1文件,打开发现就是我们编写的glue脚本:

同时运行的日志在:\data\applogs\xxl-job\jobhandler\2020-12-02 可以看到。

可以发现当前盘符下确实创建了一个D://asd

1.5 父子任务

很简单,直接上图:

1.6 二次开发

第三方系统能够进行对接口进行二次开发:

(1)老版本-仅作参考

参考:https://github.com/deane163/xxl-job/ 

(2)新版本

参考:xxl-job通过代码的方式动态添加任务,修改任务,执行任务,停止任务

但是有个问题就是,这些接口都是后台使用的,要想调用,就必须得登录才行,不登录是没有办法访问的。那怎么办?难道还要模拟登录一次,其实大可不必,因为xxl-job中已经为我们提供了一个口子,就是一个注解和一个拦截器,通过这个注解可以配置接口是否可以跳过登录进行访问。也就是我们可以把接口配置成跳过登录验证进行访问就可以了,这样我们就能不登录而进行请求 。这个注解就是 @PermissionLimit(limit = false)  ,默认是true,也就是需要做登录验证。

代码位置:

2、datax 

实现很简单

系统要求:
jdk 1.8
python 2.6.x

dataX github:https://github.com/alibaba/DataX 

启动dataX:

  1. $ cd {YOUR_DATAX_DIR_BIN}
  2. $ python datax.py ./xxx.json

mysql to es json模板:

(1)读取table-column方式:

  1. {
  2. "job": {
  3. "setting": {
  4. "speed": {
  5. "channel": 1,
  6. "record": -1,
  7. "byte": -1
  8. }
  9. },
  10. "content": [{
  11. "reader": {
  12. "name": "mysqlreader",
  13. "parameter": {
  14. "username": "root",
  15. "password": "123456",
  16. "column": [
  17. "id",
  18. "ah",
  19. "updatetime"
  20. ],
  21. "splitPk": "id",
  22. "connection": [{
  23. "table": [
  24. "yaosu_mjjd_newmodel"
  25. ],
  26. "jdbcUrl": [
  27. "jdbc:mysql://localhost:3306/data"
  28. ]
  29. }]
  30. }
  31. },
  32. "writer": {
  33. "name": "elasticsearchwriter",
  34. "parameter": {
  35. "endpoint": "http://192.1688.10:6003",
  36. "accessId": "elastic",
  37. "accessKey": "123456",
  38. "index": "mysql_aj_es",
  39. "type": "_doc",
  40. "cleanup": true,
  41. "settings": {
  42. "index": {
  43. "number_of_shards": 1,
  44. "number_of_replicas": 0
  45. }
  46. },
  47. "discovery": false,
  48. "batchSize": 1000,
  49. "splitter": ",",
  50. "column": [
  51. {"name": "id", "type": "id"},
  52. {"name": "ah", "type": "string"},
  53. {"name": "updatetime", "type": "text"}
  54. ]
  55. }
  56. }
  57. }]
  58. }
  59. }

(2)自定义sql方式

  1. {
  2. "job": {
  3. "setting": {
  4. "speed": {
  5. "channel": 1,
  6. "record": -1,
  7. "byte": -1
  8. }
  9. },
  10. "content": [{
  11. "reader": {
  12. "name": "mysqlreader",
  13. "parameter": {
  14. "username": "root",
  15. "password": "123456",
  16. "connection": [{
  17. "querySql": [
  18. "select id,title,updatetime from ss_all"
  19. ],
  20. "jdbcUrl": [
  21. "jdbc:mysql://localhost:3306/data"
  22. ]
  23. }]
  24. }
  25. },
  26. "writer": {
  27. "name": "elasticsearchwriter",
  28. "parameter": {
  29. "endpoint": "http://192.168.10.11:6003",
  30. "accessId": "elastic",
  31. "accessKey": "123456",
  32. "index": "mysql_ss_es",
  33. "type": "_doc",
  34. "cleanup": true,
  35. "settings": {
  36. "index": {
  37. "number_of_shards": 1,
  38. "number_of_replicas": 0
  39. }
  40. },
  41. "discovery": false,
  42. "batchSize": 1000,
  43. "splitter": ",",
  44. "column": [
  45. {"name": "id", "type": "id"},
  46. {"name": "title", "type": "text"},
  47. {"name": "updatetime", "type": "date", "format": "yyyy-MM-dd HH:mm:ss"}
  48. ]
  49. }
  50. }
  51. }]
  52. }
  53. }

3、xxl-job和datax整合

两种方法

(1)xxl-job 使用 GLUE IDE 调用 python datax.py ./xxx.json

(2)使用Datax的开发包,实现 Engine.entry(args); 

        参考:https://blog.csdn.net/pharos/article/details/104147381

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/159244
推荐阅读
相关标签
  

闽ICP备14008679号