概述
数据抽取简述
数据抽取是从数据源中抽取数据的过程。实际应用中,数据源较多采用的是关系数据库。从数据库中抽取数据一般有以下几种方式。
(1)全量抽取
全量抽取类似于数据迁移或数据复制,它将数据源中的表或视图的数据原封不动的从数据库中抽取出来,并转换成自己的ETL工具可以识别的格式。全量抽取比较简单。
(2)增量抽取
增量抽取只抽取自上次抽取以来数据库中要抽取的表中新增或修改的数据。在ETL使用过程中。增量抽取较全量抽取应用更广。如何捕获变化的数据是增量抽取的关键。对捕获方法一般有两点要求:准确性,能够将业务系统中的变化数据按一定的频率准确地捕获到;性能,不能对业务系统造成太大的压力,影响现有业务。目前增量数据抽取中常用的捕获变化数据的方法有:
-
触发器
-
时间戳
-
全表对比。
数据抽取解决方案
下面将会对比几种常见的数据抽取工具。每一种都有根据官网Demo进行验证。
1.sqoop
sqoop是 apache 旗下一款“Hadoop 和关系数据库服务器之间传送数据”的工具。
input:MySQL,Oracle 导入数据到 Hadoop 的 HDFS、HIVE、HBASE 等数据存储系统
output:从 Hadoop 的文件系统中导出数据到关系数据库 mysql
优点:
-
sqoop可以高效的可控的利用资源,比如它可以通过调整任务数,来控制任务的并发度,另外还可以配置数据库的访问时间
-
sqoop能自动的完成数据类型的映射与转换
-
sqoop学习成本低,上手就可以用
-
sqoop2支持多种交互方式 命令行,webUI,restAPI。
建议:可以通过sqoop完成日常的Mysql到Hive的基本组建。
2.waterdrop
waterdrop是github上开源的数据抽取工具。通过读取配置文件,转换成Spark任务。
input:ES,FileSystem,JDBC,Mysql MongoDB,HIVE
output:Mysql,Hive,ES,HDFS,Clickhouse
优点:
-
waterdrop比较灵活,支持插件开发,同时为spark任务,比sqoop同步数据速度快。
-
可以根据业务场景自定义开发插件,更加贴近业务场景
-
支持多数据源配置。可以进行join操作
建议:可以通过waterdrop作为mysql-hive的备用方案。
开发自定义组件,如果mysql表过大,可以通过批量读取的方式进行同步。使用成本比sqoop稍大。可以作为2redis,2clickhouse的工具使用,插件可以根据业务进行自定义开发。
3.gobblin
gobblin是apache下开源的数据抽取工具 其功能则将流式数据转换成批次数据,并存入HDFS上并且还可以和Oozie,Akazban等调度系统和kafka结合实现数据的ETL处理。
input: KAFKA,MYSQL
output:HDFS,HIVE
优点:
-
组件都可以自定义编写,使得Gobblin可以应对几乎任何形式的数据源,并将所有数据抽取任务统一管理。
-
Gobblin Job可以以MapReduce的形式直接运行在Yarn上,在HDFS读写上具有更高效率。
建议:可以通过gobblin作为kafka-hive kafka-hdfs的工具使用。但是配置安装比较复杂,需要学习成本,深入研究
4.DataX
阿里的数据抽取工具。DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入
input: MySQL,HIVE,OSS,HDFS
output:MySQL,HIVE,OSS,HDFS
优点:
-
独立的架构,不依赖于MR或者SPARK任务,有清晰的资源使用情况以及数据流量详情
-
可以自定义开发组件
建议:编译过程中有比较多的BUG需要修复,社区比较少,代码迭代不频繁。暂时不建议作为线上工具使用。
5.Flume
Flume是apache的顶级项目,目前更新至1.9版本,Flume是一个分布式、可靠、和高可用的海量日志聚合的系统。
input:KAFKA,FS
output:HDFS,HIVE
优点:
-
使用简单,配置话
-
当传入数据的速率超过可以将数据写入目的地的速率时,Flume充当数据生成器和集中存储之间的中介器, 并在数据生成器和集中存储之间提供稳定的数据流。
-
Flume是可靠的,容错的,可扩展的,可管理的和可定制的
建议:
经过测试,发现Flume从Kafka读取数据存储至HDFS中,需要自己开发Source和Sink,用于处理PB格式数据,以及支持事件时间作为分区依据。 Flume支持kafka的各种版本(gobblin只支持0.8,0.9版本)。可以作为Kafka2Hdfs插件,但是缺点为只能进行简单的过滤数据,不能对数据进行有效的清洗。 需要严格测试Flume的吞吐量。使用不当容易造成数据的堆积,导致任务停止,如果使用memory channel 则中间数据会丢失。
6.FlinkX
FlinkX是国内公司袋鼠云开源的一款产品。刚刚开源,目前使用人数比较少,原理是转成Flink任务在yarn上执行。类似于waterdrop。但是支持的面比较少。不做建议
7.MaxWell
MaxWell是一款mysql的binlog同步工具。大大的减少了开发量。可以直接同步mysql的binlog到kafka。
经过测试,可以实时同步至kafka。数据格式为JSON,可以作为MysqlBinlog的同步工具,减少了开发量。
更多架构、PHP、GO、大数据相关踩坑实践技巧请关注我的公众号
最后
以上就是受伤宝贝为你收集整理的数据抽取工具调研的全部内容,希望文章能够帮你解决数据抽取工具调研所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复