DataX下载安装及操作

1.1 DataX下载地址

http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

1.2 安装DataX

步骤1:使用wget命令,采用阿里云地址下载

[root@hadoop201 software]# wget http://datax-opensource.oss-cn-hangzhou.aliyuncs.com/datax.tar.gz

下载后当前路径下会有tar包
-rw-r--r-- 1 root root 829372407 Oct 12  2019 datax.tar.gz

步骤2:解压安装包到/opt/module下

[root@hadoop201 software]# tar -zxvf datax.tar.gz -C /opt/module/

步骤3:查看datax的bin目录

通过datax.py去执行命令,上传json文件

image-20210305233421584

1.3 DataX执行的json文件解析

{
    
    
    job:	//最外侧,任务
    	setting:{
    
    	//设置
    		speed:{
    
    	//速度
    			channel:3	//指定用几个子线程去跑这个任务,线程越多,速度越快
		content:{
    
    	//内容
    		reader:{
    
    	//读数据部分
    			name:"hdfsreader"	//指明什么类型的reader,hdfsreader读HDFS
    			parameter:{
    
    		//参数
    				path:"/user/xxx/dt=${dt}/dn=${dn}/*"	//要读取的HDFS上的数据库的路径
    				defaultFS:""	//HDFS地址,HA是hdfs://mycluster
    				hadoopConfig:{
    
    	//Hadoop的一些配置
    					"dfs.nameservices":"mycluster"	//HDFS集群名
    					"dfs.ha.namenode.mycluster":"nn1,nn2,nn3"	//HA的多个namenode
    					"dfs.namenode.rpc-address.mycluster.nn1":hadoop201:8020	//HDFSnamenode1的地址
    					"dfs.namenode.xxx.nn2"	//第二个namenode的地址
        				"dfs.namenode.xxx.nn3"	//第三个namenode的地址
						"dfs.client.failover.proxy.provider.nameservice1": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"	//HDFS的namenode的失败重试机制
    				column:[{
    
    index:0, type:String}, {
    
    value:${
    
    dn}, type:string}]	//每个列封装成一个json对象,读列通过下标索引读取数据块中的列;type是数据库中列对应的数据类型;外部传入的参数使用固定值value接收。
					fileType:"text"	//数据块文件类型,行式存储
					encoding:"UTF-8"	//数据块文件编码格式
					fieldDelimiter:"\t"		//数据块中字段的分隔符,和Hive建表的时候的分隔符一致
					
    		writer:{
    
    	//写数据部分
                name:"mysqlwriter"	//指明什么类型的writer,mysqlwriter写到MySQL
                parameter:{
    
    
                	writerMode:"insert"	//写入数据库的方式,insert、replace(主键冲突会替换)
                	username:"root"	//mysql的用户名
                	password:"123456"	//mysql的密码
                	column:[xxx,xxx]	//对应Hive表中的字段,顺序个数一致
					perSql:["delete from xxx where dt=${dt}"]	//当写入mysql50%失败了,下一次重新导入的时候,会执行这个sql,一般都是delete删除。
					connection:[{
    
    jdbcUrl:mysql的url, table:[表名]}]
}

真实例子:

{
    
    
	"job": {
    
    
		"setting": {
    
    
			"speed": {
    
    
				"channel": 3
			}
		},
		"content": [{
    
    
			"reader": {
    
    
				"name": "hdfsreader",
				"parameter": {
    
    
					"path": "/user/hive/warehouse/ads.db/ads_low3_userdetail/dt=${dt}/dn=${dn}/*",
					"defaultFS": "hdfs://mycluster",
					 "hadoopConfig":{
    
    
			          "dfs.nameservices": "mycluster",
			       	  "dfs.ha.namenodes.mycluster": "nn1,nn2,nn3",
				  "dfs.namenode.rpc-address.mycluster.nn1": "hadoop201:8020",
				  "dfs.namenode.rpc-address.mycluster.nn2": "hadoop202:8020",
				   "dfs.namenode.rpc-address.mycluster.nn3": "hadoop203:8020",
				  "dfs.client.failover.proxy.provider.mycluster": "org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider"    
  },
					"column": [{
    
    
							"index": 0,
							"type": "string"
						},
						{
    
    
							"index": 1,
							"type": "string"
						},
						{
    
    
							"index": 2,
							"type": "string"
						},
						{
    
    
							"index": 3,
							"type": "string"
						},
						{
    
    
							"value": "${dt}",
							"type": "string"
						},
						{
    
    
							"value": "${dn}",
							"type": "string"
						}
					],
					"fileType": "text",
					"encoding": "UTF-8",
					"fieldDelimiter": "\t"
				}

			},
			"writer": {
    
    
				"name": "mysqlwriter",
				"parameter": {
    
    
					"writeMode": "insert",
					"username": "root",
					"password": "000000",
					"column": [
					        "paperviewid",
						"paperviewname",
						"score_segment",
						"userids",
						"dt",
						"dn"
					],
					"preSql": [
						"delete from paper_scoresegment_user where dt=${dt}"
					],
					"connection": [{
    
    
						"jdbcUrl": "jdbc:mysql://hadoop201:3306/qz_paper?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai&useSSL=false",
						"table": [
							"paper_scoresegment_user"
						]
					}]
				}

			}
		}]
	}
}

1.4 支持的Data Channel

类型 数据源 Reader(读) Writer(写) 文档
RDBMS 关系型数据库 MySQL
Oracle
SQLServer
PostgreSQL
DRDS
通用RDBMS(支持所有关系型数据库)
阿里云数仓数据存储 ODPS
ADS
OSS
OCS
NoSQL数据存储 OTS
Hbase0.94
Hbase1.1
Phoenix4.x
Phoenix5.x
MongoDB
Hive
Cassandra
无结构化数据存储 TxtFile
FTP
HDFS
Elasticsearch
时间序列数据库 OpenTSDB
TSDB

Hive读详解地址:

https://github.com/alibaba/DataX/blob/master/hdfsreader/doc/hdfsreader.md

MySQL写详解地址:

https://github.com/alibaba/DataX/blob/master/mysqlwriter/doc/mysqlwriter.md

MySQL读详解地址:

https://github.com/alibaba/DataX/blob/master/mysqlreader/doc/mysqlreader.md

Hive写详解地址:

https://github.com/alibaba/DataX/blob/master/hdfswriter/doc/hdfswriter.md

1.5 DataX执行命令

https://github.com/alibaba/DataX/blob/master/userGuid.md

DataX执行命令通过python /opt/module/datax/bin/datax.py xxx.json -p “-D参数名1=参数值1 -D参数名2=参数值2”

python /opt/module/datax/bin/datax.py user_questiondetail.json  -p "-Ddt=20190722 -Ddn=webA"

image-20210306002620789

可以将执行命令封装到一个脚本中,同时执行多条传时命令

python /opt/module/datax/bin/datax.py  avgtimeandscore.json -p "-Ddt=20190722 -Ddn=webA"

python /opt/module/datax/bin/datax.py  low3_userdetail.json -p "-Ddt=20190722 -Ddn=webA"

python /opt/module/datax/bin/datax.py  paper_maxdetail.json -p "-Ddt=20190722 -Ddn=webA"

python /opt/module/datax/bin/datax.py paper_scoresegment.json -p "-Ddt=20190722 -Ddn=webA"

python /opt/module/datax/bin/datax.py top3_userdetail.json  -p "-Ddt=20190722 -Ddn=webA"

python /opt/module/datax/bin/datax.py user_paperdetail.json  -p "-Ddt=20190722 -Ddn=webA"

python /opt/module/datax/bin/datax.py user_questiondetail.json  -p "-Ddt=20190722 -Ddn=webA"

猜你喜欢

转载自blog.csdn.net/qq_43523503/article/details/114424420