0


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

在这里插入图片描述
配置文件模板如下,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-0110:48:46.975[job-0]INFO  JobContainer -任务启动时刻:2022-11-0110:48:35任务结束时刻:2022-11-0110:48:46任务总计耗时:                 11s
任务平均流量:               66B/s
记录写入速度:              3rec/s
读出记录总数:32读写失败总数:0

在这里插入图片描述

4.2.2.4.2 查看HDFS文件

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

3    山西    1140000CN-14CN-SX4    内蒙古    1150000CN-15CN-NM5    河北    1130000CN-13CN-HE6    上海    2310000CN-31CN-SH7    江苏    2320000CN-32CN-JS8    浙江    2330000CN-33CN-ZJ9    安徽    2340000CN-34CN-AH10    福建    2350000CN-35CN-FJ11    江西    2360000CN-36CN-JX12    山东    2370000CN-37CN-SD14    台湾    2710000CN-71CN-TW15    黑龙江    3230000CN-23CN-HL16    吉林    3220000CN-22CN-JL17    辽宁    3210000CN-21CN-LN18    陕西    7610000CN-61CN-SN19    甘肃    7620000CN-62CN-GS20    青海    7630000CN-63CN-QH21    宁夏    7640000CN-64CN-NX22    新疆    7650000CN-65CN-XJ23    河南    4410000CN-41CN-HA24    湖北    4420000CN-42CN-HB25    湖南    4430000CN-43CN-HN26    广东    5440000CN-44CN-GD27    广西    5450000CN-45CN-GX28    海南    5460000CN-46CN-HI29    香港    5810000CN-91CN-HK30    澳门    5820000CN-92CN-MO31    四川    6510000CN-51CN-SC32    贵州    6520000CN-52CN-GZ33    云南    6530000CN-53CN-YN13    重庆    6500000CN-50CN-CQ34    西藏    6540000CN-54CN-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
版权归原作者 Redamancy_06 所有, 如有侵权,请联系我们删除。

“DataX使用、同步MySQL数据到HDFS案例”的评论:

还没有评论