Datax安装部署及读取MYSQL写入HDFS

news/2024/5/20 1:56:22 标签: mysql, hdfs, 大数据

一.DataX简介

1.DataX概述

DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
源码地址:https://github.com/alibaba/DataX

2.DataX支持的数据源

https://github.com/alibaba/DataX
在这里插入图片描述
在这里插入图片描述

3.DataX架构原理

为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。

在这里插入图片描述

4.DataX框架设计

DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。
在这里插入图片描述

5.DataX运行流程

在这里插入图片描述

6.DataX调度决策思路

举例来说,用户提交了一个DataX作业,并且配置了总的并发度为20,目的是对一个有100张分表的mysql数据源进行同步。DataX的调度决策思路是:
(1)DataX Job根据分库分表切分策略,将同步工作分成100个Task。
(2)根据配置的总的并发度20,以及每个Task Group的并发度5,DataX计算共需要分配4个TaskGroup。
(3)4个TaskGroup平分100个Task,每一个TaskGroup负责运行25个Task。

7.DataX与Sqoop对比

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

二.DataX部署

1.下载DataX安装包并上传到linux系统

下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

2.解压datax.tar.gz到/opt/software

[root@VM-4-10-centos datax]# tar -zxvf datax.tar.gz -C ../software/

3.自检,执行如下命令

[root@VM-4-10-centos datax]# python /opt/software/datax/bin/datax.py /opt/software/datax/job/job.json

在这里插入图片描述
如果出现下图报错,说明路径有问题,检查路径。
在这里插入图片描述

三.DataX的使用

1.DataX任务提交命令

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

2. DataX配置文件格式

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

[root@VM-4-10-centos datax]# python bin/datax.py -r mysqlreader -w hdfswriter

在这里插入图片描述

3.同步MySQL数据到HDFS案例

先测试从mysql读取数据打印控制台是否正常
MySQL读插件官网:https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md

{
    "job": {
        "setting": {
            "speed": {
                 "channel":1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "column": [
                            "id",
                            "create_time",
                            "update_time",
                            "value"
                        ],
                        "where": "id>=3",
                        "connection": [
                            {
                                "jdbcUrl": [
                                    "jdbc:mysql://10.0.4.10:3306/medical?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8"
                                ],
                                "table": [
                                    "dict"
                                ]
                            }
                        ],
                        "password": "123456",
                        "splitPk": "",
                        "username": "root"
                    }
                },
                "writer": {
                    "name": "streamwriter",
                    "parameter": {
                        "print": false,
                        "encoding": "UTF-8"
                    }
                }
            }
        ]
    }
}

在这里插入图片描述
数据打印正常读取插件配置正常。

配置hdfs写入插件

{
    "job": {
        "setting": {
            "speed": {
                 "channel":1
            }
        },
        "content": [
            {
                "reader": {
                    "name": "mysqlreader", #读取数据的插件名称
                    "parameter": {
                        "column": [ #读取的表的字段
                            "id",
                            "create_time",
                            "update_time",
                            "value"
                        ],
                        "where": "id>=3", #过滤条件
                        "connection": [ #连接信息
                            {
                                "jdbcUrl": [  #连接链接
                                    "jdbc:mysql://10.0.4.10:3306/medical?useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8"
                                ],
                                "table": [  #表名
                                    "dict"
                                ]
                            }
                        ],
                        "password": "123456",  #密码
                        "splitPk": "",
                        "username": "root"  #用户名
                    }
                },
                "writer": {
                    "name": "hdfswriter",  #写入数据的插件名称
                    "parameter": {
                        "defaultFS": "hdfs://101.91.153.39:8020",   #hdfs连接信息
                        "fileType": "text",    #文件格式
                        "path": "/datax/mysql",  # 写入地址
                        "fileName": "dict",   #文件名称
                        "column": [
                            {
                                "name": "id",
                                "type": "BIGINT"
                            },
                            {
                                "name": "create_time",
                                "type": "STRING"
                            },
                            {
                                "name": "update_time",
                                "type": "STRING"
                            },
                            {
                                "name": "value",
                                "type": "STRING"
                            }
                        ],
                        "writeMode": "append",  #写入文件的方式
                        "fieldDelimiter": "\t", #字段分割符
                        "compress":"gzip"  #hdfs文件压缩类型,默认不填写意味着没有压缩。
                    }
                }
            }
        ]
    }
}

如果写入HDFS出现如下错误

在这里插入图片描述

原因:NameNode节点存放的是文件目录,也就是文件夹、文件名称。 本地可以通过公网访问
NameNode,所以可以进行文件夹的创建,当上传文件需要写入数据到DataNode时, NameNode 和DataNode是通过局域网进行通信,NameNode返回地址为 DataNode 的私有 IP,本地无法访问。

解决方法:返回的IP地址无法返回公网IP,只能返回主机名,通过主机名与公网地址的映射便可以访问到DataNode节点,问题将解决。
datax的hdfswriter设置相关连接属性的hadoopConfig。

"hadoopConfig": {
                            "dfs.client.use.datanode.hostname": true
                          }, 

在这里插入图片描述
运行成功:
在这里插入图片描述
在这里插入图片描述


http://www.niftyadmin.cn/n/5213811.html

相关文章

【Docker】Docker 仓库管理和Docker Dockerfile

作者简介: 辭七七,目前大二,正在学习C/C,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: 七七的闲谈 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖&#x1f…

张弛声音变现课,枪战电影高能量、快速节奏

在执行枪战片的声音配音任务时,配音员应该致力于传递出戏剧性的紧张氛围与动作场面的激烈感。枪战场景往往是高能量、快速节奏的,这就要求配音不仅要与视觉动作紧密结合,还要通过声音来增强动作的逼真度和观众的紧迫感。以下是针对枪战电影进…

视频图片提取秘籍:从指定时长中提取想要的视频封面

在如今的内容丰富的互联网世界中,视频已经成为大家获取信息、娱乐和交流的重要方式之一。而视频的封面或图片,作为视频内容的“名片”,往往决定了观众是否愿意点击和进一步了解视频内容。视频图片提取,通常也被称为视频封面提取&a…

Linux的基本指令(二)

目录 前言 学前补充 touch指令 mkdir指令 rmdir指令 rm指令 通配符* man指令 cp指令 mv指令(重要) 补充内容: 1、如何快速在Linux中写出代码 2、如何看待如此多的Linux指令 cat指令 前言 关于Linux的基本指令我们会分三到四篇文章进行分析&#xff0c…

华为ensp:trunk链路

当我们使用trunk链路后,还要选择要放行的vlan那就是全部vlan(all),但是all并不包括vlan1,所以我们的trunk链路中的all不对all进行放行 实现相同vlan之间的通信 先将他们加入对应的vlan lsw1 进入e0/0/3接口 interfa…

Kotlin学习——流程控制,when,循环,range工具 kt里的equals if实现类似三元表达式的效果

Kotlin 是一门现代但已成熟的编程语言,旨在让开发人员更幸福快乐。 它简洁、安全、可与 Java 及其他语言互操作,并提供了多种方式在多个平台间复用代码,以实现高效编程。 https://play.kotlinlang.org/byExample/01_introduction/02_Functio…

Python爬虫知识储备

Python爬虫知识储备 一、基础知识 常见的Python爬虫相关库和工程化爬虫框架: 请求库: requests:用于发送HTTP请求并获取响应的流行库。它简单易用,适合大多数爬虫任务。urllib:Python的标准库之一,包含…

【云备份】文件操作实用工具类设计

文章目录 为什么要单独设计文件工具类?整体实现Filesize ——文件大小stat接口 LastMTime ——最后一次修改时间LastATime —— 最后一次访问时间FileName —— 文件名称GetPostLen ——获取文件指定位置 指定长度的数据GetContnet —— 读取文件数据SetContent ——…