47

比较五款企业级ETL工具,助你选出适合项目的解决方案

 5 years ago
source link: http://developer.51cto.com/art/201904/594798.htm?amp%3Butm_medium=referral
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

IjEbAzR.png!web

【51CTO.com快译】在商业环境中,随着各类数据量的不断猛增,企业对于那些以ETL为基本要素的数据仓库项目和高级分析系统的需求也在不断增多。此处ETL所对应的是数据仓库的三个概念:提取(Extracting)、转换(Transforming)和加载(Loading)。其主要流程包括:

  1. 从不同的外部源提取数据。
  2. 将数据转换为所需的业务模型。
  3. 将数据加载到新的仓库之中。

可见,ETL是整个数据迁移任务的一个子集。在《数据仓库ETL工具包(Warehouse ETL Toolkit)》一书中(请详见https://www.amazon.com/Data-Warehouse-ETL-Toolkit-Techniques-Extracting/dp/0764567578),定义了ETL的三个基本特征:

  • 以适当的格式下载数据,并予以分析。
  • 它包含有许多额外的信息。
  • 系统会记录数据的来源。

因此,数据不应该只是简单地从一处被加载到另一处,而应该在加载的过程中得到改进与优化。例如:ETL开发人员可以添加新的技术属性,去跟踪数据在数据库中的显示方式、数据被更改的时间及方式。

ETL的流程步骤

通常,Web程序员可以将ETL架构想象成如下图所示的三个区域:

  • 数据源。
  • 中间区域。
  • 数据接收器。

Ej26Fnj.png!web

数据流从源头向接收器移动。由于每个阶段都非常复杂,因此创建ETL软件的过程往往会包括如下不同的挑战:

  1. 外部数据源的多样性。
  2. 需要根据业务规则来统一数据。
  3. 更新频率和其他具体的要求。

因此,普通IT公司需要清楚地了解数据源的结构,并配备相应的目标应用。

一个ETL示例

常见的ETL任务是将数据从关系数据库管理系统(Relational Database Management System,RDBMS)传输到另一个更适合于商业智能工具的数据库中。因此,ELT的作业可分为两种类型:

  1. 批量作业
  2. 流式作业

其中,流式作业的一个例子是:从RDBMS中获取数据,逐个且单独地传输出去,以备后期处理。否则,我们认为它属于批量处理的范畴。例如:您可以先获取整个文件,再对其进行处理,最后将其保存到更大的文件中。可以说,不同的ETL系统会以不同的方式处理上述任务。

如今,单一的批量方法已被淘汰。持续增长的流式数据源,导致了各种ETL工具被主要用于通过处理流式作业,来尽快地提供出各种最新的数据。

Arqymiq.png!web

同时,由于ETL能够将数据成功地集成到各种数据库和应用之中,而各种琳琅满目的云端数据集成工具,经常会让我们难以做出选择,因此我在此为大家罗列和比较了五款企业级ETL工具的优缺点,希望能够帮助您找出最适合手头项目的解决方案。

1. Apache Nifi

fqMruaJ.png!web

定价 :免费

官方网站: https://nifi.apache.org/

实用资源: 文档教程

优点:

  • 完美地实现了数据流的编程概念。
  • 能够处理二进制数据。
  • 提供数据来源(Data Provenance)。

缺点:

  • 用户界面过于简单。
  • 缺乏实时监控和逐条记录的统计数据。

由Apache Software Foundation开发的开源项目--Apache NiFi可谓是最好的ETL工具之一。由于基于数据流的编程概念,因此它能够让我们在boxes中可视化地组装各种程序,并在几乎不需要任何代码的情况下运行起来。在这一点上,您完全可以不必了解任何编程语言。

作为一款备受欢迎的ETL工具,NiFi能够处理许多不同的数据源,其中包括:RabbitMQ、JDBC查询、Hadoop、MQTT、以及UDP套接字等。而在操作方面,您可以对数据进行筛选、调整、连接、拆分、增强和验证。

由于Apache NiFi是用Java编写而成,并且是在Apache 2.0的许可证中发布的,因此它不但能够在JVM上运行,而且支持所有的JVM语言。

该ETL工具既有助于用户创建长期运行(long-running)的作业,又适用于处理流式数据和一些周期性的批处理。不过,对于那些手动式管理任务而言,用户在设置NiFi时,可能会碰到一些麻烦。

Apache NiFi是一种功能强大且易于使用的解决方案。它采用了全面的架构模式,其FlowFile包含了各种元信息。因此,该工具不但能够识别CSV,还可以处理照片、视频、音频文件、以及其他二进制数据。

NiFi的处理器包括如下三种输出:

  1. Failure:意味着FlowFile的处理过程中存在着一些问题。
  2. Original:表示传入的FlowFile已被处理。
  3. Success:表示FlowFiles的处理已完成。

您可以使用特殊的复选框,来删除那些已终止的输出。同时,您应该注意在高级ETL编程中的进程组(Process Groups),它们对于组合复杂的数据流元素来说是非常必需的。

NiFi的另一个实用功能是:可以采用不同的队列策略(包括FIFO、LIFO以及其他)。Data Provenance是一种用于记录数据流中几乎所有内容的连接服务。它可以便利地让您获悉数据的保存或执行方式。当然,该功能的唯一缺点是需要大量的磁盘空间。

虽然在我看来Apache NiFi的界面不但简洁清晰,而且可用性强,但是仍有不少用户抱怨其缺少必要的组件。例如,他们认为:由于缺少了自动调整各种长SQL查询的文本字段,因此只能通过手动来完成。

NiFi拥有内置的Node集群。您可以通过选择一些实例,来让它提取必要的ETL数据。另外,NiFi可以通过背压(back pressure)机制,来快速地连接MySQL,获取某个文件,并将其添加到下一个处理器上。

总而言之,Apache NiFi的主要优势在于拥有100多种不同的嵌入式处理器。它们能够通过HTTP、S3或Google Data Source来下载文件,并能将文件上传到MySQL、或其他数据接收器上。您只需配置UI,按下RUN按钮,后续它就能自动运行了。

2. Apache StreamSets

fyuuIrZ.png!web

定价:免费

官方网站: https://streamsets.com

实用资源: 文档教程开发者支持论坛源代码

优点:

  • 每个处理器都有基于单条记录的统计信息,且具有友好的可视化调试效果。
  • 用户界面非常友好。
  • 提供流式和基于记录的数据工具。

缺点:

  • 缺少可重用的JDBC配置。
  • 更改单个处理器的设置后,需要停止整个数据流。

Apache StreamSets可谓Apache NiFi的强有力竞争对手,我们很难说出谁更胜一筹。

根据流畅且通用的数据流格式的设计思想,所有被放入StreamSets的数据都会被自动转换为可交换的记录。与Apache Nifi不同的是,该ETL工具并不显示处理器之间的队列。如果您想使用其他不同的格式,Apache Nifi通常需要从一个版本的处理器转换为另一个版本。而StreamSets则不然,您需要为设置的更改停止整个数据流,而不仅仅停止某一个处理器。

在StreamSets中,虽然对于错误的修复看似困难,但事实上,由于它提供实时的调试工具,因此用户反而更容易实现错误的修复。借助具有实时仪表板和显示所有统计信息的友好用户界面,您可以快速地发现并修复任何出现的错误。此外,您还可以在处理器之间的连接处,放置各种具有记录功能的过滤器,以检查不同可疑的记录。因此,它具有如下四种处理器的变体:

  • Origin:处理器从数据源接收信息。
  • Processors:获取和转换接收到的数据。
  • Destinations:将转换后的数据放入各种外部文件。
  •  Executors:处理那些由其他处理器完成的操作。

StreamSets的各种处理器可以生成包括错误在内的动作和事件。您需要executors,来跟踪和修复这些错误。虽然那些只用到Processors和Controller Services的用户会更喜欢Apache NiFi的简约设计。但是,StreamSets也有着规划合理的架构。凭借着友好的用户界面,它也并不那么难以上手。

我个人感觉:由于缺少了针对JDBC设置的Controller Services,因此在调整每一个处理器时,都会让人觉得有些棘手。

StreamSets会在运行数据流之前检查所有的处理器,即:在数据流启动之前,必须确保所有处理器的连接。该功能会导致StreamSets不允许用户留下任何暂未连接、以备将来修复错误的处理器。StreamSets的另一个缺点是:无法让用户同时选择多个处理器。毕竟,逐一移动并重组多个处理器,会耗费大量的时间和精力。

总而言之,作为一款成熟的开源ETL工具,它提供了便捷的可视化数据流和时尚的Web界面。

3. Apache Airflow

rENbQbY.png!web

定价 :免费

官方网站: https://airflow.apache.org

实用资源: 教程

优点:

  • 适合不同类型的任务。
  • 具有清晰且可视化的用户界面。
  • 提供可扩展的方案。

缺点:

  • 不适合流式作业。
  • 需要额外的运算符(operators)。

这是一种被用于创建与跟踪工作流的开源式ETL软件。它可以与包括GCP、Azure和AWS在内的云服务一起使用。同时,您可以在Kubernetes上通过Astronomer Enterprise来运行Airflow。

在使用Python来编写工作流代码时,您不必担心XML或GUI拖放等问题,这些步骤具有一定的智能性。作为一款灵活的任务调度程序,Airflow可以被用在许多API之中,以实现训练ML模型、发送通知、跟踪系统、以及增强函数等目的。

该平台具有如下主要特点:

  • 通过Qubole和astronomer.io来提供Airflow-as-a-Service。
  • 2015年由Airbnb所创建,2016年转入Apache。
  • 以Google Cloud Composer为基础。
  • 工作流程被作为有向无环图(directed acyclic graphs,DAGs)执行。

开发者可以用Apache Airflow来创建dynamic、extensible、elegant和scalable四种解决方案。因此,它通过Python代码提供了动态管道的生成。同时,您还可以自定义运算符和执行程序,以及按需扩展的抽象库。由于相关参数已被包含在平台的核心里,因此它能够创建出各种清晰准确的管道。此外,模块化与消息队列式的设计,也让Airflow更容易实现按需扩展。

Apache Airflow适用于大多数日常任务,包括:运行ETL作业和ML管道,提供数据和完成数据库备份。但是,对于流式作业来说,这并不是一个很好的选择。

该平台具有可视化元素的时尚UI。您可以查看所有正在运行的管道,跟踪进度并修复错误。这些都有助于用户完成DAG上的复杂任务。

虽然该结构比ETL数据库更具动态性,但是它能够提供稳定的工作流。因此,如果您将工作流定义为代码的话,它们将更具有协作性、可版本化、可测试性和可维护性。

该平台可运行在私有的Kubernetes集群中,并包含各种资源管理与分析工具,例如:StatsD、Prometheus和Grafana。

您可以使用如下的Airflow工作流,来进行ETL测试:

  • 单元测试
  • 集成测试
  • 端到端测试(在某些情况下)

上述第一种类型适用于检查DAG的加载、Python运算符函数、各种自定义运算符和Bash/EMR脚本。该平台不需要任何原始配置,其唯一需要更改的地方是:DB连接字符串。您需要创建一个空的数据库,并授予用户CREATE/ALTER的权限。剩下的就可以交给Airflow去完成了。

总而言之,Apache Airflow是一款由Python编写的免费独立框架。如果您想单独运行Airflow的话,则会面临一些挑战,因此您最好使用一些不同的运算符。

4. AWS Data Pipeline

rymIv23.png!web

定价:不定,请参见 https://aws.amazon.com/datapipeline/pricing/

官方网站: https://aws.amazon.com/datapipeline/

实用资源: 文档社区论坛

优点:

  • 易用的ETL技术
  • 价格合理
  • 灵活性好

缺点:

  • 没有太多内置函数

该Web服务确保了数据在AWS计算资源和各种数据源之间的处理和移动。它能够对已存储的数据提供永久的访问与转换。其最终结果也可以被转移到诸如:Amazon DynamoDB、Amazon RDS、Amazon EMR和Amazon S3等服务之中。该ETL工具简化了创建复杂数据处理负载的相关过程,有助于实现可重复、高可用且可靠的用例负载(case-load)。

AWS Data Pipeline能够移动和处理那些被锁在本地数据孤岛中的数据。Amazon号称其ETL工具有如下六项主要优势:

  • 准确性
  • 简单性
  • 适应性
  • 价钱合理
  • 可扩展性
  • 透明度

AWS Data Pipeline是一种可靠的服务,它能够在发生故障时,自动对各种活动进程进行重试。通过配置,您可以通过Amazon SNS接收到运行成功、延时或失败等通知。

您还可以通过拖放控制台,来简单快速地设计各种管道。其内置的预置条件,省去了您通过额外编写逻辑去调用它们。Web开发人员可能会用到的功能包括:调度、依赖关系跟踪和问题处理。同时,该服务也被灵活地设计为能够流畅地处理大量文件。

AWS Data Pipeline是一种无服务器式的编排服务,因此您只需为自己所使用的内容付费。同时,它为新用户提供了免费的试用版。通过该透明式方案,用户能够接收与管道相关的完整信息,并完全控制各种计算资源。

这款ETL工具很适合于执行各种管道作业。我在当前的项目中就使用它来传输各种数据。虽然AWS Data Pipeline没有丰富的内置函数,但是它提供了便捷的UI和内置了多种处理器的实用工具。用户可以用它来生成各种实例,并实现级联式的文件管理。

5. AWS Glue

EzuiA3u.png!web

定价:不定,请参见https://aws.amazon.com/glue/pricing/

官方网站: https://aws.amazon.com/glue/

实用资源: 教程

优点:

  • 支持各种数据源。
  • 与AWS的各种服务有良好的集成。

缺点:

  • 需要大量的手工操作。
  • 灵活性差。

AWS Glue允许您在AWS管理控制台中创建和运行一项ETL作业。该服务能够从AWS中获取各种数据和元数据,并通过放入相应的类目,以供ETL进行搜索、查询和使用。整个过程分为如下三个步骤:

  • 通过构建类目(包括JSON、CSV、Parquet和许多其他格式)对数据进行分类。
  • 生成ETL代码和各种编辑转换(可用Scala或Python编写)。
  • 调度和运行各种ETL作业。

这款ETL工具具有如下三个主要优点:

  • 便利性:由于能与众多的AWS服务和引擎相紧密集成,因此该工具对于那些已经使用了Amazon产品的用户来说,非常容易上手。不过,其缺点在于:您无法在本地、或任何其他云端环境中实现它。
  • 经济实惠:无服务器解决方案意味着您无需配置或管理任何基础架构。因此,其成本取决于各个“数据处理单元”的开销。您只需为正在运行的作业付费便可。
  • 功能强大:能够自动创建、维护和运行各种ETL作业。当然,该服务也需要大量的手工操作。

虽然AWS Glue是AWS生态系统中的重要组成部分,但是您应该注意它的细微差别。该服务能够提供抽象级别的CSV文件。不过,您需要通过大量的手工操作,才能最终生成可运行的Spark代码。您可以在Scala或Python中下载相应的代码,并按需进行各种修改。虽然它适用于大量的数据源,但是该服务会最终强制您选取某一种特定的方案。而且您无法在后续的使用中,再去改用其他方式。

如何选择正确的ETL工具

InfoWorld曾断言:在构建数据仓库系统的方面,ETL的成本占比最大。用户需要特别关注由它所产生的瓶颈。因此,只有恰当地实施ETL,才能优化企业的成本和加快员工的工作效率。最后,我为您列出如下五个方面,供您在选用ETL工具时进行参考:

  • 系统的复杂性。
  • 您的数据要求。
  • 开发者的经验。
  • ETL的技术成本。
  • 特殊的业务需求。

原文标题:Top 5 Enterprise ETL Tools,作者:Vitaliy Samofal

【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】

【责任编辑:庞桂玉 TEL:(010)68476606】


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK