一、DataX 是个啥?数据界的 "搬运大队长" 实锤了

搞数据的兄弟都知道,数据这玩意儿就像流水,总得在不同地方来回倒腾。以前咱们用 Sqoop 搬数据,就像用小推车在盘山路运货 —— 底层靠 MR 吭哧吭哧跑磁盘,速度那叫一个感人😅。直到阿里甩出 DataX,这玩意儿直接升级成 "内存运输机",同样的活儿干得又快又稳,简直是数据搬家中的 "效率卷王"!

官方说法是:这是个支持 MySQL、Oracle、HDFS、Hive 等 N 多数据源的离线同步工具。通俗点说,不管你数据在关系型数据库里排得多么板正,还是在 HBase 这种非结构化存储里乱成一锅粥,DataX 都能给你安排得明明白白,分分钟实现 "MySQL→HDFS""Oracle→HBase" 这种跨次元转移🚀

二、数据源支持:只有你想不到,没有它搬不动

来看看这哥们儿的 "业务范围",直接甩表格感受下(附✨标记重点):

数据源类型 能读(Reader) 能写(Writer) 典型场景
MySQL 从 MySQL 搬数据到 Hive
Oracle 老系统数据迁移必备
HDFS 数据仓库底层存储搬运工
Hive 数仓内部数据流转神器
MongoDB 非结构化数据也能轻松拿捏
TxtFile 文本数据导入数据库救星

划重点:连通用 RDBMS 都支持,啥小众数据库都能硬刚;ODPS、OSS 这些阿里云全家桶更是无缝衔接,不愧是阿里亲儿子🤣

三、核心架构:没那么玄乎,就是个 "流水线搬运工"

很多人一听架构就头大,别怕,咱用最朴素的逻辑拆解:

DataX 的核心就俩玩意儿:ReaderWriter,中间靠 Channel 串起来。这就好比:

  • Reader 是 "左手",负责从数据源扒拉数据(比如从 MySQL 读数据)
  • Writer 是 "右手",负责把数据怼到目标地(比如写到 HDFS)
  • Channel 是 "传送带",数据在内存里通过它传输,比 Sqoop 走磁盘快 N 倍

注意:这哥们儿不是分布式的!别想着用多台机器一起搬,它只能在单台机器上自己吭哧干活,属于 "个人能力极强但不会组队" 的类型😂

四、实战速成:5 分钟搞定第一个数据搬运任务

(1)MySQL 数据读出来打印到控制台

先整个最简单的案例,让数据在控制台 "蹦迪"📝

  1. 在 job 文件夹里新建mysql2stream.json,内容如下:
{
  "job": {
    "setting": {
      "speed": {
        "channel": 3  // 开3个通道搬数据,速度拉满
      }
    },
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "username": "root",
            "password": "123456",
            "connection": [
              {
                "table": ["your_table"],
                "jdbcUrl": ["jdbc:mysql://localhost:3306/your_db"]
              }
            ],
            "querySql": ["select * from your_table"]  // 直接写SQL捞数据
          }
        },
        "writer": {
          "name": "streamwriter",
          "parameter": {
            "print": true  // 打印到控制台
          }
        }
      }
    ]
  }
}

运行命令:python bin/datax.py job/mysql2stream.json

看到控制台哗啦啦跑出数据,恭喜你,入门成功🎉

(2)MySQL 数据导入 Hive(重点来了!)

数仓必备操作,注意坑点:

  • DataX 不能直接连 Hive,得通过 HDFS 中转
  • Hive 表必须提前创建,不像 Sqoop 能自动生成

步骤分解:

1、先在 Hive 创建目标表:

create table ods_base_area(
  id string,
  name string,
  create_time string
) row format delimited fields terminated by '\t';

2、写 DataX 任务mysql2hive.json

{
  "job": {
    "content": [
      {
        "reader": {
          "name": "mysqlreader",
          "parameter": {
            "querySql": ["select id, name, create_time from base_area"]
          }
        },
        "writer": {
          "name": "hdfswriter",
          "parameter": {
            "defaultFS": "hdfs://localhost:9000",
            "path": "/user/hive/warehouse/ods_base_area",
            "fileType": "text",
            "fieldDelimiter": "\t",
            "column": [
              {
                "name": "id",
                "type": "string"
              },
              {
                "name": "name",
                "type": "string"
              },
              {
                "name": "create_time",
                "type": "string"
              }
            ]
          }
        }
      }
    ]
  }
}

3、运行后数据会先写到 HDFS,Hive 表直接读就行。这里注意:HDFS 路径必须提前存在,不然会报错哦~

五、增量导入:每天只搬 "新货" 的聪明办法

全量导入就像把整个仓库搬空,增量导入则是只搬昨天新到的货,效率拉满!DataX 实现起来巨简单 —— 直接在 SQL 里加 where 条件:

比如要搬 2025-06-03 的订单数据:

select * from order_table where create_time >= '2025-06-03 00:00:00' and create_time <= '2025-06-03 23:59:59'

或者用字符串截取:

select * from order_table where substr(create_time, 1, 10) = '2025-06-03'

把这段 SQL 塞进 mysqlreaderquerySql 参数里,每天跑一次,新数据就乖乖进仓库啦~

 

六、调优技巧:让 DataX 跑得像火箭一样快

想让 DataX 发挥最大性能,这几个参数得会调:

1、全局配置:改conf/core.json

  • channel:并发度,默认 5,数据量大可以调到 10(别太高,小心撑爆内存)
  • speed.record:限速,比如每秒最多搬 10000 条数据
  • speed.byte:按字节限速,比如每秒 1024MB

2、任务配置:在 json 里直接写

{
  "setting": {
    "speed": {
      "channel": 8,  // 这个任务开8个通道
      "byte": 2048    // 每秒最多搬2GB
    }
  }
}

记住:并发度不是越高越好,得看数据源扛不扛得住。比如 MySQL 如果并发太高,可能直接被干到崩溃,建议先从小数值慢慢试🌚

七、最后唠两句:DataX 到底香在哪?

  • 上手快:不用写代码,全靠 json 配置,比 Sqoop 命令行友好 100 倍
  • 兼容性强:支持几十种数据源,啥奇葩数据库都能接
  • 性能稳:内存传输 + 多通道并发,速度吊打传统工具

唯一缺点可能就是得自己写 json,但别怕,官网有超多模板,复制粘贴改改参数就能用。新手建议先从 MySQL→控制台练手,熟练了再挑战跨数据源迁移,分分钟变身数据搬运大师😎

(附:DataX3.0 开源地址👉https://github.com/alibaba/DataX,觉得好用别忘了点个赞

(○` 3′○)~)

 

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐