Hadoop提供了一个高度容错的分布式存储系统,帮助我们实现集中式的数据分析和数据共享。在日常应用中我们比如要将各种数据采集到HDFS存储服务中去,说到将数据采集到HDFS,我们熟知的框架包括:
以及其他很多针对特定数据源的采集工具:比如针对Cassandra数据源的Aegisthus,针对mongodb的mongo-hadoop等等。
本文就对以上常见的数据采集服务进行简单的介绍,帮助我们了解各个项目的特点以及适用场景。
Sqoop : SQL-to-Had oop,用于在关系型数据库(RDBMS)和HDFS之间互相传输数据。
Sqoop 启用了一个MapReduce任务来执行数据采集任务,传输大量结构化或半结构化数据的过程是完全自动化的。其主要通过JDBC和关系数据库进行交互,理论上支持JDBC的Database都可以使用Sqoop和HDFS进行数据交互。
Sqoop目前分为两个版本Sqoop1和Sqoop2。这是两个完全不同的版本,完全不兼容。Sqoop1了解的朋友都知道它就是一个命令行脚本,而Sqoop2相比Sqoop1引入了sqoop server,集中化的管理Connector,引入基于角色的安全机制,而且支持多种访问方式:cli客户端,Web ui和Rest API。
Sqoop不支持文件解析入库,适用于关系型数据库与HDFS/Hive/HBase之间互相传输数据。它支持多种关系型数据库如mysql、oracle、postgresql。可以高效可控的进行数据导入导出。
Github Star 462, Fork 362
Apache Flume是一个分布式、可靠、高可用的日志收集系统,支持各种各样的数据来源,如http,log文件,监听端口数据等等,将这些数据源的海量日志数据进行高效收集、聚合、移动,最后存储到指定存储系统中(可扩展),如kafka、HDFS分布式文件系统、Solr,HBase等。
Flume基于流式数据,适用于日志和事件类型的数据收集,重构后的Flume-NG版本中一个agent(数据传输流程)中的source(源)和sink(目标)之间通过channel进行链接,同一个源可以配置多个channel。多个agent还可以进行链接组合共同完成数据收集任务,使用起来非常灵活。
Github Star 1418, Fork 1092
Gobblin是用来整合各种数据源的通用型ETL框架,在某种意义上,各种数据都可以在这里“一站式”的解决ETL整个过程,专为大数据采集而生。
作为一个通用框架,Gobblin的接口封装和概念抽象做的很好,作为一个ETL框架使用者,我们只需要实现我们自己的Source,Extractor,Conventer类,再加上一些数据源和目的地址之类的配置文件提交给Gobblin就行了。Gobblin相对于其他解决方案具有普遍性、高度可扩展性、可操作性。
Github Star 1381, Fork 540
DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。
被阿里开源之后的DataX社区并不活跃,但是好在程序的架构设计的好,大部分用户都会选择fork之后基于其进行二次开发。DataX本身由阿里开发对于阿里自身的数据库比如ODPS、ADS等支持更好。
Github Star 1128, Fork 478
Kettle是一款开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装,数据抽取高效稳定。它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。
Kettle 中文名称叫水壶,寓意就是希望把各种数据放到一个壶里,然后以一种指定的格式流出。
Kettle是CS架构,拥有自己的管理控制台,同样也可以通过Java代码与我们的工程进行集成,在程序中完成kettle的转换、执行等操作。