DataX工具的使用
发布日期:2021-05-18 09:16:24 浏览次数:23 分类:精选文章

本文共 3807 字,大约阅读时间需要 12 分钟。

DataX框架技术说明

DataX3.0设计框架

DataX是一个高效的数据集成框架,主要用于实现数据源与目标端的高效同步。其核心架构分为Reader、Writer和Framework三个模块,分别承担数据采集、数据写入和数据传输的功能。

  • Reader(数据采集模块):负责从多种数据源(如MySQL、ODPS等)读取数据,并将数据发送给Framework。
  • Writer(数据写入模块):接收来自Framework的数据,按照指定规则将数据写入目标端数据库或数据仓库。
  • Framework(数据传输核心):作为Reader和Writer的桥梁,负责数据的缓冲、流控、并发处理以及数据转换等核心功能。
DataX3.0核心架构

DataX3.0的核心架构通过Job、Task和TaskGroup三大模块,实现了数据同步的高效执行。Job作为作业管理模块,负责整体协调和监控;Task则是数据同步的最小执行单元,负责具体数据的读取和写入;TaskGroup模块用于管理并发执行的多个Task。

  • Job模块:负责接收并管理单个作业,处理数据清理、子任务切分以及TaskGroup的创建。
  • Task切分:根据配置策略,将单个Job拆分为多个Task,充分利用计算资源。
  • TaskGroup管理:通过Scheduler模块实现Task的并发执行,默认每个TaskGroup支持5个并发Task。
  • Task执行机制:每个Task启动后,固定启动Reader→Channel→Writer的线程完成数据同步任务。Job模块负责监控所有TaskGroup的执行状态,确保作业成功完成。
DataX脚本初试

DataX的用户界面简洁易用,支持通过配置文件实现复杂的数据集成任务。以下是常见Reader和Writer配置示例:

Reader配置示例
  • MySQL Reader
  • "reader": {
    "name": "mysqlreader",
    "parameter": {
    "username": "Username",
    "password": "Password",
    "column": ["id", "name"],
    "splitPk": "id",
    "connection": [{
    "table": ["tableName"],
    "jdbcUrl": ["jdbc:mysql://172.16.4.37:3306/db1"]
    }]
    }
    }
    1. ODPS Reader
    2. "reader": {
      "name": "odpsreader",
      "parameter": {
      "accessId": "accessId",
      "accessKey": "accessKey",
      "project": "targetProjectName",
      "table": "tableName",
      "partition": ["all_query_conditions"],
      "column": ["customer_id", "nickname"],
      "packageAuthorizedProject": "yourCurrentProjectName",
      "splitMode": "record",
      "odpsServer": "http://xxx/api"
      }
      }
      Writer配置示例
    3. MySQL Writer
    4. "writer": {
      "name": "mysqlwriter",
      "parameter": {
      "writeMode": "insert",
      "username": "Username",
      "password": "Password",
      "column": ["id", "k", "c", "pad"],
      "session": ["set session innodb_lock_wait_timeout=1000"],
      "preSql": ["delete from tableName"],
      "connection": [{
      "jdbcUrl": "jdbc:mysql://172.16.4.37:3306/db2",
      "table": ["tableName"]
      }]
      }
      }
      1. ODPS Writer
      2. "writer": {
        "name": "odpswriter",
        "parameter": {
        "accessId": "accessId",
        "accessKey": "accessKey",
        "accountType": "aliyun",
        "column": ["id", "k", "c", "pad"],
        "odpsServer": "http://service.cn-hangzhou.maxcompute.aliyun-inc.com/api",
        "partition": "all_insert_conditions",
        "project": "ProjectName",
        "table": "tableName",
        "truncate": true
        }
        }
        脚本自动化调度

        通过脚本实现每日自动化调度,可根据需求定制查询条件和写入分区条件。以下是常见脚本模板:

        vim imp_data.sh
        #vim imp_data.sh
        #根据$1识别不同的数据集成任务名,根据$2识别分区,若有多个分区可继续使用$3、$4。
        #为不同的数据集成脚本任务编写demo模版
        #拷贝脚本demo为具体的具体的执行脚本
        cp /home/admin/scripts/datax-${interface_name}-demo.json /home/admin/config/datax-${interface_name_pt}-dev.json
        #查询条件、写入表分区条件判断
        in_conditions=''
        if [ ${interface_name} == 'mysqlqury2odps1' ]; then
        #根据数据集成任务名$1判断reader条件
        check_time=$2' '$3$4
        check_unixtime=`date -d "${check_time}" +%s`
        in_conditions='pt='$2' and _timestamp='${check_unixtime}'
        elif [ ${interface_name} == 'mysqlqury2odps2' ]; then
        in_conditions='pt='$2' and hh='$3
        fi
        echo $in_conditions
        out_conditions='ds='$2',hh='$3',mm='$4
        if [ ! -n "$4" ]; then
        out_conditions='ds='$2',hh='$3',mm=00'
        fi
        echo $out_conditions
        #参数替换-查询条件
        sed -i "s/all_query_conditions/$in_conditions/g" /home/admin/config/datax-${interface_name_pt}-dev.json
        #参数替换-分区条件
        sed -i "s/all_insert_conditions/$out_conditions/g" /home/admin/config/datax-${interface_name_pt}-dev.json
        #命令执行
        /opt/datax/bin/datax.py /home/admin/config/datax-${interface_name_pt}-dev.json
        #删除临时文件
        rm /home/admin/gaode_data/config/datax-${interface_name_pthh}-dev.json
        任务执行命令
        bash imp_data.sh ${interface_name} ${pt} ${hh} ${ss}

        通过上述脚本模板,可实现对不同数据集成任务的灵活配置和定时调度。若需实现每日定时调度,可将任务执行命令写入Shell脚本中,并根据需求配置参数。

        以上内容结合了DataX框架的核心设计理念和实际应用示例,旨在为数据同步和集成任务提供清晰的技术参考。

    上一篇:DataWorks数据集成任务切分键妙用
    下一篇:MySQL窗口函数实现

    发表评论

    最新留言

    路过按个爪印,很不错,赞一个!
    [***.219.124.196]2025年05月03日 12时50分45秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    2025版最新一文彻底搞懂大模型 - Agent(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新关于HW护网行动的一些知识,零基础入门到精通,收藏这篇就够了 2025-03-30
    (建议收藏)2024最新 URL Scheme大全APP跳转界面地址更新中 ios快捷指令快捷方式链接跳转微信小程序必备autojs可用免root (可定制开发和提取URL Scheme 参数提取) 2025-03-30
    2025版最新大模型学习路线,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新大模型开发流程(非常详细)零基础入门到精通,收藏这一篇就够了 2025-03-30
    (干货)数据分析案例--以上海二手房为例 2025-03-30
    (大部分安卓手机通用)一加OnePlus Ace3扬声器优化教程 外放直接媲美苹果 2025-03-30
    2025版最新大模型微调方法(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新大模型算法岗位薪资指南,零基础入门到精通,收藏这一篇就够了 2025-03-30
    2025版最新大语言模型的指令微调,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新小白学习大模型:什么是大模型?零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新常用黑客工具之【Nmap 教程基础】零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新开发一款大模型需要经过哪些步骤?开发一款大模型的完整流程,收藏这篇就够了 2025-03-30
    $.inArray函数判断数组中的是否包含字符串 2025-03-30
    2025版最新渗透测试和黑客工具列表,零基础入门到精通,收藏这一篇就够了 2025-03-30
    2025版最新网络安全入门书籍整理大全,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新网络安全知识入门及学习流程(非常详细)零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新网络安全等级保护测评指南,零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新运维怎么转行网络安全?零基础入门到精通,收藏这篇就够了 2025-03-30
    2025版最新黑客学习网站(非常详细),零基础入门到精通,看这一篇就够了 2025-03-30