dataX基本使用

简介:DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL、Oracle、HDFS、Hive、OceanBase、HBase、OTS、ODPS 等各种异构数据源之间高效的数据同步功能。DataX采用了框架 + 插件 的模式,目前已开源,代码托管在github

地址:https://github.com/alibaba/DataX

一.DataX安装部署

1.下载压缩包:

下载页面地址:https://github.com/alibaba/DataX 在页面中【Quick Start】--->【Download DataX下载地址】进行下载。下载后的包名:datax.tar.gz。解压后{datax}目录下有{bin conf job lib log log_perf plugin script tmp}几个目录。


2.安装

将下载后的压缩包直接解压后可用,前提是对应的java及python环境满足要求。
    JDK(1.6以上,推荐1.6)
    Python(推荐Python2.6.X)一定要为python2,因为后面执行datax.py的时候,里面的python的print会执行不了,导致运行不成功,会提示你print语法要加括号,python2中加不加都行 python3中必须要加,否则报语法错

另外要注意, 不要解压到C:\Program Files目录下或其他名字带空格的目录下,因为在cmd执行时会因为路径有空格导致找不到程序主文件。

DataX支持绝大部分种类数据库的数据转移,其数据转移的主要流程有三步:Reader -->transform-->writer

reader 从数据库读取需要转移的数据;
transform 在数据同步、传输过程中,存在用户对于数据传输进行特殊定制化的需求场景,包括裁剪列、转换列等工作,这些工作在这里进行;
writer 将读取并处理后的数据写入目标数据库;

二.使用示例

DataX是通过读取配置文件进行数据转移,配置文件为json格式

注:可查看模版 https://github.com/alibaba/DataX/blob/master/userGuid.md

2.1 mysql_hive

#执行方式  python datax.py ./hive_mysql.json 
{
"job": {
		"setting": {
			"speed": {
				"channel": 3
			},
			"errorLimit": {
				"record": 0,
				"percentage": 0.02
			},
			"content": [{
				"reader": {
					"name": "mysqlreader",
					"parameter": {
						"username": "mysql_user",
						"password": "mysql_passwd",
						"column": "*",
						"connection": [{
							"jdbcUrl": "jdbc:mysql://xx-xx-xx:3306/database_name?useUnicode=true&characterEncoding=utf-8",
							"table": ["table_name"]
						}]
					}
				},
				"writer": {
					"name": "hdfswriter",
					"parameter": {
						"path": "/home/hive/warehouse/database_name.db/table_name/*",
						"defaultFS": "hdfs://hadoop1:8020",
						"column": "*",
						"fileType": "orc",
						"encoding": "UTF-8",
						"fieldDelimiter": ",",
						"fileName": "table_name",
						"writeMode": "append"
					}
				}
			}]
		}
	}
}

 

2.2 获取hive表 字段类型格式

#!/usr/bin/env /python
# -*- coding:utf-8 -*-
# Author:dyf
import json
import os
from optparse import OptionParser
'''
使用方式 
python datax_table.py --ttable database_name.table_name
'''

def parse_params():
    parser = OptionParser()
    parser.add_option('--columns', dest="columns", default='')
    parser.add_option('--preSql', dest="preSql", default='')
    parser.add_option('--connect', dest="jdbc_url", default='')
    parser.add_option('--username', dest="user", default='')
    parser.add_option('--password', dest="password", default='')
    parser.add_option('--stable', dest="stable", default='')
    parser.add_option('--ttable', dest="ttable", default='')
    parser.add_option('--query', dest="query", default='')
    (options, args) = parser.parse_args()
    return options

sysarg = parse_params()
cols = []
print "hive -e 'desc {} '".format(sysarg.ttable)
desc_tbl = os.popen("hive -e 'desc {} '".format(sysarg.ttable)).read()

print desc_tbl
columns = []
index = 0
hcols =[]
for desc_col in desc_tbl.split("\n"):
  if len(desc_col.strip())>0 :
    col = {}
    col["index"] = "" + str(index)
    col["type"] = "string"
    cols.append(col)
    columns.append(desc_col.split("\t")[0].strip())
    hcol = {}
    hcol["name"] = desc_col.split("\t")[0].strip()
    type = desc_col.split("\t")[1].strip()
    type = 'DOUBLE' if 'decimal' in type.lower() else type
    type = 'INT' if 'tinyint' in type.lower() else type
    hcol["type"] = type
    hcols.append(hcol)
    index = index + 1
print json.dumps(hcols, sort_keys=True, indent=2)
#print hcols
print "----"*5

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot整合DataX可以实现数据同步和迁移的功能。下面是整合步骤: 1. 添加DataX依赖:在pom.xml文件中添加DataX的相关依赖。 ```xml <dependency> <groupId>com.alibaba</groupId> <artifactId>datax</artifactId> <version>3.0.0</version> </dependency> ``` 2. 创建DataX的配置文件:在resources目录下创建datax文件夹,并在该文件夹下创建job.json文件,用于配置数据同步任务的详细信息。 ```json { "job": { "setting": { "speed": { "channel": 3 } }, "content": [ { "reader": { "name": "mysqlreader", "parameter": { "username": "your_username", "password": "your_password", "column": [ "column1", "column2", ... ], "connection": [ { "querySql": [ "SELECT * FROM your_table" ], "jdbcUrl": [ "jdbc:mysql://your_host:your_port/your_database?useSSL=false", ] } ] } }, "writer": { "name": "mysqlwriter", "parameter": { "username": "your_username", "password": "your_password", "writeMode": "insert", "column": [ "column1", "column2", ... ], "connection": [ { "jdbcUrl": "jdbc:mysql://your_host:your_port/your_database?useSSL=false", } ] } } } ] } } ``` 注意:根据实际情况修改配置文件中的参数,如数据库连接信息、表名、字段等。 3. 创建DataX任务执行类:创建一个DataX任务执行的类,用于调用DataX的执行命令来执行数据同步任务。 ```java import org.apache.commons.exec.CommandLine; import org.apache.commons.exec.DefaultExecutor; public class DataXExecutor { public static void executeJob(String jobPath) { CommandLine cmd = new CommandLine("python"); cmd.addArgument("${datax_home}/bin/datax.py"); cmd.addArgument(jobPath); DefaultExecutor executor = new DefaultExecutor(); int exitValue; try { exitValue = executor.execute(cmd); if (exitValue != 0) { throw new RuntimeException("DataX job execution failed."); } } catch (Exception e) { throw new RuntimeException("DataX job execution failed.", e); } } } ``` 4. 在Spring Boot应用中调用DataX任务执行类:在需要执行数据同步任务的地方调用DataX任务执行类的executeJob方法。 ```java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class DataXApplication { public static void main(String[] args) { // 执行DataX任务 DataXExecutor.executeJob("classpath:datax/job.json"); // 启动Spring Boot应用 SpringApplication.run(DataXApplication.class, args); } } ``` 这样,当应用启动时,会执行DataX任务,实现数据同步和迁移的功能。 以上是Spring Boot整合DataX基本步骤,你可以根据实际需求进行配置和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值