datax使用实例及优化

一、实例


1.从MySQL读取数据到hdfs
    

查看模板
    python bin/datax.py -r mysqlreader -w hdfswriter
    覆写模板
  

 {"job": {"content": [{"reader": {"name": "mysqlreader", "parameter": {"column": ["id","name"], "connection": [{"jdbcUrl": ["jdbc:mysql://node1:3306/test"], "table": ["student"]}], "password": "1234", "username": "root", "where": "id<=1003"}}, "writer": {"name": "hdfswriter", "parameter": {"column": [{"name":"id","type":"int"},{"name":"name","type":"string"}], "compress": "", "defaultFS": "hdfs://node1:8020", "fieldDelimiter": "\t", "fileName": "student.txt", "fileType": "text", "path": "/", "writeMode": "append"}}}], "setting": {"speed": {"channel": "1"}}}
}

2.从hdfs读取数据到MySQL
    

查看模板
    python bin/datax.py -r hdfsreader -w mysqlwriter
    覆写模板
    

{"job": {"content": [{"reader": {"name": "hdfsreader", "parameter": {"column": ["*"],/*    "column": [{"index":0 ##第一列"type":"int"},{"index":1 ##第二列"type":"string"}],                    "defaultFS": "hdfs://node1:8020", "encoding": "UTF-8", "fieldDelimiter": "\t", "fileType": "text", "path": "/student.txt__425cbff6_c4f7_45e7_8caf_ad5bc51479ee"}}, "writer": {"name": "mysqlwriter", "parameter": {"column": ["id","name"], "connection": [{"jdbcUrl": "jdbc:mysql://node1:3306/test", "table": ["student"]}], "password": "1234", "preSql": [], "session": [], "username": "root", "writeMode": "insert"}}}], "setting": {"speed": {"channel": "1"}}}
}


3.从oracle读取数据到mysql


本人在windows上装了Oracle,即服务器在Windows上,linux允许datax作业读取数据到mysql时需要连接到windows上的oracle服务
(linux连接windows上的服务),需要先在windows上的防火墙设置开放1521端口;操作步骤 设置-网络和Internet-高级网络设置-Windows防火墙-高级设置-
(右键)入站规则-新建规则-端口-端口号(多个可用逗号隔开)-允许连接-全选-名称-完成
oracle 服务器链接为 jdbc:oracle:thin:@192.168.173.1:1521:orcl
    查看模板
    python bin/datax.py -r oraclereader -w mysqlwriter
    覆写模板
 

   {"job": {"content": [{"reader": {"name": "oraclereader", "parameter": {"column": ["empno", "ename", "job", "mgr", "hiredate", "sal", "comm", "deptno"], "connection": [{"jdbcUrl": ["jdbc:oracle:thin:@192.168.173.1:1521:orcl"], "table": ["emp"]}], "password": "1", "username": "scott"}}, "writer": {"name": "mysqlwriter", "parameter": {"column": ["empno", "ename", "job", "mgr", "hiredate", "sal", "comm", "deptno"], "connection": [{"jdbcUrl": "jdbc:mysql://node1:3306/test", "table": ["emp"]}], "password": "1234", "username": "root", "writeMode": "insert"}}}], "setting": {"speed": {"channel": "1"}}}
}

4.从MySQL读取数据到oracle

查看模板
    python bin/datax.py -r mysqlreader -w oraclewriter
    覆写模板
    

{"job": {"content": [{"reader": {"name": "mysqlreader", "parameter": {"column": ["id","name"], "connection": [{"jdbcUrl": ["jdbc:mysql://node1:3306/test"], "table": ["student"]}], "password": "1234", "username": "root", "where": "id>=1003"}}, "writer": {"name": "oraclewriter", "parameter": {"column": ["sno","sname"], "connection": [{"jdbcUrl": "jdbc:oracle:thin:@192.168.173.1:1521:orcl", "table": ["student"]}], "password": "1", "username": "scott"}}}], "setting": {"speed": {"channel": "1"}}}
}

5.从Oracle读取数据到hdfs

查看模板
    python bin/datax.py -r oraclereader -w hdfswriter
    覆写模板
    

{"job": {"content": [{"reader": {"name": "oraclereader", "parameter": {"column": ["empno", "ename", "job", "mgr", "hiredate", "sal", "comm", "deptno"], "connection": [{"jdbcUrl": ["jdbc:oracle:thin:@192.168.173.1:1521:orcl"], "table": ["emp"]}], "password": "1", "username": "scott"}}, "writer": {"name": "hdfswriter", "parameter": {"column": [{"name":"empno", "type":"int"},{"name":"ename", "type":"string"},{"name":"job","type":"string"},{"name":"mgr", "type":"string"},{"name":"hiredate","type":"date"},{"name":"sal","type":"double"},{                            "name":"comm","type":"double"},{"name":"deptno""type":"int"}], "compress": "", "defaultFS": "hdfs://node1:8020", "fieldDelimiter": "\t", "fileName": "emp.txt", "fileType": "text", "path": "/", "writeMode": "append"}}}], "setting": {"speed": {"channel": "1"}}}
}

6.从hdfs读取数据到Oracle

查看模板
    python bin/datax.py -r hdfsreader -w oraclewriter
    覆写模板
  

  {"job": {"content": [{"reader": {"name": "hdfsreader", "parameter": {"column": [{"index":0, "type":"string"},{"index":1, "type":"string"},{"index":2,"type":"string"},{"index":3, "type":"string"},{"index":4,"type":"date"},{"index":5,"type":"string"},{                            "index":6,"type":"string"},{"index":7"type":"string"}], "defaultFS": "hdfs://node1:8020", "encoding": "UTF-8", "fieldDelimiter": "\t", "fileType": "text", "path": "/emp.txt__c7a80f98_674d_448d_8fbd_b9de44b4d30c","nullFormat":"\\N"}}, "writer": {"name": "oraclewriter", "parameter": {"column": ["empno", "ename", "job", "mgr", "hiredate", "sal", "comm", "deptno"], "connection": [{"jdbcUrl": ["jdbc:oracle:thin:@192.168.173.1:1521:orcl"], "table": ["empc1"]}], "password": "1", "username": "scott"}}}], "setting": {"speed": {"channel": "1"}}}
}

如果过程出现提示脏数据
2024-06-18 00:30:32.273 [0-0-0-reader] ERROR StdoutPluginCollector - 脏数据: 
{"byteSize":6,"index":5,"rawData":"3000.0","type":4}],"type":"reader","message":"类型转换错误, 无法将[] 转换为[DOUBLE]"}
或{"byteSize":0,"index":6,"rawData":"","type":5}],"type":"reader","message":"No enum constant com.alibaba.datax.plugin.unstructuredstorage.reader.UnstructuredStorageReaderUtil.Type.INT"}
可以把类型改为"string"重试;

二.优化

1. 提升每个 channel 的速度

分两种,一种是控制每秒同步的记 录数,另外一种是每秒同步的字节数,默认的速度限制是 1MB/s

2. 提升 DataX Job 内 Channel 并发

注意:对单表如果没有安装主键切分,那么配置通道个数不会提升速度,效果与1个通道一样。所以在编写作业json文件时用到mysqlreader等建议加上splidPk参数

并发数 = taskGroup 的数量 * 每个 TaskGroup 并发执行的 Task 数 (默认为 5)。 提升 job 内 Channel 并发有三种配置方式:

2.1配置全局 Byte 限速以及单 Channel Byte 限速

Channel 个数 = 全局 Byte 限速 / 单 Channel Byte 限速

core.transport.channel.speed.* 配置在conf/core.json文件下

job.setting.speed.* 是指我们写的作业json文件中的setting

{ "core": { "transport": { "channel": { "speed": { "byte": 1048576 } } } }, "job": { "setting": { "speed": { "byte" : 5242880 } }, ... } }

core.transport.channel.speed.byte=1048576,job.setting.speed.byte=5242880,所以 Channel 个数 = 全局 Byte 限速 / 单 Channel Byte 限速=5242880/1048576=5 个

2.2配置全局 Record 限速以及单 Channel Record 限速

Channel 个数 = 全局 Record 限速 / 单 Channel Record 限速

{ "core": { "transport": { "channel": { "speed": { "record": 100 } } } }, "job": { "setting": { "speed": record" : 500 } }, ... } }

core.transport.channel.speed.record=100 , job.setting.speed.record=500, 所 以 配 置 全 局 Record 限速以及单 Channel Record 限速,Channel 个数 = 全局 Record 限速 / 单 Channel Record 限速=500/100=5

2.3 直接配置 Channel 个数(优先级较前两种低)

{ "job": { "setting": { "speed": { "channel" : 5 } }, ... } }

直接配置 job.setting.speed.channel=5,所以 job 内 Channel 并发=5 个

3. 提高 JVM 堆内存

       为了防止 OOM 等错 误,调大 JVM 的堆内存。 建议将内存设置为 4G 或者 8G。 调整 JVM xms xmx 参数的两种方式:一种是直接更改 datax.py 脚本;另一种是在启动 的时候,加上对应的参数,如下:

python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" hdfs-mysql.json

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/29617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java每日作业day6.18

ok了家人们今天我们继续学习方法的更多使用&#xff0c;闲话少叙&#xff0c;我们来看今天学了什么 1.重载 在同一个类中&#xff0c;可不可以存在同名的方法&#xff1f;重载:在同一个类中&#xff0c;定义了多个同名的方法&#xff0c;但每个方法具有不同的参数类型或参数个…

【设计模式(三) 设计模式的分类 】

设计模式&#xff08;DesignPattern&#xff09;是一套被反复使用、多数人知晓的、经过分类的、代码设计经验的总结。 使用设计模式的目的 &#xff1a;为了代码可重用性、让代码更容易被他人理解、保证代码可靠性。设计模式使代码编写真正工程化&#xff1b;设计模式是软件工程…

网络编程4----网络原理(面试及期末必备)

1 应用层 应用层是与程序员关系最密切的一层&#xff0c;在应用层这里了&#xff0c;很多时候&#xff0c;都是使用程序员自定义的协议&#xff0c;当然&#xff0c;也有很多现成的协议供我们使用。 “自定义协议”&#xff1a; 自定义一个协议&#xff0c;也就是自己做一个…

接口联调测试

在我们工作过程中&#xff0c;有时需要一些接口进行联调。接口联调测试&#xff0c;就是按照业务要求&#xff0c;把接口进行组合测试。接口组合起来才能实现完整的业务&#xff0c;体现更大的价值。 接口联调测试业务分析&#xff1a; 原因&#xff1a; 项目中的接口是多个…

全国产城市轨道交通运营公安AI高清视频监控系统

方案简介 城市轨道交通运营公安高清视频监控系统解决方案针对运营部门和公安部门的安保需求&#xff0c;选用华维视讯的各类前端和视频编解码、控制产品&#xff0c;通过统一平台提供视频监控服务和智能应用&#xff0c;满足轨道交通运营业主客运组织和抢险指挥的需求&#xff…

算法训练 | 动态规划Part4 | 3. 416.分割等和子集、1049.最后一块石头的重量 II、494.目标和

目录 416.分割等和子集 动态规划法 1049.最后一块石头的重量 II 动态规划法 494.目标和 XXX法 416.分割等和子集 题目链接&#xff1a;416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 文章讲解&#xff1a;代码随想录 动态规划法 解题思路 背包的体积为s…

C++ | Leetcode C++题解之第151题反转字符串中的单词

题目&#xff1a; 题解&#xff1a; class Solution { public:string reverseWords(string s) {int left 0, right s.size() - 1;// 去掉字符串开头的空白字符while (left < right && s[left] ) left;// 去掉字符串末尾的空白字符while (left < right &…

03-ES6新语法

1. ES6 函数 1.1 函数参数的扩展 1.1.1 默认参数 function fun(name,age17){console.log(name","age); } fn("张美丽",18); // "张美丽",18 fn("张美丽",""); // "张美丽" fn("张美丽"); // &…

推荐常用的三款源代码防泄密软件

三款源代码防泄密软件——安秉源代码加密、Virbox Protector 和 MapoLicensor——确实各自在源代码保护的不同方面有其专长。这些软件可以满足企业对于源代码保护的三大需求&#xff1a;防止泄露、防止反编译和防止破解。 安秉源代码加密&#xff1a; 专注于源代码文件的加密&…

南阳理工学院(期末)算法分析练习题

一、算法阅读分析题&#xff1a; 1.分析如下算法&#xff0c;回答问题&#xff08;10分&#xff09;。 该算法的作用是什么(2分)&#xff1f;分析该算法的时间复杂度(5分)?设计算法的一个输入&#xff0c;并给出对应的算法输出结果(3分) &#xff08;1&#xff09;该算法的作…

WMS系统调拨盘点功能:优化仓储管理效率

一、调拨功能概述 WMS系统的调拨功能是指仓库内部或者不同仓库之间对商品进行转移的过程。调拨的目的在于平衡库存、优化存储空间和提高物流效率。调拨功能主要包括以下几个方面&#xff1a; 1. 调拨申请&#xff1a;根据业务需求&#xff0c;仓库管理员可以发起调拨申请&…

游泳耳机哪个牌子好性价比高?精选高性价比的四大游泳耳机!

在现代社会中&#xff0c;随着健身和水中运动的普及&#xff0c;游泳耳机作为一种关键的健身配件&#xff0c;正日益受到广泛关注和需求。无论是在游泳池畅游还是深潜海底&#xff0c;好的游泳耳机不仅能提供高品质的音乐享受&#xff0c;更能保护耳朵免受水压和湿润环境的侵害…

用VBA快速将Word文档表格转化为纯文本

一、原表格以及转移出来的文本 转为纯文本时&#xff0c;每一行内容保留表头&#xff0c;文本在表格下方 二、代码 Sub 表格转为纯文本()Dim t As Singlet TimerDim i As Integer, j As IntegerDim ta As TableDim arr() As StringSet ta ActiveDocument.Range.Tables(1)Re…

力扣第205题“同构字符串”

在本篇文章中&#xff0c;我们将详细解读力扣第205题“同构字符串”。通过学习本篇文章&#xff0c;读者将掌握如何使用哈希表来解决这一问题&#xff0c;并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释&#xff0c;以便于理解。 问题描述 力扣第205题“…

transdreamer 论文阅读笔记

这篇文章是对dreamer系列的改进&#xff0c;是一篇world model 的论文改进点在于&#xff0c;dreamer用的是循环神经网络&#xff0c;本文想把它改成transformer&#xff0c;并且希望能利用transformer实现并行训练。改成transformer的话有个地方要改掉&#xff0c;dreamer用ht…

计算机网络(谢希仁第六版)| 课后习题与答案 | 物理层 | 题目知识点详细分析

计算机网络&#xff08;谢希仁第六版&#xff09;课后习题与答案 物理层 博客只对老师给的重点进行整理&#xff0c;完整的课后习题答案见Gitee下载&#xff1a;《计算机网络教程&#xff08;第6版&#xff09;&#xff08;微课版&#xff09;》习题答案 2-5 请画出数据流1 0 1…

知识图谱的相关技术

文章目录 知迟图谱与数据库系统知识图谱与智能问答知识图谱与机器推理知识图谱与推荐系统区块链与去中心化的知识图谱 知识图谱是交叉领域&#xff0c;涉及的相关领域包括人工智能、数据库、自然语言处理、机器学习、分布式系统等。下面分别从数据库系统、智能问答、机器推理、…

JDBC-Java与数据库

JDBC 快速入门 导入jar包 以 mysql 为例 注册驱动 Class.forName(“mysql.jdbc.Driver”) 获取连接 Connection conn DriverManager.getConnection(url, username, password); 定义Sql语句 String sql “update …” 获取执行Sql对象 Statement stmt conn.createStatement…

leetcode34:在排序数组中查找元素的第一个和最后一个位置

题目链接&#xff1a;34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; class Solution { public:vector<int> searchRange(vector<int>& nums, int target) {if(nums.empty()) {return {-1, -1};}vector<int> R…

git\repo

常用git和repo命令_repo git-CSDN博客文章浏览阅读1.5w次&#xff0c;点赞9次&#xff0c;收藏112次。常用git和repo命令文章收集了最近使用的一些repo和git命令&#xff0c;下图是个人理解的git文件状态转换图。 相关概念 名称 意义 repo 谷歌用Python脚本写的调用git的一个脚…