楼主: 时光永痕
1861 0

[数据挖掘新闻] 开源ETL:Apache NiFi与流集 [推广有奖]

  • 0关注
  • 14粉丝

svip3

学术权威

12%

(VIP/贵宾)八级

6%

威望
0
论坛币
26 个
通用积分
57.2238
学术水平
4 点
热心指数
4 点
信用等级
4 点
经验
34180 点
帖子
2732
精华
0
在线时间
321 小时
注册时间
2020-7-21
最后登录
2024-8-1

楼主
时光永痕 学生认证  发表于 2020-11-23 20:26:19 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
开源ETL:Apache NiFi与流集
在回顾了针对快速成长的初创公司的8种出色的ETL工具之后,我们要求向您介绍更多有关开源解决方案的信息。有许多开源ETL工具和框架,但其中大多数都需要编写代码。由于数据工程师不一定是优秀的程序员,因此您可以尝试使用可视ETL直接将其与数据连接。我们请Luxms Group的研发主管Dmitry Dorofeev告诉我们他比较Apache NiFi和Streamsets的经验。
***
我们的团队最近面临着一个无聊的数据集成问题:当一些数据存储在Hadoop中,一些数据存储在Oracle中,而另一些存储在Excel中时。目的是将所有数据ETL到Greenplum中,最后在其上提供一些BI。
我们很快找到了两个主流的开源ETL项目:Apache NiFi和Streamsets,从这两个产品中选择一个产品似乎很容易。 绝非易事。 我比任何人都了解,因为我负责产品评估和最终选择。在这篇文章中,我想分享我的经验,也许可以节省您的生活。
剧透: 没有银弹。Apache NiFi不一定比Streamsets好,也不一定比NiFi好。一切都有其优点和缺点。这篇文章是我作为新手使用这些工具的个人经验,未经任何入门培训。
数据流编程
程序员,分析师,甚至经理经常绘制方框图和箭头图来说明一些流程。你知道吗?您甚至可以使用这些方框和箭头来创建程序。我们可以将此类尝试追溯到1960年代,当时MIT诞生了Dataflow Programming范式。
如今,我们拥有数十种Dataflow编程工具,您可以在其中从方框和箭头直观地组装程序,编写零行代码。其中有些是开源的,有些则适合ETL。
是的,您不必了解任何编程语言。您只需要使用以方框表示的现成的“处理器”,将它们与箭头连接即可,箭头表示“处理器”之间的数据交换,仅此而已。
框有三种主要类型:源,处理器和接收器。可以将Extract用作源,将Transform用作处理器,将Load用作接收器。
什么可以作为来源?几乎所有内容:磁盘或AWS上的文件,JDBC查询,Hadoop,Web服务,MQTT,RabbitMQ,Kafka,Twitter或UDP套接字。
处理器可以增强,验证,过滤,合并,拆分或调整数据。如果现成的处理器盒还不够用,您可以在Python,Shell,Groovy甚至Spark上编程以进行数据转换。
接收器基本上与源相同,但它们用于写入数据。
Apache NiFi与StreamSets
当我们面对另一个具有复杂ETL要求的客户时,我决定尝试使用可视数据流工具。即使您使用Singer,数据构建工具或其他方便的开源ETL工具,视觉效果也可能很有吸引力,对吗?
幸运的是,有两个带有Web界面的开源可视化工具:Apache NiFi和StreamSets Data Collector(SDC)。NiFi是由NSA在2014年捐赠给Apache基金会的,目前的开发和支持主要由Hortonworks提供。SDC由加利福尼亚的一家初创公司于2014年启动,是一个可在GitHub上获得的开源ETL项目。第一版于2015年6月发布。
两种产品都是用Java编写的,并根据Apache 2.0许可进行分发。
以下是GitHub在2018年初的一些统计信息:
公制
Apache NiFi     
流集   
前叉
783
914
星星
811
405
发布
57
113

1.5
3.1.0.0
首次发行年份      
2007年
2015年
架构和功能
两种工具都鼓励创建长期运行的作业,这些作业可以处理流数据或定期进行定期批处理。您可以创建手动管理的作业,但是设置起来可能比较棘手。这是我个人使用这些工具所获得的最大的惊喜和改变思路的功能。
Apache NiFi
Apache NiFi具有深思熟虑的架构。从外部源获取数据后,将其表示为  Apache NiFi数据流中的FlowFile。FlowFile基本上是原始数据,并附加了元信息。您不仅可以轻松处理CSV或其他基于记录的数据,还可以轻松处理图片,视频,音频或任何二进制数据。
处理器通常将具有3个输出:
失败。如果无法正确处理FlowFile,则原始FlowFile将被路由到此输出。
原版的。一旦处理了传入的FlowFile,原始的FlowFile将被路由到此输出。
成功。成功处理的FlowFiles将被路由到该关系。
您可以使用复选框终止输出,因此Apache NiFi将忽略终止的输出,并且不会在那里发送任何FlowFiles。
另一个方便的功能是 处理组。当数据流变得复杂时,您可以将数据流元素合并到流程组中,该流程组以与标准处理器相同的方式在UI中以图形方式表示。它充当处理器,因此您可以递归构建非常复杂的数据流。
控制器服务 是数据流之外的东西,但为处理器提供了一些有用的信息。它可能是SSL证书,JDBC连接和池设置,架构定义等。想法是,控制器服务不是在可能需要它的每个处理器中配置此信息,而是将其提供给任何处理器使用。
处理器与...连接良好。通常,连接只是箭头,而Apache NiFi则不是。每个连接箭头都有一个附加的小控件,表示带有反压的队列,可以单独配置。
例如,如果LogAttribute处理器由于某种原因变慢或冻结,则GenerateFlowFile处理器生成的FlowFiles将在连接中排队。一段时间后,背压将暂停GenerateFlowFile处理器,直到队列低于配置的阈值。
如果您还没有留下深刻的印象,那么可以将不同的队列策略(例如FIFO,LIFO和其他队列策略)应用于连接中的队列呢?
数据来源 是一项“老大哥”服务,可在您处理数据流时记录几乎所有内容。这非常方便,因为您记录了数据流执行情况的历史记录,包括保存的FlowFiles内容。但这是有代价的,您应该有足够的磁盘空间来保留所需的出处数据积压。
即使具有这些出色的功能和出色的体系结构,我对Apache NiFi用户界面还是不太满意。绝对可以使用,但不能性感。
StreamSets数据收集器
然后,我尝试了Streamsets。
流集中的处理器交换 记录。这意味着您摄取到流集中的所有内容都会自动转换为面向记录的标准格式,并且所有处理器都可以将其作为记录流来处理。处理器之间没有队列,至少,就像我们在Apache NiFi中看到的那样,它们不是视觉上呈现的。
在Apache NiFi中,同一处理器应具有不同的自身版本以处理不同的格式。例如,一个版本为CSV,一个版本为JSON,另一个版本为Avro。您可能会猜测它对用户和开发人员不是很友好。这是在Apache NiFi 1.5中解决的,大多数处理器使用的是Avro格式,因此您应该尽早转换为Avro,此后的体验几乎与Streamsets相同。
要在Apache NiFi中更改处理器设置,您必须停止处理器,而在Streamsets中,您必须停止整个数据流。
这意味着,在使用Streamsets对数据流进行任何更改之后,始终要从头开始。使用Apache NiFi,您可以停止行为异常的处理器,对其进行修复,然后重新启动。希望将排队的FlowFiles发送到固定处理器,并且您不会丢失数据。
但这并不意味着Streamsets数据流很难调试。实际上,这很容易,您有一个外观漂亮的实时仪表板,可在数据流运行时显示每个处理器的大量统计信息。错误在处理器图标上清晰地显示为红色数字,您可以通过单击鼠标查看每个错误记录的个别错误。您甚至可以将记录过滤器放在处理器之间的连接上,以检查有问题的记录。可以在数据流运行时应用过滤器,因此我将其用作实时调试工具。
Streamsets具有4种处理器类型:
来源:他们从外部来源获取数据。您的数据流中可能只有一个原始处理器。
处理器:数据转换器。
目标:它们将数据保存到外部系统或文件。
执行程序:它们处理其他处理器生成的事件。
一些Streamsets处理器可能会生成事件,包括错误。您应该使用称为执行程序的特殊处理器  来处理该问题。例如,有电子邮件执行程序,可以在发生错误时发送电子邮件。
我对仅带有处理器和控制器服务的干净的Apache NiFi架构感到更加满意,但是Streamsets设计也很好,可以很快使用。
用户界面
Apache NiFi
关于Apache NiFi UI没什么可说的。感觉是斯巴达式的,并且非常容易遵循,这要归功于出色的架构和最少的概念。我发现的唯一缺点可能是,对于长时间的SQL查询,Apache NiFi不会自动调整文本字段的大小,因此,每次要编辑弹出文本字段时,都必须手动调整其大小。
流集
Streamsets具有更吸引人的UI,但它也不是完美的。
我很快就烦恼的第一件事是缺少Controller Services,尤其是对于JDBC设置。您需要为从同一JDBC源读取数据的每个处理器填写所有JDBC设置。只是没有用户友好的方式来重用此类信息。
在运行数据流之前,流集将检查数据流中的每个处理器,以确保正确配置了所有处理器。这听起来像是一件好事,有时对我有帮助,但有时却对我有害。在Apache NiFi中,您可以断开处理器的连接,通常我将其留在调试时使用。在Streamset中,您不能执行相同操作,因为必须连接所有处理器才能使数据流通过验证。
另一个烦人的事情是您不能一次选择多个处理器。至少我做不到。移动十几个处理器并在屏幕上一个接一个地重组它们会让您发疯。
Streamsets具有突出显示SQL语法的功能,这是一个不错的功能,但并不总是有用的。我们的数据工程师创建了繁重的SQL查询,这些查询很容易长一百行。语法高亮显示过程变慢,这又带来了麻烦。如果您编辑长SQL查询的最后几行,则插入号会意外地移到开头,并且您键入的内容将出现在第一行。
结论
我对Apache NiFi和Streamsets进行了非常简短的介绍。它们具有许多有用的功能,这些功能在此博客文章中未涉及。即使找不到所需的内置或第三方处理器,也可以始终使用Python,Javascript,R甚至Apache Spark在Apache NiFi或Streamsets数据流中对复杂的数据转换逻辑进行编程。
题库
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:apache ETL APA IFI PAC

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2026-1-8 04:28