尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网尚硅谷大数据技术之DataX(作者:尚硅谷大数据研发部)版本:V1.0第1章概述1.1什么是DataXDataX是阿里巴巴开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。1.2DataX的设计为了解决异构数据源同步问题,DataX将复杂的网状的同步链路变成了星型数据链路,DataX作为中间传输载体负责连接各种数据源。当需要接入一个新的数据源的时候,只需要将此数据源对接到DataX,便能跟已有的数据源做到无缝数据同步。1.3框架设计DataX本身作为离线数据同步框架,采用Framework+plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。Reader:数据采集模块,负责采集数据源的数据,将数据发送给Framework。Writer:数据写入模块,负责不断向Framework取数据,并将数据写入到目的端。Framework:用于连接reader和writer,作为两者的数据传输通道,并处理缓冲,流控,尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网并发,数据转换等核心技术问题。1.4运行原理1)DataX完成单个数据同步的作业,我们称之为Job,DataX接受到一个Job之后,将启动一个进程来完成整个作业同步过程。DataXJob模块是单个作业的中枢管理节点,承担了数据清理、子任务切分(将单一作业计算转化为多个子Task)、TaskGroup管理等功能。2)DataXJob启动后,会根据不同的源端切分策略,将Job切分成多个小的Task(子任务),以便于并发执行。Task便是DataX作业的最小单元,每一个Task都会负责一部分数据的同步工作。3)切分多个Task之后,DataXJob会调用Scheduler模块,根据配置的并发数据量,将拆分成的Task重新组合,组装成TaskGroup(任务组)。每一个TaskGroup负责以一定的并发运行完毕分配好的所有Task,默认单个任务组的并发数量为5。4)每一个Task都由TaskGroup负责启动,Task启动后,会固定启动Reader—Channel—Writer的线程来完成任务同步工作。5)DataX作业运行起来之后,Job监控并等待多个TaskGroup模块任务完成,等待所有TaskGroup任务完成后Job成功退出。否则,异常退出,进程退出值非0第2章快速入门2.1官方地址下载地址:源码地址:尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网2.2前置要求-Linux-JDK(1.8以上,推荐1.8)-Python(推荐Python2.6.X)2.3安装1)将下载好的datax.tar.gz上传到hadoop102的/opt/softwarez[atguigu@hadoop102software]$lsdatax.tar.gz2)解压datax.tar.gz到/opt/module[atguigu@hadoop102software]$tar-zxvfdatax.tar.gz-C/opt/module/3)运行自检脚本[atguigu@hadoop102bin]$cd/opt/module/datax/bin/[atguigu@hadoop102bin]$pythondatax.py/opt/module/datax/job/job.json第3章使用案例3.1从stream流读取数据并打印到控制台1)查看配置模板[atguigu@hadoop102bin]$pythondatax.py-rstreamreader-wstreamwriterDataX(DATAX-OPENSOURCE-3.0),FromAlibaba!Copyright(C)2010-2017,AlibabaGroup.AllRightsReserved.Pleaserefertothestreamreaderdocument::尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网Pleasesavethefollowingconfigurationasajsonfileandusepython{DATAX_HOME}/bin/datax.py{JSON_FILE_NAME}.jsontorunthejob.{job:{content:[{reader:{name:streamreader,parameter:{column:[],sliceRecordCount:}},writer:{name:streamwriter,parameter:{encoding:,print:true}}}],setting:{speed:{channel:}}}}2)根据模板编写配置文件[atguigu@hadoop102job]$vimstream2stream.json填写以下内容:{job:{content:[{reader:{name:streamreader,parameter:{sliceRecordCount:10,column:[{type:long,value:10},{type:string,value:hello,DataX}]}},尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网writer:{name:streamwriter,parameter:{encoding:UTF-8,print:true}}}],setting:{speed:{channel:5}}}}3)运行[atguigu@hadoop102job]$/opt/module/datax/bin/datax.py/opt/module/datax/job/stream2stream.json3.2读取MySQL中的数据存放到HDFS3.2.1查看官方模板[atguigu@hadoop102~]$python/opt/module/datax/bin/datax.py-rmysqlreader-whdfswriter{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:尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网}}}],setting:{speed:{channel:}}}}mysqlreader参数解析:mysqlreader参数解析reader:{name:mysqlreader,parameter:{column:[],connection:[{jdbcUrl:[],table:[]【“querySql:[]】}],password:,username:,where:【splitPk:】}}注意:【】中的参数为可选参数name:reader名column:需要同步的列名集合,使用JSON数组描述自带信息,*代表所有列jdbcUrl:对数据库的JDBC连接信息,使用JSON数组描述,支持多个连接地址table:需要同步的表,支持多个querySql:自定义SQL,配置它后,mysqlreader直接忽略table、column、wherepassword:数据库用户名对应的密码username:数据库用户名where:筛选条件splitPK:数据分片字段,一般是主键,仅支持整型hdfswriter参数解析:hdfswriter参数解析writer:{name:hdfswriter,parameter:{column:[],compress:,defaultFS:,fieldDelimiter:,fileName:,fileType:,path:,writeMode:}}name:writer名column:写入数据的字段,其中name指定字段名,type指定类型compress:hdfs文件压缩类型,默认不填写意味着没有压缩。defaultFS:hdfs文件系统namenode节点地址,格式:hdfs://ip:端口fieldDelimiter:字段分隔符fileName:写入文件名fileType:文件的类型,目前只支持用户配置为text或orcpath:存储到Hadoophdfs文件系统的路径信息writeMode:hdfswriter写入前数据清理处理模式:(1)append:写入前不做任何处理,DataXhdfswriter直接使用filename写入,并保证文件名不冲突。(2)nonConflict:如果目录下有fileName前缀的文件,直接报错。3.2.2准备数据1)创建student表尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网mysqlcreatedatabasedatax;mysqlusedatax;mysqlcreatetablestudent(idint,namevarchar(20));2)插入数据mysqlinsertintostudentvalues(1001,'zhangsan'),(1002,'lisi'),(1003,'wangwu');3.2.3编写配置文件[atguigu@hadoop102datax]$vim/opt/module/datax/job/mysql2hdfs.json{job:{content:[{reader:{name:mysqlreader,parameter:{column:[id,name],connection:[{jdbcUrl:[jdbc:mysql://hadoop102:3306/datax],table:[student]}],username:root,password:000000}},writer:{name:hdfswriter,parameter:{column:[{name:id,type:INT},{name:name,type:STRING}],defaultFS:hdfs://hadoop102:9000,fieldDelimiter:\t,fileName:student.txt,fileType:text,path:/,writeMode:append}}}尚硅谷大数据技术之DataX更多Java–大数据–前端–python人工智能资料下载,可百度访问:尚硅谷官网]