安装文档

  • Datax官方文档:

    https://github.com/alibaba/DataX/blob/master/userGuid.md

  • Datax-web官方文档:

    https://github.com/WeiYe-Jing/datax-web/blob/master/userGuid.md

Datax部署

环境

  • JDK(1.8以上,推荐1.8)
  • Python(2或3都可以,linux自带py2,py3执行脚本会报错,需要修改脚本)
  • Apache Maven 3.x (Compile DataX,如果下载的是官方的压缩包[datax.tar.gz],不用安装这个,如果是在git拉的项目,打包时需要)
方式一: 直接使用官方提供的压缩包:

http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

下载后解压至本地某个目录,进入bin目录

$ cd  {YOUR_DATAX_HOME}/bin$ python datax.py ../job/job.json
方式二: git拉取Datax源码,自己打包

https://github.com/alibaba/DataX

1. 下载Datax源码
git clone https://github.com/alibaba/DataX.git
2. maven打包
$ cd  {DataX_source_code_home}$ mvn -U clean package assembly:assembly -Dmaven.test.skip=true

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

bin  #运行脚本
conf #配置
job  #同步任务目录
lib  #依赖
jarlog  
log_perf 
plugin  #数据源读写插件 
script

然后进入bin目录,执行官方提供测试脚本

python datax.py ../job/job.json

Datax-web部署

环境

  • MySQL (5.5+) 必选,对应客户端可以选装, Linux服务上若安装mysql的客户端可以通过部署脚本快速初始化数据库

  • JDK (1.8.0_xxx) 必选

  • Maven (3.6.1+) (如果是编译打包,需要,使用官方的tar包不需要)

  • DataX 必选

  • Python (2.x) (支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下) 必选,主要用于调度执行底层DataX的启动脚本,默认的方式是以Java子进程方式执行DataX,用户可以选择以Python方式来做自定义的改造

安装

方式一: 下载官方提供的版本tar (已失效,自己去github上找把)

https://pan.baidu.com/s/13yoqhGpD00I82K4lOYtQhg

提取码:cpsk

方式二: 编译打包, 在build目录里会有安装包生成 build/datax-web-{version}.tar.gz
git clone https://github.com/WeiYe-Jing/datax-web.gitmvn clear install

部署(linux环境)

1. 解压安装包

tar -zxvf datax-web-{version}.tar.gz

2. 执行一键安装脚本

./bin/install.sh

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

./bin/install.sh --force

3. 数据库初始化

如果你的服务上安装有mysql命令,在执行安装脚本的过程中则会出现以下提醒:

Scan out mysql command, so begin to initalize the databaseDo 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: exchangis)

按照提示输入数据库地址,端口号,用户名,密码以及数据库名称,大部分情况下即可快速完成初始化。

如果服务上并没有安装mysql命令,则可以取用目录下/bin/db/datax-web.sql脚本去手动执行,完成后修改相关配置文件

安装完成后,dataxweb目录中会出现一个modules文件夹,里面包含datax-admin和datax-executor文件夹

datax-admin:是后台管理模块。

修改端口号,邮箱,日志路径(不需要可略过)

cd modules/datax-admin/bin
vim env.properties
-------------------------------------------------------
# environment variables

# JAVA_HOME=""
WEB_LOG_PATH=${BIN}/../logs
WEB_CONF_PATH=${BIN}/../conf
DATA_PATH=${BIN}/../data
SERVER_PORT=19527
# PID_FILE_PATH=${BIN}/dataxadmin.pid

# mail accountMAIL_USERNAME=""MAIL_PASSWORD=""

# debug
# REMOTE_DEBUG_SWITCH=true
# REMOTE_DEBUG_PORT=7003

修改数据库连接信息

cd modules/datax-admin/conf
vim bootstrap.properties
--------------------------------------
#Database
DB_HOST=192.168.0.x
DB_PORT=3307
DB_USERNAME=root
DB_PASSWORD=123456
DB_DATABASE=datax_web

datax-executor:执行器

修改端口号,datax中json文件位置,脚本等信息

cd modules/datax-executor/bin
vim env.properties
---------------------------------------------
# environment variables
# JAVA_HOME=""
SERVICE_LOG_PATH=${BIN}/../logs
SERVICE_CONF_PATH=${BIN}/../conf
DATA_PATH=${BIN}/../data 
# datax json文件存放位置
JSON_PATH= 
# executor_port
EXECUTOR_PORT=9999 
# 保持和datax-admin端口一致
DATAX_ADMIN_PORT=
# PYTHON脚本执行位置
# PYTHON_PATH=/home/hadoop/install/datax/bin/datax.py
PYTHON_PATH=
## dataxweb 服务端口
SERVER_PORT=9504

启动

脚本在bin目录下

## 一键启动所有服务
$ ./bin/start-all.sh
## 单一地启动某一模块服务
$ ./bin/start.sh -m {module_name}
## 一键取消所有服务
$ ./bin/stop-all.sh
## 单一地停止某一模块服务
$ ./bin/stop.sh -m {module_name}

启动成功后,访问 http://ip:port/index.html;默认账号密码:admin/123456

使用

使用datax-web构建

1. 添加项目

2. 添加数据源


这里oracle总是获取不到Schema,代码里是根据 connection.getCatalog()获取schema,获取不到就根据数据库用户名JdbcUsername,我这边oracle用户名与schema不一样,就获取不到相关的表集合

3. 构建任务



构建完成,复制json

4. 添加任务

选择添加,任务类型选择Datax任务,将上一步的json复制进去,点击确认

将复制的json粘贴到文本框

点击确定,完成任务创建

运行任务

自己构建json

就是上面的第4步

json

{    
    "job": {        
        "setting": {            
            "speed": {                
                "byte":10485760, #全局字节大小--如果设置该值,必须在conf/core.json中设置单个channel字节大小                
                "channel":20, #作业通道数                
                            "record":200000 #全局记录限制--同上,设置该参数,必须设置单个channel条数限制       },            
             "errorLimit": {                
                 "record": 1000, #允许脏数据条数限制                
                 "percentage": 0.02 #脏数据占比            
             }        
       },        
       "content": [            
           {                
               "reader": { #源库                    
                   "name": "rdbmsreader", #reader名称,这个可以在plugin/reader中获取                     "parameter": {                        
                       "username":"", #数据库账号                        
                       "password":"", #数据库密码                        
                       "column" : [], #要同步的字段                        
                       "where":"", #where条件(不用带where)                        
                       "connection":[                            
                           {                                
                               "jdbcUrl": [], #jdbc连接(使用多个','隔开)                                                        "table": "", #表名称   
                               "querySql": "" #如果同步sql较为复杂,可以使用这个直接写sql;使用这个,上面的column,where可以不用                            
                           }                        
                       ],                        
                       "sliceRecordCount": 100000                    
                   }                
               },                
               "writer": { #目标库                    
                   "name": "streamwriter", # 名称,这个可以在plugin/writer中获取                 "parameter": {                        
                       "writeMode": "insert", # 输出类型 insert、update(不存在新增,存在更新)                    "username": "", # 数据库账号                        
                       "password": "", # 数据库密码                        
                       "preSql": [ # 前置执行sql                            
                           "truncate table table_name"                        
                       ],                        
                       "column":[ # 同步字段                         
                           target_sql                         
                       ],                        
                       "connection": [                            
                           {                                
                               "table": [                                    
                                   "table_name"                                
                               ],                                
                               "jdbcUrl": ""                           
                           }                        
                       ]                    
                   }                
               }            
           }        
       ]    
   }
}

问题

安装好后,第一次测试,可能会出现:

com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].  - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数        
at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:30) ~[datax-common-0.0.1-SNAPSHOT.jar:na]        
at com.alibaba.datax.core.job.JobContainer.adjustChannelNumber(JobContainer.java:430) ~[datax-core-0.0.1-SNAPSHOT.jar:na]        
at com.alibaba.datax.core.job.JobContainer.split(JobContainer.java:387) ~[datax-core-0.0.1-SNAPSHOT.jar:na]        
at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:117) ~[datax-core-0.0.1-SNAPSHOT.jar:na]        
at com.alibaba.datax.core.Engine.start(Engine.java:93) [datax-core-0.0.1-SNAPSHOT.jar:na]        at com.alibaba.datax.core.Engine.entry(Engine.java:175) [datax-core-0.0.1-SNAPSHOT.jar:na]   
at com.alibaba.datax.core.Engine.main(Engine.java:208) [datax-core-0.0.1-SNAPSHOT.jar:na]2022-03-29 13:51:00.639 [job-0] INFO  StandAloneJobContainerCommunicator - Total 0 records, 0 bytes | Speed 0B/s, 0 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.000s |  All Task WaitReaderTime 0.000s | Percentage 0.00%2022-03-29 13:51:00.640 [job-0] ERROR Engine -

经DataX智能分析,该任务最可能的错误原因是:com.alibaba.datax.common.exception.DataXException: Code:[Framework-03], Description:[DataX引擎配置错误,该问题通常是由于DataX安装错误引起,请联系您的运维解决 .].  - 在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数        
at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:30)   at com.alibaba.datax.core.job.JobContainer.adjustChannelNumber(JobContainer.java:430)        
at com.alibaba.datax.core.job.JobContainer.split(JobContainer.java:387)        
at com.alibaba.datax.core.job.JobContainer.start(JobContainer.java:117)        
at com.alibaba.datax.core.Engine.start(Engine.java:93)        
at com.alibaba.datax.core.Engine.entry(Engine.java:175)        
at com.alibaba.datax.core.Engine.main(Engine.java:208)

在有总bps限速条件下,单个channel的bps值不能为空,也不能为非正数

在conf/core.json中修改

"transport": {    
    "channel": {        
         "class": "com.alibaba.datax.core.transport.channel.memory.MemoryChannel",        
         "speed": {            
             "byte": 2000000,            
             "record": -1        
         },        
         "flowControlInterval": 20,        
         "capacity": 512,        
         "byteCapacity": 67108864    
     },    
     "exchanger": {        
         "class": "com.alibaba.datax.core.plugin.BufferedRecordExchanger",        
         "bufferSize": 32    
     }
 }

修改core>transport>channel>speed>byte,这里改为2000000大约2M左右

window测试时,命令界面出现中文乱码,输入下面命令,在执行同步脚本即可

..\datax\bin>chcp 65001
Logo

大数据从业者之家,一起探索大数据的无限可能!

更多推荐