低代码在分析平台中的应用

亲爱的读者,美好的一天!

对于任何一家其业务基于智能负载服务交付模型或创建技术复杂产品的公司来说,构建用于收集和分析数据的 IT 平台的任务迟早都会出现。 构建分析平台是一项复杂且耗时的任务。 然而,任何任务都可以简化。 在本文中,我想分享我使用低代码工具帮助创建分析解决方案的经验。 这些经验是在 Neoflex 公司大数据解决方案方向的多个项目实施过程中获得的。 自2005年以来,Neoflex的大数据解决方案方向一直致力于解决构建数据仓库和数据湖的问题,解决优化信息处理速度的问题以及研究数据质量管理的方法。

低代码在分析平台中的应用

没有人能够避免有意识地积累弱和/或强结构化数据。 也许即使我们谈论的是小型企业。 毕竟,在扩展业务时,有前途的企业家将面临开发忠诚度计划的问题,需要分析销售点的有效性,会考虑有针对性的广告,并对配套产品的需求感到困惑。 初步估计,这个问题可以“膝上”解决。 但随着业务的增长,进入分析平台仍然是不可避免的。

然而,什么情况下数据分析任务会发展成“火箭科学”类问题呢? 也许现在我们正在谈论真正的大数据。
为了让火箭科学变得更容易,你可以一块一块地吃掉大象。

低代码在分析平台中的应用

您的应用程序/服务/微服务越离散和自治,您、您的同事和整个企业就越容易消化这头大象。

几乎我们所有的客户都遵循这一假设,并根据 DevOps 团队的工程实践重建了景观。

但即使采用“单独的、庞大的”饮食方式,我们也很有可能出现 IT 领域“过度饱和”的情况。 此时此刻值得停下来,呼气并向旁边看去 低代码工程平台.

当从直接编写代码转向在低代码系统的 UI 界面中“拖动”箭头时,许多开发人员都担心自己的职业生涯会陷入死胡同。 但机床的出现并没有导致工程师的消失,而是将他们的工作提升到了一个新的水平!

让我们找出原因。

物流、电信行业、媒体研究、金融领域的数据分析总是与以下问题相关:

  • 自动分析速度;
  • 能够在不影响主要数据生产流程的情况下进行实验;
  • 所准备数据的可靠性;
  • 变更跟踪和版本控制;
  • 数据来源、数据沿袭、CDC;
  • 将新功能快速交付到生产环境;
  • 还有一个臭名昭著的问题:开发和支持的成本。

即工程师拥有大量的高层任务,只有明确低层开发任务的意识,才能以足够的效率完成这些任务。

开发者迈上新台阶的先决条件是业务的演进和数字化。 开发人员的价值也在发生变化:能够沉浸在业务自动化概念中的开发人员严重短缺。

让我们用低级和高级编程语言进行类比。 从低级语言到高级语言的过渡,就是从“用硬件的语言编写直接指令”到“用人的语言编写指令”的过渡。 也就是说,添加一些抽象层。 在这种情况下,从高级编程语言到低代码平台的过渡就是从“以人的语言指令”到“以商业语言的指令”的过渡。 如果有开发人员对此事实感到悲伤,那么他们也许从使用数组排序功能的 Java Script 诞生的那一刻起就一直在悲伤。 当然,这些功能可以通过相同高级编程的其他方式在后台进行软件实现。

因此,低代码只是另一个抽象层次的表象。

使用低代码的应用经验

低代码这个话题相当广泛,但现在我想用我们的一个项目的例子来谈谈“低代码概念”的实际应用。

Neoflex 的大数据解决方案部门更专注于金融业务领域,构建数据仓库和数据湖以及自动化各种报告。 在这个领域,低代码的使用早已成为一种标准。 在其他低代码工具中,我们可以提到用于组织 ETL 流程的工具:Informatica Power Center、IBM Datastage、Pentaho Data Integration。 或者 Oracle Apex,它充当快速开发用于访问和编辑数据的界面的环境。 然而,低代码开发工具的使用并不总是涉及在明显依赖于供应商的商业技术堆栈上构建高度针对性的应用程序。

使用低代码平台,您还可以组织数据流的编排、创建数据科学平台或用于检查数据质量的模块。

使用低代码开发工具的经验应用示例之一是 Neoflex 与 Mediascope(俄罗斯媒体研究市场的领导者之一)之间的合作。 该公司的业务目标之一是生成数据,广告商、互联网平台、电视频道、广播电台、广告代理机构和品牌可以根据这些数据做出购买广告的决策并规划其营销传播。

低代码在分析平台中的应用

媒体研究是一个技术含量很高的业务领域。 识别视频序列、从分析观看的设备收集数据、测量网络资源的活动 - 所有这些都意味着该公司拥有大量 IT 员工和构建分析解决方案的丰富经验。 但信息量、来源数量和种类的指数级增长迫使 IT 数据行业不断进步。 扩展已经运行的 Mediascope 分析平台的最简单解决方案可能是增加 IT 人员。 但更有效的解决方案是加快开发过程。 朝这个方向迈进的步骤之一可能是使用低代码平台。

在项目开始时,该公司已经拥有一个有效的产品解决方案。 然而,在 MSSQL 中实施该解决方案无法完全满足扩展功能的期望,同时保持可接受的开发成本。

我们面前的任务确实雄心勃勃 - Neoflex 和 Mediascope 必须在不到一年的时间内创建一个工业解决方案,并在开始日期的第一季度内发布 MVP。

选择Hadoop技术栈作为构建基于低代码计算的新数据平台的基础。 HDFS 已成为使用 parquet 文件进行数据存储的标准。 为了访问平台中的数据,使用了 Hive,其中所有可用的店面都以外部表的形式呈现。 将数据加载到存储中是使用 Kafka 和 Apache NiFi 实现的。

这个概念中的Lowe-code工具用于优化构建分析平台中最耗费人力的任务——数据计算任务。

低代码在分析平台中的应用

选择低代码数据报工具作为数据映射的主要机制。 Neoflex 数据报 是用于开发转换和数据流的工具。
使用这个工具,您无需手动编写 Scala 代码。 Scala 代码是使用模型驱动架构方法自动生成的。

这种方法的一个明显优点是加快开发过程。 不过,除了速度之外,还有以下优点:

  • 查看源/接收器的内容和结构;
  • 将数据流对象的起源追踪到各个字段(沿袭);
  • 部分执行转换并查看中间结果;
  • 执行前审查源代码并进行调整;
  • 自动验证转换;
  • 自动数据下载1合1。

进入用于生成转换的低代码解决方案的门槛非常低:开发人员需要了解 SQL 并具有使用 ETL 工具的经验。 值得一提的是,代码驱动的转换生成器并不是广义上的 ETL 工具。 低代码工具可能没有自己的代码执行环境。 也就是说,生成的代码将在安装低代码解决方案之前在集群上已有的环境中执行。 这也许是低代码业力的另一个优点。 因为,与低代码团队并行,“经典”团队可以使用纯 Scala 代码等方式实现功能。 将两个团队的改进引入生产将是简单且无缝的。

也许值得注意的是,除了低代码之外,还有无代码解决方案。 从本质上讲,这些是不同的东西。 低代码允许开发人员更多地干预生成的代码。 对于 Datagram,可以查看和编辑生成的 Scala 代码;无代码可能无法提供这样的机会。 这种差异不仅在解决方案的灵活性方面非常显着,而且在数据工程师工作的舒适度和积极性方面也非常显着。

解决方案架构

让我们尝试弄清楚低代码工具如何帮助解决优化开发数据计算功能的速度的问题。 首先我们看一下系统的功能架构。 这种情况的一个例子是媒体研究的数据生产模型。

低代码在分析平台中的应用

我们案例中的数据源非常异构且多样化:

  • 人数表(电视表)是软件和硬件设备,用于读取电视面板受访者的用户行为 - 参与研究的家庭中谁、何时以及观看了什么电视频道。 所提供的信息是链接到媒体包和媒体产品的广播观看间隔流。 在加载到数据湖阶段的数据可以通过人口统计属性、地理分层、时区和分析特定媒体产品的电视观看所需的其他信息来丰富。 所进行的测量可用于分析或规划广告活动、评估观众的活动和偏好以及编译广播网络;
  • 数据可以来自流媒体电视广播的监测系统以及测量互联网上视频资源内容的观看情况;
  • Web 环境中的测量工具,包括以站点为中心和以用户为中心的仪表。 数据湖的数据提供者可以是研究栏浏览器插件和具有内置 VPN 的移动应用程序。
  • 数据还可以来自整合了在线调查问卷填写结果和公司调查中电话访谈结果的网站;
  • 通过从合作伙伴公司的日志下载信息可以进一步丰富数据湖。

从源系统加载到原始数据的主要暂存的实施可以通过多种方式组织。 如果低代码用于这些目的,则可以根据元数据自动生成加载脚本。 在这种情况下,无需深入到开发源到目标映射的级别。 要实现自动加载,我们需要建立与源的连接,然后在加载接口中定义要加载的实体列表。 HDFS中的目录结构将自动创建,并与源系统上的数据存储结构相对应。

然而,在这个项目的背景下,我们决定不使用低代码平台的这一功能,因为 Mediascope 公司已经独立开始使用 Nifi + Kafka 组合制作类似的服务。

值得立即指出的是,这些工具不可互换,而是互补的。 Nifi 和 Kafka 能够以直接连接(Nifi -> Kafka)和反向连接(Kafka -> Nifi)工作。 对于媒体研究平台,使用了捆绑包的第一个版本。

低代码在分析平台中的应用

在我们的例子中,NayFi 需要处理来自源系统的各种类型的数据并将它们发送到 Kafka 代理。 在本例中,消息使用 PublishKafka Nifi 处理器发送到特定的 Kafka 主题。 这些管道的编排和维护是在可视化界面中进行的。 Nifi工具以及Nifi+Kafka组合的使用也可以称为低代码开发方式,降低了大数据技术的进入门槛,加快了应用程序的开发进程。

项目实施的下一阶段是将详细数据转换为单一语义层格式。 如果实体具有历史属性,则在相关分区的上下文中执行计算。 如果实体不是历史实体,则可以选择重新计算对象的全部内容,或者完全拒绝重新计算该对象(由于缺乏更改)。 在此阶段,为所有实体生成密钥。 密钥存储在主对象对应的Hbase目录中,其中包含分析平台中的密钥与源系统中的密钥之间的对应关系。 原子实体的合并伴随着分析数据初步计算结果的丰富。 数据计算的框架是Spark。 所描述的将数据引入单一语义的功能也是基于低代码数据报工具的映射来实现的。

目标架构需要业务用户通过 SQL 访问数据。 Hive 用于此选项。 当您在低代码工具中启用“Registr Hive Table”选项时,对象会自动注册到 Hive 中。

低代码在分析平台中的应用

计算流程控制

数据报有一个用于创建工作流设计的接口。 可以使用 Oozie 调度程序启动映射。 在流开发人员界面中,可以创建并行、顺序或依赖于执行的数据转换的方案。 支持 shell 脚本和 java 程序。 也可以使用 Apache Livy 服务器。 Apache Livy 用于直接从开发环境运行应用程序。

如果公司已经拥有自己的流程编排器,则可以使用 REST API 将映射嵌入到现有流程中。 例如,我们在将 Scala 中的映射嵌入到用 PLSQL 和 Kotlin 编写的编排器中方面拥有相当成功的经验。 低代码工具的REST API包括根据映射设计生成可执行年份、调用映射、调用映射序列,当然还有向URL传递参数以运行映射等操作。

与 Oozie 一起,可以使用 Airflow 组织计算流程。 也许我不会详细讨论 Oozie 和 Airflow 之间的比较,但我会简单地说,在媒体研究项目的工作背景下,选择了 Airflow。 这次的主要论点是开发产品的更活跃的社区和更发达的界面+API。

Airflow 也很好,因为它使用深受喜爱的 Python 来描述计算过程。 而且总体来说,开源的工作流管理平台并不多。 启动和监控流程的执行(包括甘特图)只会为 Airflow 的业力增加积分。

用于启动低代码解决方案映射的配置文件格式已变为spark-submit。 发生这种情况有两个原因。 首先,spark-submit 允许您直接从控制台运行 jar 文件。 其次,它可以包含配置工作流程的所有必要信息(这使得编写生成 Dag 的脚本变得更容易)。
在我们的案例中,Airflow 工作流程中最常见的元素是 SparkSubmitOperator。

SparkSubmitOperator 允许您运行 jars - 带有预先生成的输入参数的打包数据报映射。

值得一提的是,每个 Airflow 任务都在单独的线程中运行,并且不了解其他任务。 因此,任务之间的交互是使用控制运算符(例如 DummyOperator 或 BranchPythonOperator)进行的。

总而言之,数据报低代码解决方案的使用与配置文件的通用化(形成 Dag)相结合,显着加速并简化了开发数据加载流的过程。

展示计算

也许分析数据生成过程中最具智力负担的阶段是构建展示的步骤。 在研究公司的数据计算流程之一的背景下,在此阶段,数据被简化为参考广播,考虑到时区修正并链接到广播网格。 还可以针对本地广播网络(本地新闻和广告)进行调整。 其中,该步骤根据观看间隔的分析,对媒体产品连续观看的间隔进行细分。 立即根据有关其重要性的信息(计算校正因子)对观看值进行“加权”。

低代码在分析平台中的应用

准备展示的一个单独步骤是数据验证。 验证算法涉及许多数学科学模型的使用。 但是,使用低代码平台可以将复杂的算法分解为许多独立的视觉可读映射。 每个映射都执行一项狭窄的任务。 因此,数据准备阶段的中间调试、记录和可视化是可能的。

决定将验证算法离散化为以下子阶段:

  • 通过在 60 天内观看该地区所有网络的内容,建立该地区电视网络观看依赖关系的回归。
  • 计算所有回归点和计算日的学生化残差(实际值与回归模型预测值的偏差)。
  • 一系列异常区域-网络对,其中结算日的学生化余额超过正常值(由操作设置指定)。
  • 重新计算在该区域观看网络的每个受访者的异常区域-电视网络对的校正学生化残差,确定该受访者在从样本中排除该受访者的观看时的贡献(学生化残差的变化量) 。
  • 寻找那些被排除在外的候选人,使发薪日的学生化余额恢复正常。

上面的例子证实了这样的假设:数据工程师已经有太多的想法......而且,如果这确实是一名“工程师”而不是“程序员”,那么他会担心使用低代码工具时职业退化。最后必须撤退。

低代码还能做什么?

无需在 Scala 中手动编写代码即可进行批处理和流数据处理的低代码工具的应用范围还不止于此。

在Datalake开发中使用低代码已经成为我们的标准。 可以说,基于Hadoop堆栈的解决方案遵循了基于RDBMS的经典DWH的发展路径。 Hadoop 堆栈上的低代码工具可以解决数据处理任务和构建最终 BI 接口的任务。 此外,应该指出的是,BI不仅意味着数据的表示,还意味着业务用户对数据的编辑。 我们在为金融部门构建分析平台时经常使用此功能。

低代码在分析平台中的应用

除此之外,使用低代码,特别是数据报,可以解决跟踪数据流对象的起源的问题,原子性到各个字段(沿袭)。 为此,低代码工具实现了与 Apache Atlas 和 Cloudera Navigator 的接口。 本质上,开发人员需要在Atlas字典中注册一组对象,并在构建映射时引用注册的对象。 当需要改进计算算法时,跟踪数据来源或分析对象依赖关系的机制可以节省大量时间。 例如,在准备财务报表时,此功能可以让您更轻松地度过立法变更时期。 毕竟,我们越了解详细层对象上下文中的形式间依赖关系,我们就越少遇到“突然”的缺陷并减少返工的次数。

低代码在分析平台中的应用

数据质量和低代码

Mediascope 项目上的低代码工具实现的另一项任务是数据质量类任务。 研究公司项目实施数据验证管道的一个特点是对主要数据计算流程的性能和速度没有影响。 为了能够编排独立的数据验证流程,使用了已经熟悉的 Apache Airflow。 当数据生产的每个步骤准备就绪时,DQ 管道的一个单独部分并行启动。

从数据在分析平台中开始的那一刻起就对其质量进行监控被认为是良好的做法。 有了有关元数据的信息,我们可以从信息进入主层的那一刻起检查是否符合基本条件 - 不为空、约束、外键。 此功能是基于数据报中自动生成的数据质量系列映射来实现的。 在这种情况下,代码生成也是基于模型元数据的。 在Mediascope项目中,接口是通过Enterprise Architect产品的元数据来实现的。

通过将低代码工具与 Enterprise Architect 配对,可以自动生成以下检查:

  • 使用“not null”修饰符检查字段中是否存在“null”值;
  • 检查主键是否存在重复项;
  • 检查实体的外键;
  • 根据一组字段检查字符串的唯一性。

为了对数据可用性和可靠性进行更复杂的检查,使用 Scala Expression 创建映射,该映射将 Zeppelin 分析师准备的外部 Spark SQL 检查代码作为输入。

低代码在分析平台中的应用

当然,支票的自动生成必须逐步实现。 在所述项目的框架内,之前执行了以下步骤:

  • Zeppelin 笔记本中实现的 DQ;
  • 映射中内置 DQ;
  • DQ 采用单独的大规模映射的形式,包含针对单独实体的一整套检查;
  • 通用参数化 DQ 映射,接受有关元数据和业务检查的信息作为输入。

也许创建参数化检查服务的主要优点是减少向生产环境交付功能所需的时间。 新的质量检查可以绕过通过开发和测试环境间接交付代码的经典模式:

  • 所有元数据检查都是在 EA 中修改模型时自动生成的;
  • 可以基于存储对象上下文中下一条数据出现的预期时间的目录来生成数据可用性检查(确定某个时间点是否存在任何数据);
  • 业务数据验证检查由分析师在 Zeppelin 笔记本中创建。 从那里它们被直接发送到生产环境中的 DQ 模块设置表。

直接将脚本交付生产环境不存在任何风险。 即使出现语法错误,对我们的最大威胁也只是无法执行一项检查,因为数据计算流程和质量检查启动流程是相互分离的。

本质上,DQ 服务永久运行在生产环境中,并准备好在下一条数据出现时开始工作。

取而代之的是结论

使用低代码的优势是显而易见的。 开发人员不需要从头开始开发应用程序。 摆脱额外任务的程序员可以更快地产生结果。 反过来,速度可以腾出更多时间来解决优化问题。 因此,在这种情况下,您可以依靠更好更快的解决方案。

当然,低代码并不是万能的,魔法不会自行发生:

  • 低代码行业正处于“做强”阶段,尚无统一的行业标准;
  • 许多低代码解决方案不是免费的,购买它们应该是一个有意识的步骤,并且应该对使用它们的经济利益充满信心;
  • 许多低代码解决方案并不总是能很好地与 GIT/SVN 配合使用。 或者如果生成的代码被隐藏则使用起来不方便;
  • 在扩展架构时,可能需要对低代码解决方案进行细化——这反过来又会引发对低代码解决方案供应商的“依附和依赖”效应。
  • 足够的安全级别是可能的,但它非常耗费人力并且难以在低代码系统引擎中实现。 选择低代码平台不应仅仅基于从其使用中寻求利益的原则。 选择时,值得询问有关访问控制和将身份数据委派/升级到组织的整个 IT 环境级别的功能可用性的问题。

低代码在分析平台中的应用

然而,如果您知道所选系统的所有缺点,并且使用它的好处占主导地位,那么就可以放心地转向小代码。 此外,向它的过渡是不可避免的——就像任何进化都是不可避免的一样。

如果低代码平台上的一名开发人员比两名没有低代码的开发人员更快地完成工作,那么这将使公司在各个方面都处于领先地位。 低代码解决方案的进入门槛低于“传统”技术,这对解决人员短缺问题有积极作用。 使用低代码工具时,可以加快职能团队之间的交互,并更快地就所选数据科学研究路径的正确性做出决策。 低级平台可以推动组织的数字化转型,因为所产生的解决方案可以被非技术专家(特别是业务用户)理解。

如果您的期限紧迫、业务逻辑繁重、缺乏技术专业知识,并且需要加快上市时间,那么低代码是满足您需求的一种方法。

不可否认传统开发工具的重要性,但在许多情况下,使用低代码解决方案是提高所解决任务效率的最佳方式。

来源: habr.com

添加评论