当前位置: 首页 > article >正文

Linux中DataX使用第二期

简介

  紧接着上期关于DataX工具的基础使用,本期来看看DataX的源码部分。因为源码内容比较多,于是会用几期进行理解,目的是为了更好的了解Datax。

环境

  • Windows10 (linux中命令相似,为了方面调试就用windows的)
  • JDK(1.8以上,推荐1.8)
  • Python(2或3都可以)
  • Apache Maven (推荐3.x版本)
  • IntelliJ IDEA 2023.2.2 (IDE没要求,能打开maven项目就行)
  • 源码下载地址

源码打包

  源码下载完成后,解压然后用IDEA打开。

 下载maven包

 下载完成后进行打包,进入项目的更目录。

 输入cmd按回车键

输入打包命令,等待打包完成即可。(打包使用了Assembly 插件,主要作用是,允许用户将项目输出与它的依赖项、模块、站点文档、和其他文件一起组装成一个可分发的归档文件。简单来说就是定制化打包,和 Inno Setup有点相似)

mvn -U clean package assembly:assembly -Dmaven.test.skip=true

打包后的文件(有压缩包和解压后的文件夹两种,在windows和linux中都能使用。)

  进入执行脚本文件夹内,在这文件内进入cmd。

 查看打包的脚步是否可用,执行下面命令。

// 1.windows下
python datax.py -r streamreader -w streamwriter
// 2.linux下 
// 第一次执行需要授权
chmod 777 datax.py
// 执行
./datax.py -r streamreader -w streamwriter

测试数据同步,在当前目录下创建stream2stream.json。

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "streamreader",
          "parameter": {
            "sliceRecordCount": 8,
            "column": [
              {
                "type": "long",
                "value": "10"
              },
              {
                "type": "string",
                "value": "hello,你好,世界-DataX"
              }
            ]
          }
        },
        "writer": {
          "name": "streamwriter",
          "parameter": {
            "encoding": "UTF-8",
            "print": true
          }
        }
      }
    ],
    "setting": {
      "speed": {
        "channel": 5
       }
    }
  }
}

   说下几个关键的参数 

  • sliceRecordCount 表示每个切片有多少数据量。
  • column 表示数据类型和具体数据。
  • print 表示是否打印到控制台。
  • channel 表示同步数据用的通道。

 执行脚本(执行前改变了下编码格式,防止中文乱码)

// 1.windows下
// 切换成utf-8编码 ,Change Code Page 65001,其中 65001 是UTF-8编码的代码页编号。
chcp 65001
// 执行命令
python datax.py ./stream2stream.json
// 2.liunx下
./datax.py ./stream2stream.json

从“读出记录总数”是40这点,可知道 读出记录总数 = channel*sliceRecordCount,就是5*8=40。

从这个图中taskId有5个,表示channel的数量5。而且打印的顺序也不一致,说明channel相当于进程,开个5个进程来打印数据,每个进程打印8条数据。

开发调试

  首先找到源码的datax-example模块。

  通过调用这里的测试类,就能做到类似上面执行.py脚本的效果。

  比如说,这里通过名称找到读取器的源码位置。

 调整下源码

执行测试类,查看打印信息。

当前模块的目的就是方便调试。(下图左边表示正常的调试方式,右边表示有了这个模块的调试流程)

然后“datax-example-core”模块,主要提供一些方便测试的代码,而“datax-example-streamreader”就主要做测试就行了。

最后是“datax-example-neo4j”,这个作为Neo4j(一个高性能的,NOSQL图形数据库)的测试模块,需要docker环境。因为日常工作涉及Neo4比较少,后续再做研究。

总结

  本期主要讲了源码的一些基础使用和调试,后续会进一步的深入。这也是年前的最后一篇文章,希望大家新的一年,如蛇般灵活,抓住每一个机遇,如蛇般睿智,化解每一次挑战。新年快乐,大吉大利


http://www.kler.cn/a/520019.html

相关文章:

  • 01-23 statefulSet
  • python-leetcode-删除排序链表中的重复元素 II
  • SSM项目本地Tomcat部署
  • 守护资产,防范风险 | 2025年Web3.0资产安全指南
  • Vue2官网教程查漏补缺学习笔记 - 3Vue实例4模板语法5计算属性监听器
  • Elasticsearch——Elasticsearch查询实战
  • 网易前端开发面试题200道及参考答案 (下)
  • 力扣OJ(3300+)
  • Java设计模式 十八 状态模式 (State Pattern)
  • Linux/C高级(精讲)----进程、文件、shell
  • 菜鸟BUG之常见异常(二)
  • 全球AI模型百科全书,亚马逊云科技Bedrock上的100多款AI模型
  • 后端SpringBoot学习项目-用户管理-增删改查-service层
  • Centos7系统php8编译安装fileinfo扩展教程整理
  • 78,【2】BUUCTF WEB .[安洵杯 2019]不是文件
  • Spring集成Redis|通用Redis工具类
  • 81,【5】BUUCTF WEB [b01lers2020]Life on Mars
  • Leetcode刷题-滑动窗口
  • Hadoop实战-电商离线数仓学习笔记4.0
  • 基于马尔可夫链和多属性决策方法的物联网生态系统信任评分预测与管理