knowledge/技术知识库/技术文档/数据/ETL工具DataX与DataX-Web的安装部署与应用.md

265 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

auth: 高佳、韩健
**(一) 术语介绍**
DataX是一个开源的数据同步工具而DataX-Web是构建在DataX之上的分布式数据同步工具提供了可视化的操作界面。具体来说
- **DataX**DataX的主要作用是实现不同数据源之间的离线数据同步它支持包括关系型数据库例如MySQL、Oracle等、HDFS、Hive、ODPS、HBase、FTP等多种异构数据源之间的稳定高效的数据迁移工作。DataX通过提供命令行工具和JSON配置文件的方式来执行数据同步任务但这种方式在管理和多任务处理上存在一定的局限性。
- **DataX-Web**为了解决DataX在使用过程中的配置复杂性以及管理上的不便捷DataX-Web应运而生。DataX-Web提供了一个简单易用的操作界面降低了用户使用DataX的学习成本并缩短了任务配置时间。此外它还避免了配置过程中可能出现的错误并支持远程分布式调用DataX的功能使得多节点之间的协作变得更加容易控制。
总的来说DataX适用于需要进行大规模数据迁移的场景而DataX-Web则更适合需要简化操作流程和提升任务管理效率的用户。两者结合使用可以有效提升数据处理的效率和便捷性。
**(二)工具安装**
一、下载tar包
github地址https://github.com/alibaba/DataX
下载tar包地址http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
二、上传tar包解压并安装
上传至服务器/opt/下并解压
tar -xzvf datax.tar.gz
![输入图片说明](/imgs/2024-03-03/herwI0jA4lpLq9Nx.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/2020111109495219.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTY2NDY1,size_16,color_FFFFFF,t_70#pic_center)
三、上传解压 dataX-web
链接: [https://pan.baidu.com/s/1B8bb_KeyIYvpbI5s3IwCjA](https://pan.baidu.com/s/1B8bb_KeyIYvpbI5s3IwCjA) 提取码: 3pah
上传压缩包至服务目录,这里我上传到/usr/local/下,具体可根据自身希望上传到哪个目录就行
unzip datax-web-2.1.2.zip
四、创建datax-web数据库
sql文件在以下目录
![输入图片说明](/imgs/2024-03-03/Wo6h0lxrHFa1a9Zq.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111101056267.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTY2NDY1,size_16,color_FFFFFF,t_70#pic_center)
五、修改配置文件
1.修改数据库连接
modules下的datax-admin下的conf下的bootstrap.properties
![输入图片说明](/imgs/2024-03-03/6UX41Kuc0eBLGLZF.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111102031611.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTY2NDY1,size_16,color_FFFFFF,t_70#pic_center)
2.注意datax-executor下的bin下的env.properties的PYTOHON_PATH的配置地址需与我们安装的datax目录一致
![输入图片说明](/imgs/2024-03-03/aL2LCHcMpVHv1l09.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111102235826.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTY2NDY1,size_16,color_FFFFFF,t_70#pic_center)
六、启动datax-web及访问
执行datax-web-2.1.2下的bin下的start-all.sh启动所有模块
![输入图片说明](/imgs/2024-03-03/grgp6jJe0zpKv8HC.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/2020111110302951.png#pic_center)
访问http://服务器IP:9527/index.html#/dashboard
![输入图片说明](/imgs/2024-03-03/vLtTXGkVk7mMIr3O.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111102849385.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTY2NDY1,size_16,color_FFFFFF,t_70#pic_center)
七、实际安装过程中可能会遇到的问题
1.解决Oracle没有dba权限查询用户和表失败问题
getSQLQueryTables方法sql中的dba_tables修改为all_tables。
getSQLQueryTableSchema方法sql中的dba_users修改为all_users。
通过下载源码后修改指定方法打包jar后替换datax-admin下的lib下的datax-web-2.1.2.jar
2.解决datax写数据至db2数据库
datax暂时没有独立插件支持db2需要使用通用RDBMS这里是写入db2使用rdbmswriter对应目录为/datax/plugin/writer/rdbmswriter/
修改该目录下的plugin.json注册数据库驱动
{
"name": "rdbmswriter",
"class": "com.alibaba.datax.plugin.reader.rdbmswriter.RdbmsWriter",
"description": "useScene: prod. mechanism: Jdbc connection using the database, execute select sql, retrieve data from the ResultSet. warn: The more you know about the database, the less problems you encounter.",
"developer": "alibaba",
"drivers":["com.ibm.db2.jcc.DB2Driver"]
}
上传db2驱动到该目录下的libs如图所示
![输入图片说明](/imgs/2024-03-03/xPZPzsqtI4q8wCE5.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111104537769.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTY2NDY1,size_16,color_FFFFFF,t_70#pic_center)
job文件都放在/datax/job目录
创建需要执行的job的json文件
![输入图片说明](/imgs/2024-03-03/Ay6LSMoXL2jf6Por.png)![在这里插入图片描述](https://img-blog.csdnimg.cn/20201111105408521.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM4NTY2NDY1,size_16,color_FFFFFF,t_70#pic_center)
执行任务命令
python /opt/datax/bin/datax.py /opt/datax/job/xx.json
**(三) 实际应用**
如下为实际应用示例
3.1 如何新增任务
第1步首先进行任务构建获取datax同步任务脚本选择任务构建配置数据读取源信息。
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/5m7DZ4NTMWcmeTto.png)
第2步配置数据写入源前置sql语句代表执行同步前会执行的sql例如全量同步前对数据库清空则在前置sql写入删除全表数据语句。
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/vUT1q1AIUfaU0ure.png)
第3步 选择同步表的字段映射,比对字段数量与字段是否一致。
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/4E3i8YtLQpU9qKX1.png)
第4步点击【构建】生成datax同步任务脚本点击【复制json】后进入任务管理。
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/d7gNfh9jlMD2pfUm.png)
第5步进入任务管理新增任务执行器选择【datax执行器】路由策略选择【轮询】阻塞策略选择【丢弃后续调度】任务类型选择【DataX任务】将复制的datax任务脚本粘贴在下方的代码框内选择所属项目输入任务名称和配置定时触发表达式点击【确定】则完成任务的创建。
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/z1vkxQjvPqKLbpW2.png)
第6步任务创建完后默认不会启动需要点击按钮开关进行任务的启动启动前可手动执行一次确认任务触发的逻辑和内容无误再开启定时调度。
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/tb6ImsiJ1bQ69uF7.png)
注意事项以上创建的任务为全量同步模式且如果目标表没进行数据清空会存在主键冲突脏数据报错需要调整脚本写入模式为update这样同步会对重复数据按主键进行更新前提为同步的表必须存在主键字段。
3.2 如何增量同步数据
在任务构建时配置where条件筛选条件内的数据例如筛选2天内数据进行同步迁移注意事项需保证写入源的写入模式是update"writeMode": "update"
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/nts5RV6ZrDClXM60.png)
已创建的任务可对任务进行编辑在下方的脚本中增加where条件和writeMode写入模式。
![输入图片说明](https://git.rzdata.net/rzdata/knowledge-image/raw/branch/master/imgs/2024-03-09/mVoD6aQW6c9LVhhg.png)
3.2 全量数据同步json配置示例【注意同步数据前会删除目标表的全部数据】
{
"job": {
"setting": {
"speed": {
"channel": 3,
"byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"username": "qJFt0d+pL7uQPs57rbfG/Q==",
"password": "DjjcIe3E9n71mmKvI55MtA==",
"column": [
"\"PAPER_ID\"",
"\"AUTH_OBJECT\"",
"\"OBJECT_TYPE\"",
"\"AUTH_VALUE\""
],
"splitPk": "",
"connection": [
{
"table": [
"T_CMS_D_PAPER_AUTH"
],
"jdbcUrl": [
"jdbc:oracle:thin:@//10.158.xxx.xxx:1521/wportal"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "update",
"username": "TUiXezDzJBqHeHh+D2YEKA==",
"password": "E2+aeKRFsyypelKNid/dYP+cUf7U/tFGQFV59oIG608=",
"column": [
"`PAPER_ID`",
"`AUTH_OBJECT`",
"`OBJECT_TYPE`",
"`AUTH_VALUE`"
],
"preSql": [
"truncate table t_cms_d_paper_auth"
],
"connection": [
{
"table": [
"t_cms_d_paper_auth"
],
"jdbcUrl": "jdbc:mysql://172.28.xxx.xxx:3306/cz_doc"
}
]
}
}
}
]
}
}
3.3 增量数据同步json配置示例
{
"job": {
"setting": {
"speed": {
"channel": 3,
"byte": 1048576
},
"errorLimit": {
"record": 0,
"percentage": 0.02
}
},
"content": [
{
"reader": {
"name": "oraclereader",
"parameter": {
"username": "qJFt0d+pL7uQPs57rbfG/Q==",
"password": "DjjcIe3E9n71mmKvI55MtA==",
"column": [
"\"FILE_ID\"",
"\"FILENAME\"",
"\"FILE_PATH\"",
"\"FILE_SIZE\"",
"\"FILE_FORMAT\"",
"\"FILE_MD5\"",
"\"APP_ID\"",
"\"CREATE_DATE\"",
"\"UPDATE_DATE\"",
"\"DELETE_FLAG\"",
"\"DELETE_DATE\"",
"\"BIGDATA_FILE_ID\"",
"\"LABEL_NAME\"",
"\"IS_UPLOAD\""
],
"where": "TO_CHAR(create_date,'yyyy-MM-dd HH24:mi:ss') > TO_CHAR(TO_DATE(SYSDATE - 3),'yyyy-MM-dd HH24:mi:ss')",
"splitPk": "",
"connection": [
{
"table": [
"T_FILE"
],
"jdbcUrl": [
"jdbc:oracle:thin:@//10.158.xxx.xxx:1521/wportal"
]
}
]
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"writeMode": "update",
"username": "TUiXezDzJBqHeHh+D2YEKA==",
"password": "E2+aeKRFsyypelKNid/dYP+cUf7U/tFGQFV59oIG608=",
"column": [
"`FILE_ID`",
"`FILENAME`",
"`FILE_PATH`",
"`FILE_SIZE`",
"`FILE_FORMAT`",
"`FILE_MD5`",
"`APP_ID`",
"`CREATE_DATE`",
"`UPDATE_DATE`",
"`DELETE_FLAG`",
"`DELETE_DATE`",
"`BIGDATA_FILE_ID`",
"`LABEL_NAME`",
"`IS_UPLOAD`"
],
"connection": [
{
"table": [
"t_file"
],
"jdbcUrl": "jdbc:mysql://172.28.xxx.xxx:3306/cz_doc"
}
]
}
}
}
]
}
}
可通过where 语句,设定同步几天之内的数据。
全文结束。如您还有疑问可联系高佳18627548877获取进一步的指导。
<!--stackedit_data:
eyJoaXN0b3J5IjpbLTE0NTc1MDMzODUsLTk1NzE5MjI3OV19
-->