基于 DataX 开发的快速同步 MySQL 数据至 HDFS 上的工具。自动获取 MySQL 中对象库的所有表,一键自动化批量配置 DataX 可执行 JSON 配置文件,自动化创建本地路径、HDFS 同结构存储路径。省去了繁琐的字段映射、配置文件编写步骤,自动化程度高,效率提升明显。
本项目基于 DataX3.0 开源项目的基础上完成 —— DataX 官网
本项目同时支持 Python3 和 Python2,请根据你的环境进行选择。
下载 Python3 连接 MySQL 的依赖库。
你可以使用 pip3
安装它:
pip3 install PyMySQL
或者:
pip install PyMySQL
如果你使用的是 MySQL8.x 版本,则需要进行额外的扩展下载,因为在 MySQL8.x 中需要进行连接认证,你可以通过如下命令来查询对应用户的认证规则:
SELECT host,user,plugin FROM mysql.user;
当认证方式为 sha256_password
或 caching_sha2_password
,你需要安装额外的依赖项:
pip3 install PyMySQL[rsa]
或者:
pip install PyMySQL[rsa]
必须将下列文件放置在同一路径下:
配置文件 config.py
JSON 模板文件 template.json
文件创建程序 datax_mysql_hdfs_json.py
程序调度脚本 create_json_files.sh
按照你的需求,编辑 config.py
配置文件,请检查你配置的相关路径是否具有读写权限,否则程序调度时会出现异常。
不要更改配置文件原有结构、名称,配置内容必须使用英文双引号进行引用。
运行脚本文件 create_json_files.sh
,它会将本次执行日志信息存储在 /tmp/run_log.txt
文件中,如果遇到异常,请查看该文件内容。
bash create_json_files.sh
正常运行完成后,它将根据你在 config.py
配置文件中设定的信息,生成 DataX 所需的 JSON 配置文件,生成的 JSON 文件将存储在你指定的目录下。
自动批量执行 DataX 任务,将 MySQL 数据同步到 HDFS 上的 DataX 脚本 run_datax.sh
,需要指定 DataX 安装路径以及存放 JSON 配置文件的路径(目录)。
开始执行前,请先启动 Hadoop 和 MySQL,确保服务能够正常执行,并且脚本拥有执行权限。
bash run_datax.sh $DATAX_HOME $JSON_FILES_HOME
如果你在环境变量中配置了 $DATAX_HOME
变量,那么会默认将该路径作为 DataX 的安装路径,只需要指定 $JSON_FILES_HOME
文件的存放根路径即可。
bash run_datax.sh $JSON_FILES_HOME
运行过程中,会打印对应提示信息,它会将本次运行日志信息存储在 /tmp/run_datax_log.txt
文件中,如果数据同步执行失败,会将失败的文件统计到 /tmp/run_datax_errors.txt
文件中,以供查看。
功能与限制同 DataX 开源项目保持一致,详细内容请查看:hdfswriter
展开对文件列表的说明。
1.config.py
:
2.template.json
:
3.datax_mysql_hdfs_json.py
:
config.py
配置文件和 template.json
模板文件,生成 DataX 可执行的 JSON 数据同步文件。4.create_json_files.sh
:
config.py
配置文件中指定的 save_json_path
参数决定。5.run_datax.sh
:
执行 DataX 数据同步任务,需要传入两个参数:
$DATAX_HOME
,如果你配置了该环境变量,则可以省略该参数。检测到 HDFS 路径未创建时会自动进行创建,前提是需要相关权限。
展开对配置文件 config.py
的详细说明。
username
指定 MySQL 连接账号,无默认值;
password
指定 MySQL 连接密码,无默认值;
database
指定 MySQL 连接库,无默认值;
host
指定 MySQL 连接主机,默认值:localhost
;
port
指定 MySQL 连接端口,默认值:3306
;
defaultFS
指定 HDFS 连接地址,默认值:hdfs://localhost:8020
;
fileName
指定文件在 HDFS 上文件的存储前缀,默认值:当前操作的表名称;
DataX 在进行数据同步时,为了避免重复路径的存在,采用了 fileName
+ 随机路径的方式实现,所以定义该值的意义并不大,在这里,直接对其做了默认化处理,也就是将正在操作的表名称作为前缀。当然,你也可以自定义名称。
fileType
指定 HDFS 数据存储类型,默认值:text
文本类型【可选数据类型 orc
】;
path
指定 HDFS 数据存储路径,默认值:/
根路径;
template_path
新增参数,指定 HDFS 中数据存储路径模板,无默认值;
使用说明:假设要将 MySQL 库 test
所有的表都导入到 HDFS 上的 /ods
路径下的子目录 /2023/09/19
中,那么你将这样实现:
"path": "/ods"
存放主目录;"template_path":"/2023/09/19"
存放模板目录;系统在运行过程中会自动补全当前操作的表名称,补全后数据最终的存储路径为:/ods/table_name/2023/09/19/
其中 table_name
会随着正在操作的表进行变化,该操作为批量执行,执行前请确认是否需要将所有表存储在相同结构的路径下。
writeMode
指定文件写入形式,默认值:append
追加模式;
append
:写入前不做任何处理,直接使用 filename
写入,并保证文件名不冲突。nonConflict
:如果目录下有 fileName
前缀的文件,直接报错。truncate
:如果目录下有 fileName
前缀的文件,先删除后写入。fieldDelimiter
指定数据行间隔符,默认值:\t
制表符;
compress
指定数据压缩模式,默认值:gzip
压缩格式;
text
类型文件支持压缩类型:gzip
、bzip2
;orc
类型文件支持压缩类型:NONE
、SNAPPY
(需要用户安装SnappyCodec);template_json_file_path
新增参数,指定生成 DataX 可执行 JSON 文件的模板文件;
save_json_path
新增参数,指定生成的 JSON 文件存储路径,默认值:/opt
;
该路径在执行过程中会自动进行创建(需要有创建权限), 最终生成的文件目录为:save_json_path/database_name/
;
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。