【转】Talend做业设计模式和最佳实践-Part II

转载地址:https://mp.weixin.qq.com/s?__biz=MzA3OTg1Mzk4Nw==&mid=2453261363&idx=1&sn=5674f1df83b833b0cb20368920c6a216&chksm=88604cffbf17c5e9e83ef06032f0b99004737e57b6f7eb110cdffa35bf2e276302cf17c764ef&mpshare=1&scene=1&srcid=#rdhtml

做者:talend官方sql

做业设计入门

做为有经验的Talend开发者,我老是好奇他人如何建立做业。他们是否正确使用各项功能?用到的样式我是否了解,抑或从未见过?想出的解决方案是否独到而精巧?又或者,鉴于画布/组件数据/工做流程自己的抽象性质,接下来是否愁云满面,不知所措…不管这些问题的答案如何,我以为使用专门设计的工具都很是重要。为此咱们着手研究“做业设计模式”及与之相关的最佳实践。在我看来,即使已了解Talend的全部特性和功能,可是根本需求仍然不变,那就是探索构建做业的最佳方法。数据库

从逻辑上讲,“业务用例”是任何Talend做业的关键基本驱动因素。事实上,我在同一工做流程看到各类不一样的状况,也看到了各种不一样工做流程。这些“用例”大多数从基本前提出发,即最简单的数据集成做业形式是从某个源提取数据并进行处理;在此过程当中可能进行转换,最终将其加载到某个目标位置。于是ETL/ELT代码不可或缺,Talend开发者也正致力于此。这一点咱们就再也不赘述,接下来放宽眼界,扩大探讨面。编程

奠基DI项目成功的三大基础

咱们都认同圆凳须要三条腿才能站稳,对吧?软件开发也是如此。构建并交付成功的数据集成项目须要三个基本要素:json

l 用例 - 明肯定义的业务数据/工做流程要求设计模式

l 技术 - 建立、部署和运行解决方案的工具服务器

l 方法 - 业界公认的行事方式架构

考虑这些要素,加上完善的“开发指南”文档,咱们以此为前提展开探讨。编辑器

扩展基本理论

若是说Talend“做业”在“用例”工做流程中包含了技术,那么“做业设计模式”就是构建它们的最佳实践“方法”。我在这些博文中分享的其余内容即使于您没有价值,至少会让您在做业构建方式上保持一致。若是您找到了更好的方法,认为很是有效,那再好不过,没必要作出改变。可是,若是您在性能、可重用性和可维护性方面备受困扰,或者须要反复调整代码以适应不断变化的需求,那么这些最佳实践对Talend开发者大有裨益!工具

须要考虑的另外9个最佳实践:

软件开发生命周期 (SDLC)

亿万富翁马库斯·莱蒙尼斯 (Marcus Lemonis) 在CNBC财经网的“The Profit”(利润)专栏中,将“人员、产品和流程”视为决定任何业务成败的三个关键因素。对此我很是赞同。SDLC流程对于任何软件开发团队都是殊为关键的环节。正确处理很是重要,而忽视则可能致使项目严重受阻,甚至形成灾难性后果。Talend的SDLC“最佳实践指南”针对Talend开发人员可用的持续集成和部署功能,深刻研究相关概念、原则、规范和细节。强烈建议软件开发团队将SDLC最佳实践归入“开发指南”文档,而后照此实施。

管理工做区

当您在笔记本电脑/工做站安装Talend Studio时(假设您拥有管理员权限),一般会在本地磁盘驱动器上建立默认的“工做区”目录,而且与许多软件安装同样,此默认位置位于可执行文件所在的目录中。我认为这么作确实不妥。为何?

项目文件(做业和存储库元数据)的本地副本存储在此“工做区”中,若是是经过Talend 管理中心 (TAC) 链接到源代码控制系统(即SVN或GIT),当您打开项目和保存对象时,这些副本也会同步。我认为应将这些文件放在易于查找和管理的位置,最好是在磁盘上的其余位置(或者其余本地盘)

须要说明,在Talend Studio中建立任何链接时都会使用工做区,包括“本地”及“远程”链接,区别在于后者由TAC管理,而前者则不是。对于咱们的订阅客户,“远程”链接一般是惟一使用的类型。

对于如何组织目录结构,应在“开发指南”文档中予以明确说明,并由整个团队采行,以实现最佳合做和协做。关键是团队要达成共识、培养纪律性并保持一致性

参考项目

您是否使用参考项目?是否了解其具体内容?我发现不少客户都不知道这项简单而高效的功能。咱们都但愿建立能够跨项目共享的可重用、共用或通用代码。我经常看到开发人员打开一个项目,复制代码片断,而后将其粘贴到单独的(有时是同一个)项目或做业中。或者从一个项目中导出对象,而后将它们导入另外一个项目。说来惭愧,这两种方式,我以前都实操过。虽然这些方式基本可行,但若是您曾陷入这些过程带来的麻烦中,就能了解其弊端不少,存在不少潜在的维护问题。怎么办?能够有更好的方法,那就是参考项目!这些项目的确让人眼前一亮。

若是您用过TAC来建立项目,可能注意到一个名为“参考”的不显眼的复选框。有没有想过这是用来作什么的?其实,若是建立项目时选中该框,使其成为“参考项目”,那么该项目能够“包含”或“连接”到任何其余项目。在“参考项目”中建立的代码随后可用于连接的项目(只读),于是具有高度可重用性。这在建立各种共用对象和共享代码时十分适用。

可是,请将这些“参考项目”保持在最低限度;咱们建议仅保留1项做为最佳实践,不过在一些有争议的案例中,也可酌情采用2-3项。注意:建立“参考项目”过多则可能失去其本来意义,所以须适可而止。谨慎管理很是重要,应在“开发指南”文档中明确说明其用法和规则,并由整个团队采行,以实现最佳合做和协做。

对象命名规则

“命名规则”确实十分重要,开发团队都了解这一点,所以会制定相应的实践。不管Talend对象名称使用的时间、内容及方式如何,取得合理成功的核心仍然是一致性。对Talend对象命名规则,应在“开发指南”文档中予以明确说明,并由整个团队采行,以实现最佳合做和协做。

项目存储库

使用Talend Studio(基于Eclipse的IDE,即集成开发环境,简言之就是您的做业编辑器)打开项目时,左侧面板表明项目存储库。这是全部项目对象所在的位置。这里有几个很是重要的版块。首先,您必需要了解“做业设计”版块,以便适应能够建立的3种不一样类型的做业(即数据集成、批处理和流式传输)。此外,您还需了解和运用如下版块。

l 上下文组(contexts) - 不是在内置做业建立上下文变量,而是在存储库中的上下文组中进行建立,并跨做业(以及参考项目中所包含的项目)予以重用;能够实现各个组有效地保持一致;最佳作法是建立对应于不一样环境的组:SBX/DEV/TEST/UAT/PROD,其中 DEV 为默认值;删除现有“默认”上下文;

注意我添加了一个上下文变量“SysENVTYPE”,其中包含选定环境中动态可编程性的值。换言之,我在做业中使用此变量来肯定运行时当前正在运行的环境,这样就能以编程方式经过条件逻辑更改相应流程。

l 元数据(metadata) - 元数据以不一样形式呈现,尽可全数利用,包括数据库链接及其表格模式、各种平面文件布局(csv、xml、json等),以及始终颇具用处的通用架构,这种架构可用于多种方式,在此不一一列出了,不然这篇博文内容会特别长

l 文档 - 生成您本身的项目Wiki并将其发布至团队;此功能将生成一套完整的项目相关html文件,能够轻松导航;此版块十分有用,并且仅需几分钟便可搞定

建议在“开发指南”文档中为团队添加一些最佳实践,并在团队中坚持使用。可根据须要进行调整,但要让团队中的每一个人都参与进来。

版本控制(分支和标记)

您可能已经注意到,每一个做业属性选项卡都有一个设置主要 (M) 和次要 (m) 版本编号方案的位置。此外,您还能够设置本身的建立状态,其中默认的可能状态包括“开发”、“测试”和“生产”。注意:Talend Open Studio (TOS) 等专为单一开发者设计,没法利用SVN/GIT存储库进行合做开发和源代码控制 (SCC)。您须要知道的是,每当碰到这些内部做业属性,都会在本地工做区中建立做业的完整副本,并与SCC系统同步。我见过一些项目,其中的做业副本由十几个内部版本展转生成。系统会复制该做业的全部副本,致使全部与SCC同步的从属文件迅速增长,项目所以尾大不掉,每次打开和关闭项目时会形成严重的性能问题。若是遇到这种状况,须要先执行导出,而后,从新导入仅最高版本的做业,以便清理工做区。虽然繁琐,但这么作颇有必要。

所以,在全部付费订阅环境中,版本控制的最佳作法是使用源生SCC分支和标记机制。这始终是管理项目版本发布的最佳方式,由于SCC只对于每一个做业保存的增量信息予以维护。这么作能够显著减小特定做业历史记录所需的空间。使用数字、日期或有用的内容来设计版本管理方案,在“开发指南”文档中予以详细说明,并且整个团队都采用该流程(造成一套正确的程序)。

内存管理

您但愿运行做业吗?是否考虑过做业的内存需求?数据流是否要在tMap中处理数百万行和/或众多列和/或多项查找?您是否考虑过看成业在“做业服务器”上运行时,其余做业可能也在同时运行?有没有想过“做业服务器”有多少核心/运存?您是如何配置tMap链接的?“一次性加载”仍是“逐行”进行?您的做业是调用子做业,仍是由父做业调用,涉及多少级嵌套做业?子做业是否在单独的JVM中运行?若是编写ESB做业,您知道正在建立多少条路由吗?您是否使用并行化(见下文)技术?好吧...这些问题您是否考虑过?有吗?我打赌没有 …

默认设置旨在为可配置的设置提供基本值。做业具备若干设置,包括内存的分配。但默认值并不是必定正确,事实上也可能存在错误。您的“用例做业设计”、“操做生态系统”和“实时JVM线程计数”决定了使用的内存量,须要对此进行管理。

您能够在项目一级或者特定做业中指定JVM内存设置(如上所述):

首选项 > Talend > 运行

作到这一点很重要,不然会产生严重后果。内存管理经常被忽视,可是做为一个团队,不管是在开发仍是在操做方面,都应当详细记录相应的指导原则并切实遵循。

动态SQL语法

许多数据库输入组件须要在其“基本设置”选项卡中包含正确的SQL语法。固然,能够直接在tMyDBInput(7.0新叫法,例如tmssqlinput/output等)组件中输入语法,这么作一样可行;但也要考虑相应的要求,若是在运行时须要根据做业(或其父做业)控制下的某些逻辑来动态地构建复杂SQL查询,能够经过至关直接的方法来解决这个问题。为SQL查询的基本结构建立“上下文变量”,到达tMyDBInput组件以前在工做流程中进行设置,而后使用上下文变量代替硬编码查询。

例如,我在“引用”项目存储库中开发了“上下文组”,称之为“SystemVARS”,其中包含各类有用且可重用的变量。对于动态SQL范式,我定义如下初始化为“null”的“字符串”变量:

根据须要在tJava组件中设置这些变量,而后将它们一并拼接到tMyDBInput查询字段中,以下所示:

“select ” + Context.sqlCOLUMNS + Context.sqlFROM + Context.sqlWHERE

请注意,变量值末尾始终包含一个“空格”,以便造成干净的串联。在须要进一步控制的位置,我也利用了“sqlSYNTAX”变量,并有条件地控制串联SQL语法子句的方式,而后直接将Context.sqlSYNTAX放到tMyDBInput查询字段中。大功告成。从数据库主机角度来看,这并不是动态SQL,但这是针对您的做业动态生成的SQL!

综上所述,记录这条指导原则,以便每一个人都能遵循相同的处理方式。

并行化选项

Talend提供几种支持代码并行化的机制。正确、高效地使用这些机制,并认真考虑对CPU核心和RAM利用率的潜在影响,就能建立高性能做业设计模式。咱们来看选项堆栈:

l 执行计划 - 可将多个做业/任务配置为从TAC并行运行,在plan配置的页面。

2

l 多个工做流程 - 可在共用相同线程的单个做业中启动多个数据流;当它们之间不存在依赖关系时,这多是罕见用例场景的技巧,我通常避免这么作,而更倾向于建立单独的做业

l 父/子做业 - 使用tRunJob组件调用子做业时,您能够选中“使用独立进程运行子做业”复选框,以创建单独的JVM堆/线程来运行子做业;虽然这并不是彻底意义上的并行化

3

l 组件 - tParallelize组件连接多个数据流以供执行;tPartitioner、tDepartitioner、tCollector和tRecollector组件提供对数据流的并行线程数的直接控制

l 数据库组件 - 大多数数据库输入/输出组件提供高级设置,以在特定SQL语句上启用并行化线程计数;这些能够高效进行,但设置数字太高可能会拔苗助长;设为2-5是最佳作法

可将全部这些并行化方法相互结合使用,按原样嵌套(但建议谨慎行之);应了解您的内存利用率堆栈。要很是清楚做业设计模式的执行流程。请注意,这些并行化选项仅做为高级功能出如今Talend平台产品。从文档中排除并行化指导原则:请务必避免!

成功Talend做业的秘诀

但愿这些做业设计模式最佳实践有助于您想出建立Talend做业的最佳方式。从根本上来讲,构建成功的做业有赖于指导原则、纪律性和一致性。只需制定决策,而后遵循便可。在咱们将代码绘制到数据/工做流程画布上时,请谨记:

“行动是通向全部成功的基本要诀。”- 巴勃罗·毕加索

最后,我准备了一份“宜与忌”准则清单,其中包含我认为构建成功的Talend做业所需的秘诀:

l 同时使用tPreJob和tPostJob组件

l 避免组件分类过密,建议在画布上分散排列

l 合理布置代码,自上而下、从左至右

l 初次编写代码时没必要急于求成

l 明确主做业循环并控制退出点

l 不可忽略错误处理技巧

l 普遍而明智地使用上下文组 (DEV/QA/UAT/PROD)

l 请勿建立大量单一做业布局

l 建立原子做业模块

l 化繁为简,避免复杂

l 随时使用通用模式(值得商榷的例外是单列模式)

l 记得命名对象

l 在适当位置使用小做业(可能只有少数几处)

l 不要过分使用tJavaFlex组件;tJava或tJavaRow可能足矣

l 完成后生成/发布项目文档

l 不要跳过运行时内存堆设置步骤

结语

好,感受如何,是否知足?但愿您仍然意犹未尽,由于后续我计划就这个系列作进一步讲解,再介绍一些“示范用例”。今天的博文丰富了以前的基础理论,并引入了更高一级的概念,敬请您予以考量,但愿对您有用。以上仅为抛砖引玉,也欢迎你们畅所欲言,在评论中谈谈本身遵循的一些最佳作法。期待下次再会。


若是您以为此文章对您有帮助,请点击右下方【推荐】让更多人看到,thanks!

相关文章
相关标签/搜索