Datax从mysql同步数据到HDFS

news2024/9/28 7:18:48

 在实际使用Datax的时候,比较常用的是同步业务数据(mysql中的数据)到HDFS来实现数仓的创建,那么怎么实现呢?我们一步步来实现(基于Datax 3.0.0)

1、检查环境,需要安装完一个Datax,一个mysql,安装hadoop以及hive
2、在mysql中创建源表,并在原表中插入数据,我们的目标是把源表的mysql数据同步到HDFS中,我们当前测试表如下

源数据库:test

源表结构:

CREATE TABLE `test` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(100) DEFAULT NULL,
  `score` decimal(10,0) DEFAULT NULL,
  `update_time` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8

插入数据如下

3、在datax同步之前需要在hive上创建数据库和表,否则会报错,创建语句如下,注意分隔符用\001用来避免数据中含有分隔符,ORC是最后存储hive的格式,我们创建表的时候也要是ORC格式,目前datax插入HDFS只支持用户配置为"text"或"orc"。

create database test

CREATE TABLE IF NOT EXISTS test.test(id int comment '主键',name string comment '名称', score double comment 'fen' , update_time string comment 'time') COMMENT 'Employee details'  ROW FORMAT DELIMITED FIELDS TERMINATED BY '\001' LINES TERMINATED BY '\n' STORED AS ORC ;

4、我们在安装Datax的服务器上创建json文件,我们文件创建在/opt/datax/job目录下,开发者可自定义保存文件路径

vim mysql2hdfs.json

文件内容如下(需要修改的或者重要的已标红,大家直接修改即可)

{
    "job": {
        "content": [
            {
                "reader": {
                    "name": "mysqlreader",
                    "parameter": {
                        "username": "root",
                        "password": "root",

                        "connection": [
                            {
                                "querySql": [
                                    "select id,name,score,update_time from test;"
                                ],
                                "jdbcUrl": [
                                    "jdbc:mysql://node01:3306/datax"
                                ]
                            }
                        ]
                    }
                },

                "writer": {
                    "name": "hdfswriter",
                    "parameter": {
                        "column": [
                            {
                                "name": "id",
                                "type": "bigint"
                            },
                            {
                                "name": "name",
                                "type": "string"
                            },
                            {
                                "name": "score",
                                "type": "double"
                            },
                            {
                                "name": "update_time",
                                "type": "string"
                            }
                        ],

                        "defaultFS": "hdfs://node01:8020",
                        "fieldDelimiter": ",",
                        "fileName": "test",
                        "fileType": "orc",
                        "path": "/user/hive/warehouse/test.db/test",
                        "writeMode": "append"

                    }
                }
            }
        ],
        "setting": {
            "speed": {
                "channel": 1
            }
        }
    }
}
 

注意类型如下

 

标红解释如下:

jdbcUrl:数据库的jdbcurl链接

username:mysql用户名

password:mysql用户登陆密码

querySql:mysqlreader中的参数,用作自定义sql,根据sql的灵活编写实现数据的增量、全量、特定列数据的同步,注意需要sql和mysqlwriter中的column字段数量、名称、类型需要对应上

defaultFS:Hadoop hdfs文件系统namenode节点地址。格式:hdfs://ip:端口;例如:hdfs://127.0.0.1:9000

fieldDelimiter:hdfswriter写入时的字段分隔符

fileName:HdfsWriter写入时的文件名,实际执行时会在该文件名后添加随机的后缀作为每个线程写入实际文件名
fileType:文件的类型,目前只支持用户配置为"text"或"orc"
path:存储到Hadoop hdfs文件系统的路径信息,HdfsWriter会根据并发配置在Path目录下写入多个文件。为与hive表关联,请填写hive表在hdfs上的存储路径。例:Hive上设置的数据仓库的存储路径为:/user/hive/warehouse/ ,已建立数据库:test,表:hello;则对应的存储路径为:/user/hive/warehouse/test.db/hello
writeMode:hdfswriter写入前数据清理处理模式,有以下3种:
         1) append,写入前不做任何处理,DataX hdfswriter直接使用filename写入,并保证文件名不冲突。
         2)nonConflict,如果目录下有fileName前缀的文件,直接报错。
         3)truncate,如果目录下有fileName前缀的文件,先删除后写入。

5、执行Datax,首先去到Datax的bin目录,然后执行

python /opt/datax/bin/datax.py /opt/datax/job/mysql2hdfs.json

6、看到如下则证明执行成功

 7、在hive种查询数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1026112.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络基础面试题

1. ISO/OSI的七层模型 ISO国际标准化组织 OSI开放系统互连 TCP和UDP都会进行差错校验,TCP会告诉A包发错了,但UDP不会告诉A发错了会把包丢弃。 静态路由不需要路由器做任何的计算,对路由器的消耗是最小的,效率最高但是缺点是…

Qt开发 - Qt基础类型

1.基础类型 因为Qt是一个C 框架, 因此C中所有的语法和数据类型在Qt中都是被支持的, 但是Qt中也定义了一些属于自己的数据类型, 下边给大家介绍一下这些基础的数类型。 QT基本数据类型定义在#include <QtGlobal> 中&#xff0c;QT基本数据类型有&#xff1a; 虽然在Qt中…

“智能制造进园区·浙江站和专家行”活动成功举办

为进一步加强央地联动&#xff0c;强化智能制造系统推进格局&#xff0c;促进重点区域行业智能制造供需对接&#xff0c;2023年9月12日-15日&#xff0c;在工业和信息化部装备工业一司指导下&#xff0c;由国家智能制造专家委员会、浙江省经济和信息化厅、智能制造系统解决方案…

专访中欧财富伍春兰:财富管理行业数字化转型升级,数据库如何选型?

以下文章来源于InfoQ数字化经纬。 InfoQ数字化经纬&#xff1a; InfoQ极客传媒旗下官方账号。面向数字化管理者、从业者、洞察者&#xff0c;提供数字化企业案例、政策解读、研究报告&#xff0c;做数字时代的「记录者」。 作者 | 赵钰莹 嘉宾 | 伍春兰 中欧财富技术总监 …

如何在微信上制作自己的小程序卖东西

在当今的数字化时代&#xff0c;微信小程序已成为电商行业的重要平台。本文将详细解析电商微信小程序的制作流程&#xff0c;帮助你了解从零到上线的过程。 一、前期准备 1. 确定商城定位和目标群体&#xff1a;在制作电商微信小程序前&#xff0c;你需要明确商城的定位&#x…

解决连接数据库提示:Public Key Retrieval is not allowed

最近在使用新的用户连接mysql时&#xff0c;总是提示&#xff1a;Public Key Retrieval is not allowed 解决方法一&#xff1a;在&#xff08;连接属性&#xff09;添加allowPublicKeyRetrievaltrue 解决方法二&#xff08;不建议&#xff09;&#xff1a;先在cmd上登录

爬虫 — Js 逆向案例五闪职网登录

目标网站&#xff1a;http://shanzhi.spbeen.com/login/ 需求&#xff1a;找到密码加密的过程&#xff0c;进行加密 案例分析 1、多输入几次错误的密码&#xff0c;查看哪些字段是加密的。 2、如何没有 Search 到相关的字段&#xff0c;可以在 JS 里面找一找。 3、如果看到 JS…

广东深圳建筑模板厂家-能强优品木业

深圳作为中国经济腾飞的重要城市&#xff0c;建筑业一直是该地区的重点发展领域。在建筑施工过程中&#xff0c;建筑模板是不可或缺的关键组成部分。于是&#xff0c;广东深圳拥有一家备受赞誉的建筑模板厂家&#xff0c;为当地建筑行业提供优质产品和服务。这家建筑模板厂家就…

rtsp转webrtc的其他几个项目

1&#xff09; mpromonet/webrtc-streamer &#xff08;c开发&#xff09; 把rtsp转webrtc&#xff0c; 通过 load urls from JSON config file ./webrtc-streamer -C config.json 通过exe文件和docker项目实际测试可以显示&#xff0c;但不太稳定加载慢,有时候出错后很难…

Redis 面霸篇:从高频问题透视核心原理

Redis 为什么这么快&#xff1f; 很多人只知道是 K/V NoSQl 内存数据库&#xff0c;单线程……这都是没有全面理解 Redis 导致无法继续深问下去。 这个问题是基础摸底&#xff0c;我们可以从 Redis 不同数据类型底层的数据结构实现、完全基于内存、IO 多路复用网络模型、线程…

go 语言 负载均衡 为反向代理添加负载均衡 拓展ReverseProxy

随机负载 package randomimport ("errors""math/rand" )type RandomBalance struct {//当前索引curIndex int//存储负载均衡的地址rss []string//观察主体//conf LoadBalanceConf }func (r *RandomBalance) Add(params ...string) error {if len(params) …

华为OD机试 - 靠谱的车 - 逻辑分析(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2023B卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷&#…

【Phoenix】phoenix实现每个Primarykey主键保留N版本数据,CDC数据记录为Changelog格式

一、背景&#xff1a; CDC数据中包含了&#xff0c;数据的变更过程。当CDC写入传统数据库最终每一个primary key下会保存一条数据。当然可以使用特殊手段保存多分记录但是显然造成了数据膨胀。 另外数据湖Hudi(0.13.1)是不支持保存所有Changelog其Compaction机制会清除所有旧版…

语义分割笔记(二):DeepLab V3对图像进行分割(自定义数据集从零到一进行训练、验证和测试)

文章目录 一、语义分割介绍1.1 语义分割和实例分割的区别1.2 DeepLab系列对比 二、代码下载2.1 代码测试2.2 视频学习 三、数据集准备3.1 Json转png3.2 数据集划分 四、模型训练五、模型测试六、模型评估 一、语义分割介绍 语义分割是计算机视觉中的一项技术&#xff0c;旨在将…

在windows下持续ping ip,将返回结果及时间记录到文件中

在纯英文路径下创建文件ping.txt 在txt中写入 Dim args, flag, unsuccOut args"" otherout"" flag0If WScript.Arguments.count 0 Then WScript.Echo "Usage: cscript tping.vbs [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS]" WScr…

java中的自定义对象排序

对于数组排序我们知道有Arrays.sort()方法&#xff0c;但是如果遇到想要对一个对象数组中的某个属性进行排序&#xff0c;我们该如何去做呢&#xff1f; 以给学生成绩排序为例&#xff0c;首先创建一个存储学生对象的数组。 package JAVA_API;public class Sort_oop {public …

解密Java多线程中的锁机制:CAS与Synchronized的工作原理及优化策略

目录 CAS什么是CASCAS的应用ABA问题异常举例 Synchronized 原理基本特征加锁过程偏向锁轻量级锁重量级锁 其他优化操作锁消除锁粗化 CAS 什么是CAS CAS: 全称Compare and swap&#xff0c;字面意思:”比较并交换“&#xff0c;CAS涉及如下操作&#xff1a; 假设内存中的原数据…

7、DVWA——SQL盲注

文章目录 一、概述二、low2.1 通关思路&#xff08;布尔盲注&#xff09;&#xff08;1&#xff09;判断是否存在SQL注入漏洞&#xff08;2&#xff09;判断属于数字型注入还是字符型注入&#xff08;3&#xff09;判断结果集中的字段数&#xff08;4&#xff09;猜数据库名长度…

常见的排序算法及时间空间复杂度

排序算法是计算机科学中的基本算法之一&#xff0c;它用于将一组数据按照某种顺序进行排列。下面是一些常见的排序算法&#xff0c;以及它们的思想和时间空间复杂度&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢…

c++qt day11

通过代码实现电子钟表 头文件 #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include<QPaintEvent> #include<QDebug> #include<QPainter> #include<QFont> #include<QTime> #include<QTimer>QT_BEGIN_NAMESPACE namespa…