飞道的博客

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

389人阅读  评论(0)

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


配置文件模板如下,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

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
            }
        }
    }
}

 

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/';
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

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

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
4.2.1.4.2 查看HDFS文件

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

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

 

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
            }
        }
    }
}

 

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 

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

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

 

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 
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
            }
        }
    }
}

 

主要是修改这个地方

4.2.3.2 提交任务

4.2.3.2.1 创建目标路径
[summer@hadoop102 datax]$ hadoop fs -mkdir /base_province/2020-06-14

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

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

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

 

转载:https://blog.csdn.net/Redamancy06/article/details/128048240
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场