CentOS7环境下DataX的安装、使用及问题解决

DataX概述

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

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

Datax架构设计

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

DataX 3.0 开源版本支持单机多线程模式完成同步作业运行,本小节按一个DataX作业生命周期的时序图,从整体架构设计非常简要说明DataX各个模块相互关系。

核心模块介绍

  1. DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataX Job模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。
  2. DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。
  3. 切分多个Task之后,DataX Job会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。
  4. 每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—>Channel—>Writer的线程来完成任务同步工作。
  5. DataX作业运行起来之后, Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0。

DataX与Sqoop对比

功能DataXSqoop
运行模式单进程多线程MR
分布式不支持,可以通过调度系统规避支持
流控有流控功能需要定制
统计信息已有一些统计,上报需定制没有,分布式的数据收集不方便
数据校验在core部分有校验功能没有,分布式的数据收集不方便
监控需要定制需要定制

DataX的安装

前提条件

  • Linux,这里使用CentOS7

  • JDK1.8及以上,这里使用JDK1.8

  • Python2.x,这里使用Python2.7

在node4机器上操作

下载DataX安装包(安装包有800+M)

[hadoop@node4 installfile]$ wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

解压

[hadoop@node4 installfile]$ tar -zxvf datax.tar.gz -C ~/soft/

查看解压后的文件

[hadoop@node4 installfile]$ ls ~/soft/
...
datax
...
​
[hadoop@node4 installfile]$ ls ~/soft/datax
bin  conf  job  lib  log  log_perf  plugin  script  tmp
​
[hadoop@node4 installfile]$ ls ~/soft/datax/bin/
datax.py  dxprof.py  perftrace.py
​
[hadoop@node4 installfile]$ ls ~/soft/datax/job
job.json
​

删除安装包

[hadoop@node4 installfile]$ rm -rf datax.tar.gz

运行官方自带案例

[hadoop@node4 installfile]$ python ~/soft/datax/bin/datax.py ~/soft/datax/job/job.json

执行报错如下:

​
2024-06-27 11:53:54.349 [main] WARN  ConfigParser - 插件[streamreader,streamwriter]加载失败,1s后重试... Exception:Code:[Common-00], Describe:[您提供的配置文件存在错误信息,请检查您的作业配置 .] - 配置信息错误,您提供的配置文件[/home/hadoop/soft/datax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的配置文件. 
2024-06-27 11:53:55.358 [main] ERROR Engine - 
​
经DataX智能分析,该任务最可能的错误原因是:
com.alibaba.datax.common.exception.DataXException: Code:[Common-00], Describe:[您提供的配置文件存在错误信息,请检查您的作业配置 .] - 配置信息错误,您提供的配置文件[/home/hadoop/soft/datax/plugin/reader/._drdsreader/plugin.json]不存在. 请检查您的配置文件.at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26)at com.alibaba.datax.common.util.Configuration.from(Configuration.java:95)at com.alibaba.datax.core.util.ConfigParser.parseOnePluginConfig(ConfigParser.java:153)at com.alibaba.datax.core.util.ConfigParser.parsePluginConfig(ConfigParser.java:125)at com.alibaba.datax.core.util.ConfigParser.parse(ConfigParser.java:63)at com.alibaba.datax.core.Engine.entry(Engine.java:137)at com.alibaba.datax.core.Engine.main(Engine.java:204)
​​

解决报错:

进入datax解压目录

[hadoop@node4 installfile]$ cd /home/hadoop/soft/datax

查找datax目录下文件名称带有er结尾的文件

[hadoop@node4 datax]$ find ./* -type f -name ".*er"
./plugin/._reader
./plugin/reader/._drdsreader
./plugin/reader/._hdfsreader
./plugin/reader/._otsstreamreader
./plugin/reader/._otsreader
./plugin/reader/._txtfilereader
./plugin/reader/._ftpreader
./plugin/reader/._streamreader
./plugin/reader/._odpsreader
./plugin/reader/._cassandrareader
./plugin/reader/._hbase11xreader
./plugin/reader/._oraclereader
./plugin/reader/._postgresqlreader
./plugin/reader/._mysqlreader
./plugin/reader/._rdbmsreader
./plugin/reader/._mongodbreader
./plugin/reader/._ossreader
./plugin/reader/._sqlserverreader
./plugin/reader/._hbase094xreader
./plugin/._writer
./plugin/writer/._oraclewriter
./plugin/writer/._ocswriter
./plugin/writer/._mysqlwriter
./plugin/writer/._postgresqlwriter
./plugin/writer/._rdbmswriter
./plugin/writer/._mongodbwriter
./plugin/writer/._osswriter
./plugin/writer/._adswriter
./plugin/writer/._hbase094xwriter
./plugin/writer/._sqlserverwriter
./plugin/writer/._hdfswriter
./plugin/writer/._otswriter
./plugin/writer/._drdswriter
./plugin/writer/._txtfilewriter
./plugin/writer/._cassandrawriter
./plugin/writer/._ftpwriter
./plugin/writer/._streamwriter
./plugin/writer/._odpswriter
./plugin/writer/._hbase11xsqlwriter
./plugin/writer/._hbase11xwriter

删除查到的文件

[hadoop@node4 datax]$ find ./* -type f -name ".*er"  | xargs rm -rf

再次运行测试命令,成功如下:

[hadoop@node4 datax]$ python ~/soft/datax/bin/datax.py ~/soft/datax/job/job.json
​
DataX (DATAX-OPENSOURCE-3.0), From Alibaba !
Copyright (C) 2010-2017, Alibaba Group. All Rights Reserved.
​
​
2024-06-27 12:13:32.138 [main] INFO  VMInfo - VMInfo# operatingSystem class => sun.management.OperatingSystemImpl
2024-06-27 12:13:32.145 [main] INFO  Engine - the machine info  => 
​osInfo: Oracle Corporation 1.8 25.212-b10jvmInfo:    Linux amd64 3.10.0-1160.el7.x86_64cpu num:    4
​totalPhysicalMemory:    -0.00GfreePhysicalMemory: -0.00GmaxFileDescriptorCount: -1currentOpenFileDescriptorCount: -1
​GC Names    [PS MarkSweep, PS Scavenge]
​MEMORY_NAME                    | allocation_size                | init_size                      PS Eden Space                  | 256.00MB                       | 256.00MB                       Code Cache                     | 240.00MB                       | 2.44MB                         Compressed Class Space         | 1,024.00MB                     | 0.00MB                         PS Survivor Space              | 42.50MB                        | 42.50MB                        PS Old Gen                     | 683.00MB                       | 683.00MB                       Metaspace                      | -0.00MB                        | 0.00MB                         
​
​
2024-06-27 12:13:32.162 [main] INFO  Engine - 
{"content":[{"reader":{"name":"streamreader","parameter":{"column":[{"type":"string","value":"DataX"},{"type":"long","value":19890604},{"type":"date","value":"1989-06-04 00:00:00"},{"type":"bool","value":true},{"type":"bytes","value":"test"}],"sliceRecordCount":100000}},"writer":{"name":"streamwriter","parameter":{"encoding":"UTF-8","print":false}}}],"setting":{"errorLimit":{"percentage":0.02,"record":0},"speed":{"byte":10485760}}
}
​
2024-06-27 12:13:32.191 [main] WARN  Engine - prioriy set to 0, because NumberFormatException, the value is: null
2024-06-27 12:13:32.193 [main] INFO  PerfTrace - PerfTrace traceId=job_-1, isEnable=false, priority=0
2024-06-27 12:13:32.193 [main] INFO  JobContainer - DataX jobContainer starts job.
2024-06-27 12:13:32.195 [main] INFO  JobContainer - Set jobId = 0
2024-06-27 12:13:32.226 [job-0] INFO  JobContainer - jobContainer starts to do prepare ...
2024-06-27 12:13:32.226 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] do prepare work .
2024-06-27 12:13:32.226 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] do prepare work .
2024-06-27 12:13:32.227 [job-0] INFO  JobContainer - jobContainer starts to do split ...
2024-06-27 12:13:32.228 [job-0] INFO  JobContainer - Job set Max-Byte-Speed to 10485760 bytes.
2024-06-27 12:13:32.229 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] splits to [1] tasks.
2024-06-27 12:13:32.230 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] splits to [1] tasks.
2024-06-27 12:13:32.258 [job-0] INFO  JobContainer - jobContainer starts to do schedule ...
2024-06-27 12:13:32.265 [job-0] INFO  JobContainer - Scheduler starts [1] taskGroups.
2024-06-27 12:13:32.267 [job-0] INFO  JobContainer - Running by standalone Mode.
2024-06-27 12:13:32.292 [taskGroup-0] INFO  TaskGroupContainer - taskGroupId=[0] start [1] channels for [1] tasks.
2024-06-27 12:13:32.305 [taskGroup-0] INFO  Channel - Channel set byte_speed_limit to -1, No bps activated.
2024-06-27 12:13:32.306 [taskGroup-0] INFO  Channel - Channel set record_speed_limit to -1, No tps activated.
2024-06-27 12:13:32.336 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] attemptCount[1] is started
2024-06-27 12:13:32.441 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] taskId[0] is successed, used[120]ms
2024-06-27 12:13:32.442 [taskGroup-0] INFO  TaskGroupContainer - taskGroup[0] completed it's tasks.
2024-06-27 12:13:42.303 [job-0] INFO  StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 253.91KB/s, 10000 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.054s |  All Task WaitReaderTime 0.077s | Percentage 100.00%
2024-06-27 12:13:42.303 [job-0] INFO  AbstractScheduler - Scheduler accomplished all tasks.
2024-06-27 12:13:42.304 [job-0] INFO  JobContainer - DataX Writer.Job [streamwriter] do post work.
2024-06-27 12:13:42.305 [job-0] INFO  JobContainer - DataX Reader.Job [streamreader] do post work.
2024-06-27 12:13:42.306 [job-0] INFO  JobContainer - DataX jobId [0] completed successfully.
2024-06-27 12:13:42.307 [job-0] INFO  HookInvoker - No hook invoked, because base dir not exists or is a file: /home/hadoop/soft/datax/hook
2024-06-27 12:13:42.310 [job-0] INFO  JobContainer - [total cpu info] => averageCpu                     | maxDeltaCpu                    | minDeltaCpu                    -1.00%                         | -1.00%                         | -1.00%​[total gc info] => NAME                 | totalGCCount       | maxDeltaGCCount    | minDeltaGCCount    | totalGCTime        | maxDeltaGCTime     | minDeltaGCTime     PS MarkSweep         | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s             PS Scavenge          | 0                  | 0                  | 0                  | 0.000s             | 0.000s             | 0.000s             
​
2024-06-27 12:13:42.311 [job-0] INFO  JobContainer - PerfTrace not enable!
2024-06-27 12:13:42.312 [job-0] INFO  StandAloneJobContainerCommunicator - Total 100000 records, 2600000 bytes | Speed 253.91KB/s, 10000 records/s | Error 0 records, 0 bytes |  All Task WaitWriterTime 0.054s |  All Task WaitReaderTime 0.077s | Percentage 100.00%
2024-06-27 12:13:42.315 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2024-06-27 12:13:32
任务结束时刻                    : 2024-06-27 12:13:42
任务总计耗时                    :                 10s
任务平均流量                    :          253.91KB/s
记录写入速度                    :          10000rec/s
读出记录总数                    :              100000
读写失败总数                    :                   0

DataX的使用

DataX任务提交命令

用户只需根据自己同步数据的数据源和目的地选择相应的Reader和Writer,并将Reader和Writer的信息配置在一个json文件中。提交命令如下:

python bin/datax.py path/to/your/job.json

DataX配置文件格式

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

[hadoop@node4 ~]$ cd ~/soft/datax/
[hadoop@node4 datax]$ pyhton bin/datax.py -r mysqlreader -w hdfswriter
​

查到文件模板如下:

{"job": {"content": [{"reader": {"name": "mysqlreader", "parameter": {"column": [], "connection": [{"jdbcUrl": [], "table": []}], "password": "", "username": "", "where": ""}}, "writer": {"name": "hdfswriter", "parameter": {"column": [], "compress": "", "defaultFS": "", "fieldDelimiter": "", "fileName": "", "fileType": "", "path": "", "writeMode": ""}}}], "setting": {"speed": {"channel": ""}}}
}

MySQL数据准备

需要准备MySQL8环境,并且能够远程连接。 可参考:安装MySQL8

建库建表操作:这里在node3机器上的mysql上操作

create database if not exists test;
use test;
drop table if exists stu;
create table stu (id int, name varchar(100), age int);
insert into stu values(1,"张三",18);
insert into stu values(2,"李四",20);
insert into stu values(3,"王五",21);
insert into stu values(4,"赵六",22);

同步MySQL数据到HDFS

要求:同步MySQL test数据库中stu表数据到HDFS的/stu目录。

编写配置文件

(1)创建配置文件stu.json

[hadoop@node4 ~]$ vim ~/soft/datax/job/stu.json

(2)配置文件内容如下

{"job": {"content": [{"reader": {"name": "mysqlreader","parameter": {"column": ["id","name","age"],"where": "id>=3","connection": [{"jdbcUrl": ["jdbc:mysql://node3:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8"],"table": ["stu"]}],"username": "root","password": "000000","splitPk": ""                        }},"writer": {"name": "hdfswriter","parameter": {"column": [{"name": "id","type": "int"},{"name": "name","type": "string"},{"name": "age","type": "int"}],"compress": "gzip","defaultFS": "hdfs://node2:9820","fieldDelimiter": "\t","fileName": "stu","fileType": "text","path": "/stu","writeMode": "append"}}}],"setting": {"speed": {"channel": 1}}}
}

 提交任务

(1)在HDFS创建/stu目录

[hadoop@node2 ~]$ start-dfs.sh
[hadoop@node2 ~]$ hadoop fs -mkdir /stu

(2)进入DataX根目录

[hadoop@node4 ~]$ cd ~/soft/datax
[hadoop@node4 datax]$ 

(3)执行如下命令

[hadoop@node4 datax]$ python bin/datax.py job/stu.json 

报错

2024-06-27 12:43:27.268 [job-0] WARN  DBUtil - test connection of [jdbc:mysql://node3:3306/test?serverTimezone=Asia/Shanghai&useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8] failed, for Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).].  -  具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server..

解决报错:

经过一番折腾,例如:配置bind-address=0.0.0.0,依然同样的报错。

发现Root Cause是MySQL驱动版本不兼容的问题。

查看mysqlreader/libs下的驱动包

[hadoop@node4 datax]$ ls plugin/reader/mysqlreader/libs/
commons-collections-3.0.jar      druid-1.0.15.jar            logback-core-1.0.13.jar
commons-io-2.4.jar               fastjson-1.1.46.sec01.jar   mysql-connector-java-5.1.34.jar
commons-lang3-3.3.2.jar          guava-r05.jar               plugin-rdbms-util-0.0.1-SNAPSHOT.jar
commons-math3-3.1.1.jar          hamcrest-core-1.3.jar       slf4j-api-1.7.10.jar
datax-common-0.0.1-SNAPSHOT.jar  logback-classic-1.0.13.jar
[hadoop@node4 datax]$ 

发现驱动包是mysql5版本的

mysql-connector-java-5.1.34.jar

换成mysql8版本的驱动包

mysql-connector-j-8.0.31.jar

将mysql8驱动包上传到plugin/reader/mysqlreader/libs目录下,同时删除或重命名mysql5的驱动包(重命名后让mysql5驱动不可用),这里重命名mysql5驱动包。

[hadoop@node4 datax]$ mv plugin/reader/mysqlreader/libs/mysql-connector-java-5.1.34.jar plugin/reader/mysqlreader/libs/mysql-connector-java-5.1.34.jar.bak
[hadoop@node4 datax]$ ls plugin/reader/mysqlreader/libs/
commons-collections-3.0.jar      druid-1.0.15.jar            logback-core-1.0.13.jar
commons-io-2.4.jar               fastjson-1.1.46.sec01.jar   mysql-connector-j-8.0.31.jar
commons-lang3-3.3.2.jar          guava-r05.jar               mysql-connector-java-5.1.34.jar.bak
commons-math3-3.1.1.jar          hamcrest-core-1.3.jar       plugin-rdbms-util-0.0.1-SNAPSHOT.jar
datax-common-0.0.1-SNAPSHOT.jar  logback-classic-1.0.13.jar  slf4j-api-1.7.10.jar
​

重新执行成功如下

[hadoop@node4 datax]$ python bin/datax.py job/stu.json
...
...
...
2024-06-28 00:30:48.367 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2024-06-28 00:30:35
任务结束时刻                    : 2024-06-28 00:30:48
任务总计耗时                    :                 13s
任务平均流量                    :                1B/s
记录写入速度                    :              0rec/s
读出记录总数                    :                   2
读写失败总数                    :                   0
​

查看hdfs数据

[hadoop@node2 ~]$ hdfs dfs -cat /stu/* | zcat
2024-06-28 00:39:43,030 INFO sasl.SaslDataTransferClient: SASL encryption trust check: localHostTrusted = false, remoteHostTrusted = false
3   王五  21
4   赵六  22

同步HDFS数据到MySQL

要求:同步HDFS上的/stu目录下的数据到MySQL test数据库下的stu1表。

在MySQL中创建test.stu1表

create database if not exists test;
use test;
drop table if exists stu1;
create table stu1 like stu;

编写配置文件

(1)创建配置文件stu1.json

[hadoop@node4 ~$ vim ~/soft/datax/job/stu1.json

(2)配置文件内容如下

{"job": {"content": [{"reader": {"name": "hdfsreader","parameter": {"defaultFS": "hdfs://node2:9820","path": "/stu","column": ["*"],"fileType": "text","compress": "gzip","encoding": "UTF-8","nullFormat": "\\N","fieldDelimiter": "\t",}},"writer": {"name": "mysqlwriter","parameter": {"username": "root","password": "000000","connection": [{"table": ["stu1"],"jdbcUrl": "jdbc:mysql://node3:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&useUnicode=true&allowPublicKeyRetrieval=true&characterEncoding=utf-8"}],"column": ["id","name","age"],"writeMode": "replace"}}}],"setting": {"speed": {"channel": 1}}}
}

执行同步数据任务

[atguigu@hadoop102 datax]$ cd ~/soft/datax
[atguigu@hadoop102 datax]$ python bin/datax.py job/stu1.json 

报错

2024-06-28 00:48:40.431 [job-0] ERROR RetryUtil - Exception when calling callable, 异常Msg:Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).].  -  具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.
com.alibaba.datax.common.exception.DataXException: Code:[DBUtilErrorCode-10], Description:[连接数据库失败. 请检查您的 账号、密码、数据库名称、IP、Port或者向 DBA 寻求帮助(注意网络环境).].  -  具体错误信息为:com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Could not create connection to database server.at com.alibaba.datax.common.exception.DataXException.asDataXException(DataXException.java:26) ~[datax-common-0.0.1-SNAPSHOT.jar:na]
​

查看writer下的mysql驱动,发现也是mysql5的驱动mysql-connector-java-5.1.34.jar

[hadoop@node4 datax]$ ls plugin/writer/mysqlwriter/libs/
commons-collections-3.0.jar      druid-1.0.15.jar            logback-core-1.0.13.jar
commons-io-2.4.jar               fastjson-1.1.46.sec01.jar   mysql-connector-java-5.1.34.jar
commons-lang3-3.3.2.jar          guava-r05.jar               plugin-rdbms-util-0.0.1-SNAPSHOT.jar
commons-math3-3.1.1.jar          hamcrest-core-1.3.jar       slf4j-api-1.7.10.jar
datax-common-0.0.1-SNAPSHOT.jar  logback-classic-1.0.13.jar
​

复制mysql8的驱动到writer的libs目录,并重命名mysql5驱动

​
[hadoop@node4 datax]$ cp plugin/reader/mysqlreader/libs/mysql-connector-j-8.0.31.jar plugin/writer/mysqlwriter/libs/
​
[hadoop@node4 datax]$ mv plugin/writer/mysqlwriter/libs/mysql-connector-java-5.1.34.jar plugin/writer/mysqlwriter/libs/mysql-connector-java-5.1.34.jar.bak
​
[hadoop@node4 datax]$ ls plugin/writer/mysqlwriter/libs/
commons-collections-3.0.jar      druid-1.0.15.jar            logback-core-1.0.13.jar
commons-io-2.4.jar               fastjson-1.1.46.sec01.jar   mysql-connector-j-8.0.31.jar
commons-lang3-3.3.2.jar          guava-r05.jar               mysql-connector-java-5.1.34.jar.bak
commons-math3-3.1.1.jar          hamcrest-core-1.3.jar       plugin-rdbms-util-0.0.1-SNAPSHOT.jar
datax-common-0.0.1-SNAPSHOT.jar  logback-classic-1.0.13.jar  slf4j-api-1.7.10.jar
​

重新执行

[hadoop@node4 datax]$ python bin/datax.py job/stu1.json

DataX打印日志

2024-06-28 00:57:08.442 [job-0] INFO  JobContainer - 
任务启动时刻                    : 2024-06-28 00:56:55
任务结束时刻                    : 2024-06-28 00:57:08
任务总计耗时                    :                 12s
任务平均流量                    :                1B/s
记录写入速度                    :              0rec/s
读出记录总数                    :                   2
读写失败总数                    :                   0

查看node3 MySQL表stu1表数据,能看到从hdfs导入到mysql的数据。

mysql> select * from stu1;
+------+--------+------+
| id   | name   | age  |
+------+--------+------+
|    3 | 王五   |   21 |
|    4 | 赵六   |   22 |
+------+--------+------+
2 rows in set (0.00 sec)

导入导出到数据库时,注意修改reader和writer下的mysql驱动版本改为连接mysql所需要的驱动版本。

完成!enjoy it!

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

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

相关文章

eclipse断点调试(用图说话)

eclipse断点调试(用图说话) debug方式启动项目,后端调试bug调试 前端代码调试,请参考浏览器断点调试(用图说话) 1、前端 选中一条数据,点击删除按钮 2、后端接口打断点 断点按钮 介绍 resum…

236、二叉树的最近公共祖先

前提: 所有 Node.val 互不相同 。p ! qp 和 q 均存在于给定的二叉树中。 代码如下: class Solution { public:TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {if (root q || root p || root NULL) return root;TreeN…

.NET周刊【6月第5期 2024-06-30】

国内文章 呼吁改正《上海市卫生健康信息技术应用创新白皮书》 C# 被认定为A 组件 的 错误认知 https://www.cnblogs.com/shanyou/p/18264292 近日,《上海市卫生健康“信息技术应用创新”白皮书》发布,提到医疗信创核心应用适配方法及公立医院信息系统…

书城在线系统:基于Java和SSM框架的高效信息管理平台

开头语:你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:SSM框架(Spring, Spring MVC, Mybatis) 工具&…

eNSP中WLAN的配置和使用

一、基础配置 1.拓扑图 2.VLAN和IP配置 a.R1 <Huawei>system-view [Huawei]sysname R1 GigabitEthernet 0/0/0 [R1-GigabitEthernet0/0/0]ip address 200.200.200.200 24 b.S1 <Huawei>system-view [Huawei]sysname S1 [S1]vlan 100 [S1-vlan100]vlan 1…

使用瀚高数据库开发管理工具进行数据的备份与恢复---国产瀚高数据库工作笔记008

使用瀚高数据库,备份 恢复数据 然后找到对应的目录 其实就是hgdbdeveloper,瀚高的数据库开发管理工具 对应的包中有个dbclient 这个目录,选中这个目录以后,就可以了,然后 在对应的数据库,比如 data_middle 中,选中 某个模式,比如bigdata_huiju 然后右键进行,点击 恢复,然…

Verilog开源项目——百兆以太网交换机(五)TCAM单元设计

Verilog开源项目——百兆以太网交换机&#xff08;五&#xff09;TCAM单元设计 &#x1f508;声明&#xff1a;未经作者允许&#xff0c;禁止转载 &#x1f603;博主主页&#xff1a;王_嘻嘻的CSDN主页 &#x1f511;全新原创以太网交换机项目&#xff0c;Blog内容将聚焦整体架…

核心实验:基于Web前端的性能测试分析!

实验简介 本实验主要利用IE和Chrome的F12开发人员工具结合Web前端测试分析相关知识&#xff0c;对常见网站进行基于前端的性能测试分析&#xff0c;本实验将不会使用到测试开发相关技术&#xff0c;而是纯粹意义上的手工测试&#xff0c;但却是很容易找到系统前端性能及设计问…

C++字体库开发

建议根据字体需求&#xff0c;多个组合使用。高度定制可基于freeTypeharfbuzz基础库完成。 GitHub - GNOME/pango: Read-only mirror of https://gitlab.gnome.org/GNOME/pango GitHub - googlefonts/fontview: Demo app that displays fonts with a free/libre/open-source …

实用软件分享-----一款免费的投屏软件(支持手机投屏到电脑)Aiseesoft Phone Mirror 2.2.36 x64

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

H616连接摄像头

&#xff08;1&#xff09;首先将USB摄像头连接到OrangePi开发板的USB接口 &#xff08;2&#xff09;通过lsmod命令查看是否加载了uvcvideo模块 lsmod | grep video &#xff08;3&#xff09;通过 v4l2-ctl 命令可以看到 USB 摄像头的设备节点信息为/dev/video0 sudo apt u…

Redis---保证主从节点一致性问题 +与数据库数据保持一致性问题

保证主从节点一致性问题 Redis的同步方式默认是异步的&#xff0c;这种异步的同步方式导致了主从之间的数据存在一定的延迟&#xff0c;因此Redis默认是弱一致性的。 解决&#xff1a; 1.使用Redisson这样的工具&#xff0c;它提供了分布式锁的实现&#xff0c;确保在分布式环…

代码生成器使用指南,JeecgBoot低代码平台

JeecgBoot 提供强大的代码生成器&#xff0c;让前后端代码一键生成&#xff0c;实现低代码开发。支持单表、树列表、一对多、一对一等数据模型&#xff0c;增删改查功能一键生成&#xff0c;菜单配置直接使用。 同时提供强大模板机制&#xff0c;支持自定义模板&#xff0c;目…

Python 基础 (标准库):heapq (堆)

1. 官方文档 heapq --- 堆队列算法 — Python 3.12.4 文档 2. 相关概念 堆 heap 是一种具体的数据结构&#xff08;concrete data structures&#xff09;&#xff1b;优先级队列 priority queue 是一种抽象的数据结构&#xff08;abstract data structures&#xff09;&…

在非 antd pro 项目中使用 umi OpenAPI

大家好&#xff0c;我是松柏。自从跟着鱼皮哥使用了ant design pro中的OpenAPI插件之后&#xff0c;我已经无法忍受自己写请求后端接口的方法了&#xff0c;所以这篇文章记录一下如何在非ant design pro项目中使用OpenAPI。 安装依赖 首先我们需要安装包umijs/openapi&#x…

上交举办“大模型奥林匹克竞赛”,GPT-4o仅得39分

大模型的奥林匹克竞赛来了&#xff01; 最近&#xff0c;上交构建了一个全面、极具挑战性的奥赛级别的基准——OlympicArena&#xff0c;从来自62个不同奥林匹克竞赛中筛选出11,163个问题&#xff0c;涵盖数学、物理、化学、生物、地理、天文学和计算机科学等七个学科&#xf…

[22] Opencv_CUDA应用之 使用背景相减法进行对象跟踪

Opencv_CUDA应用之 使用背景相减法进行对象跟踪 背景相减法是在一系列视频帧中将前景对象从背景中分离出来的过程&#xff0c;它广泛应用于对象检测和跟踪应用中去除背景 背景相减法分四步进行&#xff1a;图像预处理 -> 背景建模 -> 检测前景 -> 数据验证 预处理去除…

AD9026芯片开发实录6-example code

官方发布的软件包中&#xff0c;带了一份example code&#xff0c;用于向客户展示API的调用方法以及基于官方的验证版ADRV902X最简单的bring up的流程。 该 example 位于软件包的路径下&#xff1a;“\Adi.Adrv9025.Api\src\c_src\app\example\”。 代码组成&#xff1a; initd…

使用ElementUI组件库

引入ElementUI组件库 1.安装插件 npm i element-ui -S 2.引入组件库 import ElementUI from element-ui; 3.引入全部样式 import element-ui/lib/theme-chalk/index.css; 4.使用 Vue.use(ElementUI); 5.在官网寻找所需样式 饿了么组件官网 我这里以button为例 6.在组件中使用…

【QT】常用控件|widget|QPushButton|RadioButton|核心属性

目录 ​编辑 概念 信号与槽机制 控件的多样性和定制性 核心属性 enabled geometry ​编辑 windowTiltle windowIcon toolTip styleSheet PushButton RadioButton 概念 QT 控件是构成图形用户界面&#xff08;GUI&#xff09;的基础组件&#xff0c;它们是实现与…