• DataX使用、同步MySQL数据到HDFS案例


    4. DataX使用

    4.1 DataX使用概述

    4.1.1 DataX任务提交命令

    &emps; DataX的使用十分简单,用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中,然后执行如下命令提交数据同步任务即可。

    4.1.2 DataX配置文件格式

    可以使用如下命名查看DataX配置文件模板

    [summer@hadoop102 datax]$ python bin/datax.py -r mysqlreader -w hdfswriter
    
    • 1

    在这里插入图片描述
    配置文件模板如下,json最外层是一个job,job包含setting和content两部分,其中setting用于对整个job进行配置,content用户配置数据源和目的地。
    在这里插入图片描述

    Reader和Writer的具体参数可参考官方文档,地址如下:

    https://github.com/alibaba/DataX/blob/master/README.md

    在这里插入图片描述

    4.2 同步MySQL数据到HDFS案例

      案例要求:同步gmall数据库中base_province表数据到HDFS的/base_province目录
      需求分析:要实现该功能,需选用MySQLReader和HDFSWriter,MySQLReader具有两种模式分别是TableMode和QuerySQLMode,前者使用table,column,where等属性声明需要同步的数据;后者使用一条SQL查询语句声明需要同步的数据。
      下面分别使用两种模式进行演示。

    4.2.1 MySQLReader之TableMode

    4.2.1.1 编写配置文件
    4.2.1.1.1 创建配置文件base_province.json
    [summer@hadoop102 job]$ vim base_province.json
    
    • 1

    在这里插入图片描述

    4.2.1.1.2 配置文件内容如下

    在这里插入图片描述

    {
        "job": {
            "content": [
                {
                    "reader": {
                        "name": "mysqlreader",
                        "parameter": {
                            "column": [
                                "id",
                                "name",
                                "region_id",
                                "area_code",
                                "iso_code",
                                "iso_3166_2"
                            ],
                            "where": "id>=3",
                            "connection": [
                                {
                                    "jdbcUrl": [
                                        "jdbc:mysql://hadoop102:3306/gmall"
                                    ],
                                    "table": [
                                        "base_province"
                                    ]
                                }
                            ],
                            "password": "******",
                            "splitPk": "",
                            "username": "root"
                        }
                    },
                    "writer": {
                        "name": "hdfswriter",
                        "parameter": {
                            "column": [
                                {
                                    "name": "id",
                                    "type": "bigint"
                                },
                                {
                                    "name": "name",
                                    "type": "string"
                                },
                                {
                                    "name": "region_id",
                                    "type": "string"
                                },
                                {
                                    "name": "area_code",
                                    "type": "string"
                                },
                                {
                                    "name": "iso_code",
                                    "type": "string"
                                },
                                {
                                    "name": "iso_3166_2",
                                    "type": "string"
                                }
                            ],
                            "compress": "gzip",
                            "defaultFS": "hdfs://hadoop102:8020",
                            "fieldDelimiter": "\t",
                            "fileName": "base_province",
                            "fileType": "text",
                            "path": "/base_province",
                            "writeMode": "append"
                        }
                    }
                }
            ],
            "setting": {
                "speed": {
                    "channel": 1
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    4.2.1.2 配置文件说明
    4.2.1.2.1 Reader参数说明

    在这里插入图片描述

    4.2.1.2.2 Writer参数说明

    在这里插入图片描述注意事项:
      HFDS Writer并未提供nullFormat参数:也就是用户并不能自定义null值写到HFDS文件中的存储格式。默认情况下,HFDS Writer会将null值存储为空字符串(‘’),而Hive默认的null值存储格式为\N。所以后期将DataX同步的文件导入Hive表就会出现问题。
      解决该问题的方案有两个:
      一是修改DataX HDFS Writer的源码,增加自定义null值存储格式的逻辑,可参考https://blog.csdn.net/u010834071/article/details/105506580

    二是在Hive中建表时指定null值存储格式为空字符串(‘’),例如:

    DROP TABLE IF EXISTS base_province;
    CREATE EXTERNAL TABLE base_province
    (
        `id`         STRING COMMENT '编号',
        `name`       STRING COMMENT '省份名称',
        `region_id`  STRING COMMENT '地区ID',
        `area_code`  STRING COMMENT '地区编码',
        `iso_code`   STRING COMMENT '旧版ISO-3166-2编码,供可视化使用',
        `iso_3166_2` STRING COMMENT '新版IOS-3166-2编码,供可视化使用'
    ) COMMENT '省份表'
        ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
        NULL DEFINED AS ''
        LOCATION '/base_province/';
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    4.2.1.2.3 Setting参数说明

    在这里插入图片描述

    4.2.1.3 提交任务
    4.2.1.3.1 在HDFS创建/base_province目录

    使用DataX向HDFS同步数据时,需确保目标路径已存在

    [summer@hadoop102 datax]$ hadoop fs -mkdir /base_province
    
    • 1

    在这里插入图片描述

    4.2.1.3.2 执行如下命令
    [summer@hadoop102 datax]$ python bin/datax.py job/base_province.json 
    
    • 1

    在这里插入图片描述

    4.2.1.4 查看结果
    4.2.1.4.1 DataX打印日志

    在这里插入图片描述

    2022-11-01 10:04:57.049 [job-0] INFO  JobContainer - 
    任务启动时刻                    : 2022-11-01 10:04:44
    任务结束时刻                    : 2022-11-01 10:04:57
    任务总计耗时                    :                 12s
    任务平均流量                    :               66B/s
    记录写入速度                    :              3rec/s
    读出记录总数                    :                  32
    读写失败总数                    :                   0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    4.2.1.4.2 查看HDFS文件

    在这里插入图片描述

    [summer@hadoop102 datax]$ hadoop fs -cat /base_province/base_province__7bc8739d_ed75_40a6_b2f3_95e1cccf4281.gz | zcat
    
    • 1

    在这里插入图片描述

    3	山西	1	140000	CN-14	CN-SX
    4	内蒙古	1	150000	CN-15	CN-NM
    5	河北	1	130000	CN-13	CN-HE
    6	上海	2	310000	CN-31	CN-SH
    7	江苏	2	320000	CN-32	CN-JS
    8	浙江	2	330000	CN-33	CN-ZJ
    9	安徽	2	340000	CN-34	CN-AH
    10	福建	2	350000	CN-35	CN-FJ
    11	江西	2	360000	CN-36	CN-JX
    12	山东	2	370000	CN-37	CN-SD
    14	台湾	2	710000	CN-71	CN-TW
    15	黑龙江	3	230000	CN-23	CN-HL
    16	吉林	3	220000	CN-22	CN-JL
    17	辽宁	3	210000	CN-21	CN-LN
    18	陕西	7	610000	CN-61	CN-SN
    19	甘肃	7	620000	CN-62	CN-GS
    20	青海	7	630000	CN-63	CN-QH
    21	宁夏	7	640000	CN-64	CN-NX
    22	新疆	7	650000	CN-65	CN-XJ
    23	河南	4	410000	CN-41	CN-HA
    24	湖北	4	420000	CN-42	CN-HB
    25	湖南	4	430000	CN-43	CN-HN
    26	广东	5	440000	CN-44	CN-GD
    27	广西	5	450000	CN-45	CN-GX
    28	海南	5	460000	CN-46	CN-HI
    29	香港	5	810000	CN-91	CN-HK
    30	澳门	5	820000	CN-92	CN-MO
    31	四川	6	510000	CN-51	CN-SC
    32	贵州	6	520000	CN-52	CN-GZ
    33	云南	6	530000	CN-53	CN-YN
    13	重庆	6	500000	CN-50	CN-CQ
    34	西藏	6	540000	CN-54	CN-XZ
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    4.2.2 MySQLReader之QuerySQLMode

    4.2.2.1 编写配置文件
    4.2.2.1.1 创建配置文件base_province_sql.json

    在这里插入图片描述

    4.2.2.1.2 配置文件内容如下

    在这里插入图片描述

    {
        "job": {
            "content": [
                {
                    "reader": {
                        "name": "mysqlreader",
                        "parameter": {
                            "connection": [
                                {
                                    "jdbcUrl": [
                                        "jdbc:mysql://hadoop102:3306/gmall"
                                    ],
                                    "querySql": [
                                        "select id,name,region_id,area_code,iso_code,iso_3166_2 from base_province where id>=3"
                                    ]
                                }
                            ],
                            "password": "******",
                            "username": "root"
                        }
                    },
                    "writer": {
                        "name": "hdfswriter",
                        "parameter": {
                            "column": [
                                {
                                    "name": "id",
                                    "type": "bigint"
                                },
                                {
                                    "name": "name",
                                    "type": "string"
                                },
                                {
                                    "name": "region_id",
                                    "type": "string"
                                },
                                {
                                    "name": "area_code",
                                    "type": "string"
                                },
                                {
                                    "name": "iso_code",
                                    "type": "string"
                                },
                                {
                                    "name": "iso_3166_2",
                                    "type": "string"
                                }
                            ],
                            "compress": "gzip",
                            "defaultFS": "hdfs://hadoop102:8020",
                            "fieldDelimiter": "\t",
                            "fileName": "base_province",
                            "fileType": "text",
                            "path": "/base_province",
                            "writeMode": "append"
                        }
                    }
                }
            ],
            "setting": {
                "speed": {
                    "channel": 1
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    4.2.2.2 配置文件说明
    4.2.2.2.1 Reader参数说明
    4.2.2.3 提交任务
    4.2.2.3.1 执行如下命令
    [summer@hadoop102 datax]$ python bin/datax.py job/base_province_sql.json 
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    4.2.2.4 查看结果
    4.2.2.4.1 DataX打印日志
    2022-11-01 10:48:46.975 [job-0] INFO  JobContainer - 
    任务启动时刻                    : 2022-11-01 10:48:35
    任务结束时刻                    : 2022-11-01 10:48:46
    任务总计耗时                    :                 11s
    任务平均流量                    :               66B/s
    记录写入速度                    :              3rec/s
    读出记录总数                    :                  32
    读写失败总数                    :                   0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    4.2.2.4.2 查看HDFS文件

    在这里插入图片描述在这里插入图片描述

    3	山西	1	140000	CN-14	CN-SX
    4	内蒙古	1	150000	CN-15	CN-NM
    5	河北	1	130000	CN-13	CN-HE
    6	上海	2	310000	CN-31	CN-SH
    7	江苏	2	320000	CN-32	CN-JS
    8	浙江	2	330000	CN-33	CN-ZJ
    9	安徽	2	340000	CN-34	CN-AH
    10	福建	2	350000	CN-35	CN-FJ
    11	江西	2	360000	CN-36	CN-JX
    12	山东	2	370000	CN-37	CN-SD
    14	台湾	2	710000	CN-71	CN-TW
    15	黑龙江	3	230000	CN-23	CN-HL
    16	吉林	3	220000	CN-22	CN-JL
    17	辽宁	3	210000	CN-21	CN-LN
    18	陕西	7	610000	CN-61	CN-SN
    19	甘肃	7	620000	CN-62	CN-GS
    20	青海	7	630000	CN-63	CN-QH
    21	宁夏	7	640000	CN-64	CN-NX
    22	新疆	7	650000	CN-65	CN-XJ
    23	河南	4	410000	CN-41	CN-HA
    24	湖北	4	420000	CN-42	CN-HB
    25	湖南	4	430000	CN-43	CN-HN
    26	广东	5	440000	CN-44	CN-GD
    27	广西	5	450000	CN-45	CN-GX
    28	海南	5	460000	CN-46	CN-HI
    29	香港	5	810000	CN-91	CN-HK
    30	澳门	5	820000	CN-92	CN-MO
    31	四川	6	510000	CN-51	CN-SC
    32	贵州	6	520000	CN-52	CN-GZ
    33	云南	6	530000	CN-53	CN-YN
    13	重庆	6	500000	CN-50	CN-CQ
    34	西藏	6	540000	CN-54	CN-XZ
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32

    4.2.3 DataX传参

      通常情况下,离线数据同步任务需要每日定时重复执行,故HDFS上的目标路径通常会包含一层日期,以对每日同步的数据加以区分,也就是说每日同步数据的目标路径不是固定不变的,因此DataX配置文件中HDFS Writer的path参数的值应该是动态的。为实现这一效果,就需要使用DataX传参的功能。
      DataX传参的用法如下,在JSON配置文件中使用${param}引用参数,在提交任务时使用-p"-Dparam=value"传入参数值,具体示例如下。

    4.2.3.1 编写配置文件
    4.2.3.1.1 修改配置文件base_province.json

    在这里插入图片描述

    [summer@hadoop102 job]$ vim base_province.json 
    
    • 1
    4.2.3.1.2 配置文件内容如下
    {
        "job": {
            "content": [
                {
                    "reader": {
                        "name": "mysqlreader",
                        "parameter": {
                            "connection": [
                                {
                                    "jdbcUrl": [
                                        "jdbc:mysql://hadoop102:3306/gmall"
                                    ],
                                    "querySql": [
                                        "select id,name,region_id,area_code,iso_code,iso_3166_2 from base_province where id>=3"
                                    ]
                                }
                            ],
                            "password": "******",
                            "username": "root"
                        }
                    },
                    "writer": {
                        "name": "hdfswriter",
                        "parameter": {
                            "column": [
                                {
                                    "name": "id",
                                    "type": "bigint"
                                },
                                {
                                    "name": "name",
                                    "type": "string"
                                },
                                {
                                    "name": "region_id",
                                    "type": "string"
                                },
                                {
                                    "name": "area_code",
                                    "type": "string"
                                },
                                {
                                    "name": "iso_code",
                                    "type": "string"
                                },
                                {
                                    "name": "iso_3166_2",
                                    "type": "string"
                                }
                            ],
                            "compress": "gzip",
                            "defaultFS": "hdfs://hadoop102:8020",
                            "fieldDelimiter": "\t",
                            "fileName": "base_province",
                            "fileType": "text",
                            "path": "/base_province/${dt}",
                            "writeMode": "append"
                        }
                    }
                }
            ],
            "setting": {
                "speed": {
                    "channel": 1
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68

    在这里插入图片描述

    在这里插入图片描述

    主要是修改这个地方

    4.2.3.2 提交任务
    4.2.3.2.1 创建目标路径
    [summer@hadoop102 datax]$ hadoop fs -mkdir /base_province/2020-06-14
    
    • 1

    在这里插入图片描述

    4.2.3.2.2 执行如下命令
    [summer@hadoop102 datax]$ python bin/datax.py -p"-Ddt=2020-06-14" job/base_province.json
    
    • 1

    在这里插入图片描述

    在这里插入图片描述

    4.2.3.3 查看结果
    4.2.3.3.1 DataX打印日志
    2022-11-01 11:07:54.556 [job-0] INFO  JobContainer - 
    任务启动时刻                    : 2022-11-01 11:07:43
    任务结束时刻                    : 2022-11-01 11:07:54
    任务总计耗时                    :                 11s
    任务平均流量                    :               66B/s
    记录写入速度                    :              3rec/s
    读出记录总数                    :                  32
    读写失败总数                    :                   0
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在这里插入图片描述

    4.2.3.3.2 查看HDFS文件

    在这里插入图片描述在这里插入图片描述

    3	山西	1	140000	CN-14	CN-SX
    4	内蒙古	1	150000	CN-15	CN-NM
    5	河北	1	130000	CN-13	CN-HE
    6	上海	2	310000	CN-31	CN-SH
    7	江苏	2	320000	CN-32	CN-JS
    8	浙江	2	330000	CN-33	CN-ZJ
    9	安徽	2	340000	CN-34	CN-AH
    10	福建	2	350000	CN-35	CN-FJ
    11	江西	2	360000	CN-36	CN-JX
    12	山东	2	370000	CN-37	CN-SD
    14	台湾	2	710000	CN-71	CN-TW
    15	黑龙江	3	230000	CN-23	CN-HL
    16	吉林	3	220000	CN-22	CN-JL
    17	辽宁	3	210000	CN-21	CN-LN
    18	陕西	7	610000	CN-61	CN-SN
    19	甘肃	7	620000	CN-62	CN-GS
    20	青海	7	630000	CN-63	CN-QH
    21	宁夏	7	640000	CN-64	CN-NX
    22	新疆	7	650000	CN-65	CN-XJ
    23	河南	4	410000	CN-41	CN-HA
    24	湖北	4	420000	CN-42	CN-HB
    25	湖南	4	430000	CN-43	CN-HN
    26	广东	5	440000	CN-44	CN-GD
    27	广西	5	450000	CN-45	CN-GX
    28	海南	5	460000	CN-46	CN-HI
    29	香港	5	810000	CN-91	CN-HK
    30	澳门	5	820000	CN-92	CN-MO
    31	四川	6	510000	CN-51	CN-SC
    32	贵州	6	520000	CN-52	CN-GZ
    33	云南	6	530000	CN-53	CN-YN
    13	重庆	6	500000	CN-50	CN-CQ
    34	西藏	6	540000	CN-54	CN-XZ
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
  • 相关阅读:
    sqlx库使用指南
    智慧城市数字孪生技术方案,建设可视化系统
    SQL 日期函数
    OpenStack 手动安装: 为什么 ping 不通 203.0.113.198
    恶意软件反向关闭EDR的原理、测试和反制思考
    使用UiPath和AA构建的解决方案 3. CRM 自动化
    sklearn基础篇(四)-- k近邻算法
    【chrome扩展开发】消息通讯之onMessage消息监听
    直流有刷电机闭环调速基于STM32F302R8+X-NUCLEO-IHM07M1
    java计算机毕业设计课程在线反馈系统源程序+mysql+系统+lw文档+远程调试
  • 原文地址:https://blog.csdn.net/Redamancy06/article/details/128048240