一、介绍
1、DataX
DataX 是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能
2、支持的数据源
3、框架
4、Sqoop对比
二、安装
下载地址:
下载地址:http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz
源码地址:https://github.com/alibaba/DataX
解压:
tar -zxvf datax.tar.gz -C 目标文件夹
自检
cd 目标文件夹/datax/bin/
python datax.py /opt/module/datax/job/job.json
三、使用示例
1、mysql -> hdfs
示例json
{
"job": {
"content": [
{
"reader": {
"name": "mysqlreader",
"parameter": {
"column": [
"id", --列名
"name"
],
"connection": [
{
"jdbcUrl": [
"jdbc:mysql://hadoop102:3306/datax"
],
"table": [
"student" --表名
]
--"querySql":[] --自动以sql,配置后直接忽略table,column,where
}
],
"username": "root",
"password": "******",
"where": "day>'2022-10-07'" --条件
}
},
"writer": {
"name": "hdfswriter",
"parameter": {
"column": [
{
"name": "id",
"type": "int"
},
{
"name": "name",
"type": "string"
}
],
"defaultFS": "hdfs://hadoop102:9000", --namenode节点地址
"fieldDelimiter": "\t", --字段分隔符
"fileName": "student.txt", --写入文件名
"fileType": "text", --文件类型
"path": "/mysql/", --在hdfs上的地址
"writeMode": "append" --写入前数据清理模式:append->追加 nonConflict -> 如果有该文件名,报错
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
执行
bin/datax.py json所在文件夹/mysql2hdfs.json
结果
注意:HdfsWriter实际执行时会在该文件名后添加随机的后缀作为每个线程写入实际文件名
修改hdfs上的文件名:
hadoop fs -mv /student.txt* /student.txt
配置高可用
"hadoopConfig":{
"dfs.nameservices": "ns",
"dfs.ha.namenodes.ns": "nn1,nn2",
"dfs.namenode.rpc-address.ns.nn1": "主机名:端口",
"dfs.namenode.rpc-address.ns.nn2": "主机名:端口",
"dfs.client.failover.proxy.provider.ns": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"
}
2、hdfs -> mysql
1、示例json
{
"job": {
"content": [
{
"reader": {
"name": "hdfsreader",
"parameter": {
"column": ["*"],
"defaultFS": "hdfs://hadoop102:9000",
"encoding": "UTF-8",
"fieldDelimiter": "\t",
"fileType": "text",
"path": "/student.txt"
}
},
"writer": {
"name": "mysqlwriter",
"parameter": {
"column": [
"id",
"name"
],
"connection": [
{
"jdbcUrl": "jdbc:mysql://hadoop102:3306/datax",
"table": ["student2"]
}
],
"password": "******",
"username": "root",
"writeMode": "insert"
}
}
}
],
"setting": {
"speed": {
"channel": "1"
}
}
}
}
四、优化
job.setting.speed.channel : channel并发数
并发数 = taskGroup的数量 * 每个TaskGroup并发执行的Task数 (默认为5)。
job.setting.speed.record : 2全局配置channel的record限速
job.setting.speed.byte:全局配置channel的byte限速
core.transport.channel.speed.record:单个channel的record限速
core.transport.channel.speed.byte:单个channel的byte限速