【大数据工具选型】ETL&同步&调度工具比较-Kettle、Streamset,DataX、Sqoop、Canel,DolphinSchedule、Azkaban、Oozie、Airflow、Xxl Job
〇、概述
1、常用资料
dolphinscheduler用户手册:https://dolphinscheduler.apache.org/zh-cn/docs/latest/user_doc/system-manual.html
airflow官方文档:airflow.apache.org
2、理解
数据从多个异构数据源加载到数据库或其他目标地址
3、选型
(1)ETL
Kettle
Streamset
(2)同步
DataX
Sqoop
Canel
(3)调度
DolphinSchedule
Azkaban
Oozie on Hue
Airflow
一、ETL
(一)Kettle
1、简介
Spoon图形化界面操作
支持的数据源丰富,但支持的数据源不主流
kettle是做数据清洗,转换工作的工具
2、组成
(1)转换Transformation:多个数据源输入
各种各样的输入(HDFS、parquet、HBASE输入)、转换和输出(如HDFS、parquet、HBASE、表输出或数据同步功能)【dolphinschedule需要集成datax插件做数据同步】
(2)作业Job:循环成圈,可以包含作业或转换
内部可以包含:开始、设置变量、成功和转换
可以定时调度&发送邮件
3、kettle调用
(1)API方式调用kettle
https://blog.csdn.net/qq_32577829/article/details/123867367
http://www.kettle.net.cn/2230.html
(2)集成平台
构建定时调度任务
4、优化
spoon脚本
调大JVM内存大小
线程堆栈大小
if "%PENTAHO_DI_JAVA_OPTIONS%"=="" set PENTAHO_DI_JAVA_OPTIONS="-Xms2048m" "-Xmx2048m" "-XX:MaxPermSize=256m"
增大缓存
使用数据库连接池
提高批处理的commit size
避免使用update , delete操作,尤其是update,如果可以把update变成先delete, 后insert;
5、解决阻塞
(1)流数据执行阻塞
添加阻塞的组件
可以设置阻塞到哪一步才能执行
(2)资源库死锁问题
dbeaver连kettle库,打开锁古管理器,关掉被锁住的进程
出现原因:同一时间更新同一表会造成线程占用
6、其他版本
spoon:客户端,免安装
kettle online:不好下载,收费
webspoon:docker安装,有点卡顿,和spoon界面一样
kettle-scheduler-boot:基于kettle8.3的API,https://www.35youth.cn/886.html
(博主整理了mysql手册https://www.35youth.cn/mysql.html)
(二)Streamset
大数据实时采集ETL工具,可以实现不写一行代码完成数据的采集和流转。通过拖拽式的可视化界面,实现数据管道(Pipelines)的设计和定时任务调度。
数据源支持MySQL、Oracle等结构化和半/非结构化,目标源支持HDFS、Hive、Hbase、Kudu、Solr、Elasticserach等
创建一个Pipelines管道需要配置数据源(Origins)、操作(Processors)、目的地(Destinations)三部分
二、同步
(一)DataX
1、概述
(1)概述
异构数据源离线同步工具,将网状同步链路转为星型同步链路,通过接入不同的数据源,让datax作为中间载体
【想起kettle的转换图标】
(2)组成
Reader采集模块、Writer写入模块、Framework数据传输通道
(3)原理
job管理单个作业,task对job切分(作业最小单元),每个task负责一部分同步工作;schedule将task归为5个一组,通过taskgroup对task进行启动
(4)实现方式
通过脚本调用Python2,再解析JSON文件(如:python datax.py /opt/module/datax/job/job.json)
对数据库压力小,全量速度快,适合做数据同步工作
不支持增量同步
2、案例
查看官方模板:python /opt/module/datax/bin/datax.py -r mysqlreader -w hdfswriter
使用:[atguigu@hadoop102 datax]$ bin/datax.py job/hdfs2mysql.json
(1)从stream流读取数据并打印到控制台
[atguigu@hadoop102 job]$ /opt/module/datax/bin/datax.py /opt/module/datax/job/stream2stream.json
"writer": {
"name": "streamwriter",
"parameter": {
"encoding": "UTF-8",
"print": true
}
}
}
],
(2)读取MySQL中的数据存放到HDFS
[atguigu@hadoop102 datax]$ bin/datax.py job/mysql2hdfs.json
(3)读取HDFS数据写入MySQL
[atguigu@hadoop102 datax]$ bin/datax.py job/hdfs2mysql.json
(4)从Oracle中读取数据存到MySQL
/opt/module/datax/bin/datax.py /opt/module/datax/job/oracle2mysql.json
(5)读取Oracle的数据存入HDFS中
[oracle@hadoop102 datax]$ bin/datax.py job/oracle2hdfs.json
(6)读取MongoDB的数据导入到HDFS
[atguigu@hadoop102 datax]$ bin/datax.py job/mongdb2hdfs.json
(7)读取MongoDB的数据导入MySQL
[atguigu@hadoop102 datax]$ bin/datax.py job/mongodb2mysql.json
(二)Sqoop
Sqoop,SQL-to-Hadoop 即 “SQL到Hadoop和Hadoop到SQL”
(三)Canel
基于数据库增量日志解析,提供增量数据实时订阅和消费,目前主要支持了MySQL,也支持mariaDB。
三、调度
(一)DolphinSchedule
支持传统的shell任务,同时支持大数据平台任务调度:MR、Spark、SQL(mysql、postgresql、hive/sparksql)、python、procedure、sub_process【兼容传统与大数据】
通过拖拽来绘制DAG
(二)Azkaban
hadoop的job调度,适合shell脚本,当job不多的时候,可以使用
Azkaban支持直接传参,例如${input}。
(三)Oozie on Hue
hadoop可视化平台Hue的插件
Cloudera公司,需要预先将规则定义在workflow.xml中
Oozie支持参数和EL表达式,例如${fs:dirSize(myInputDir)}
(四)Airflow
是apache的一个顶级开源项目由python编写
ariflow功能比azkaban完整强大
airflow在部署运维以及使用上要比azkaban复杂,成本高
将工作流编写任务的有向无环图(DAG)
通过airflow webserver -p 8080 -D启动web服务,通过airflow scheduler -D启动调度
通过编写python文件和配置文件,执行python文件中对应的任务
查看所有dag任务:airflow list_dags
(五)Xxl Job
【大数据工具选型】ETL&同步&调度工具比较-Kettle、Streamset,DataX、Sqoop、Canel,DolphinSchedule、Azkaban、Oozie、Airflow、Xxl Job的更多相关文章
- Hadoop和大数据:60款顶级开源工具(山东数漫江湖)
说到处理大数据的工具,普通的开源解决方案(尤其是Apache Hadoop)堪称中流砥柱.弗雷斯特调研公司的分析师Mike Gualtieri最近预测,在接下来几年,“100%的大公司”会采用Hado ...
- 大数据 什么是 ETL
ETL 概念 ETL 这个术语来源于数据仓库,ETL 指的是将业务系统的数据经过抽取.清洗转换之后加载到数据仓库的过程.ETL 的目的是将企业中的分散.零乱.标准不统一的数据整合到一起,为企业的决策提 ...
- 双汇大数据方案选型:从棘手的InfluxDB+Redis到毫秒级查询的TDengine
双汇发展多个分厂的能源管控大数据系统主要采用两种技术栈:InfluxDB/Redis和Kafka/Redis/HBase/Flink,对于中小型研发团队来讲,无论是系统搭建,还是实施运维都非常棘手.经 ...
- 大数据学习--day07(冒泡排序、Arrays工具类、方法可变参数)
冒泡排序.Arrays工具类.方法可变参数 冒泡排序之前写过,略 Arrays工具类 二分法查询 public static int binarySearch(int[] a,int key) 头信息 ...
- 数据分析 大数据之路 六 matplotlib 绘图工具
散点图 #导入必要的模块 import numpy as np import matplotlib.pyplot as plt #产生测试数据 x = np.arange(1,10) y = x ...
- 【原创】大数据基础之ETL vs ELT or DataWarehouse vs DataLake
ETL ETL is an abbreviation of Extract, Transform and Load. In this process, an ETL tool extracts the ...
- 主流ETL(Extract-Transform-Load)工具选型,Kettle Spoon、Datastage、Powercenter介绍
参考:三大主流ETL工具选型 ETL工具 Kettle Spoon 开源ETL工具,所以免费,用java开发的. Ascential公司的Datastage(在2005年被IBM收购现在是 IBM 的 ...
- 企业没有大数据技术?选择这款BI工具
无论是网络时代的传统营销还是大数据营销,营销人员的任务之一就是找到目标客户,实现自己的营销目标.而我们说的大数据营销只不过是营销的工具发生了变化,营销的本质和目标是不变的. 就目前而言,现在的大数据 ...
- 从 Airflow 到 Apache DolphinScheduler,有赞大数据开发平台的调度系统演进
点击上方 蓝字关注我们 作者 | 宋哲琦 ✎ 编 者 按 在不久前的 Apache DolphinScheduler Meetup 2021 上,有赞大数据开发平台负责人 宋哲琦 带来了平台调度系统 ...
- 知名大厂如何搭建大数据平台&架构
今天我们来看一下淘宝.美团和滴滴的大数据平台,一方面进一步学习大厂大数据平台的架构,另一方面也学习大厂的工程师如何画架构图.通过大厂的这些架构图,你就会发现,不但这些知名大厂的大数据平台设计方案大同小 ...
随机推荐
- Rust-语句和表达式
语句和表达式 Rust 的函数体是由一系列语句组成,最后由一个表达式来返回值,例如: fn add_with_extra(x: i32, y: i32) -> i32 { let x = x + ...
- 使用Recoding Rules优化性能
通过PromQL可以实时对Prometheus中采集到的样本数据进行查询,聚合以及其它各种运算操作.而在某些PromQL较为复杂且计算量较大时,直接使用PromQL可能会导致Prometheus响应超 ...
- 在 Linux 中找出内存消耗最大的进程
1 使用 ps 命令在 Linux 中查找内存消耗最大的进程 ps 命令用于报告当前进程的快照.ps 命令的意思是"进程状态".这是一个标准的 Linux 应用程序,用于查找有关在 ...
- useContext 解决函数父子组件传值
1在父组件外部定义变量A创建上下文,2在父组件使用变量A<A.Provider> <子组件/> </A.Provider> ,3.在子组件中创建变量使用useCon ...
- HashMap底层原理及jdk1.8源码解读
一.前言 写在前面:小编码字收集资料花了一天的时间整理出来,对你有帮助一键三连走一波哈,谢谢啦!! HashMap在我们日常开发中可谓经常遇到,HashMap 源码和底层原理在现在面试中是必问的.所以 ...
- Java(15)Object类
前言 Object类是Java中所有类的始祖,在Java中每个类都扩展了Object.如果没有明确地指出超类,Object就被认为是这个类的超类.由于在Java中每个类都是由Object类扩展而来的, ...
- SECS半导体设备通讯-4 GEM通信标准
一 概述 GEM标准定义了通信链路上的半导体设备的行为. SECS-II标准定义了在主机和设备之间交换的消息和相关数据项.GEM标准则定义了在哪种情况下应该使用哪些SECS-II消息以及由此产生的结果 ...
- 谣言检测(ClaHi-GAT)《Rumor Detection on Twitter with Claim-Guided Hierarchical Graph Attention Networks》
论文信息 论文标题:Rumor Detection on Twitter with Claim-Guided Hierarchical Graph Attention Networks论文作者:Erx ...
- hibernate validation 手动参数校验 不经过spring
/** * 校验工具类 * @author wdmcygah * */ public class ValidationUtils { private static Validator validato ...
- The project was not built due to "Could not delete '/XXX/WebRoot/WEB-INF/classes/library'.". Fix the problem, then try refreshing this project and building
在构建插件时提示如下错误: Description Resource Path Location Type The project was not built due to "Could n ...