Profi.ru的数据工程师做什么
Profi.ru是一项服务,可帮助客户和各个领域的专家见面。服务数据库包含700种服务类型中的90万多位专家:导师,修理工,教练,美容大师,艺术家等。每天有超过1万笔新订单被注册-所有这些每天产生约1亿个事件。没有专业的数据工程师,不可能保持如此数量的数据井井有条。
理想情况下,数据工程师会发展一种数据文化,以帮助公司产生额外的收入或降低成本。它通过团队合作并充当各种参与者之间的重要纽带,从而为企业带来价值,从开发人员到报表的业务使用者。但是在每个公司中任务可能会有所不同,因此我们将以Profi.ru为例来考虑它们。
— -, -,
数据应清晰易决策,并且易于使用。您无需费力查找说明,也无需编写考虑了许多不同因素的复杂SQL查询。理想的图片-用户看着仪表板并对所有内容感到满意。而且,如果在某些方面没有足够的数据,那么它将进入数据库,并借助简单的SQL查询获得所需的信息。
数据质量流程在数据仓库的一般结构中的位置
关于使用数据的解释性文档非常重要。这简化了数据工程师(不受问题困扰)和数据用户(他可以自己找到问题的答案)的工作。在Profi.ru中,此类文件是在内部论坛上收集的。
便利性包括数据检索的速度。速度=可用性一步,单击-仪表板。但是实际上,一切都更加复杂。
从仪表板的最终用户的角度来看,同一Tableau不允许显示所有可能的尺寸。用户对仪表板开发人员创建的过滤器感到满意。这将创建两个方案:
- 开发人员对仪表板进行了很多削减–页数大大增加。这降低了数据的可用性:变得很难理解位置。
- 开发人员仅创建关键帧。查找信息比较容易,但是要减少标准的切割量,您仍然必须转到数据库或分析师。这也对可访问性不利。
可访问性是一个广泛的概念。这就是采用适当格式的数据的可用性,以及在仪表板上获取信息的能力以及必要的数据剪切。
一站式收集所有来源的数据
数据源可以是内部的,也可以是外部的。例如,某人的业务取决于要从外部来源收集和存储的天气报告。
必须存储带有来源指示的信息,并且还可以轻松找到数据。Profi.ru借助自动文档解决了此问题。YML文件用作有关内部数据源的文档。
制作仪表板
最好使用Tableau之类的专业工具来实现数据可视化。
大多数人都在情感上做出决策-可见度和美学很重要。顺便说一句,用于可视化的同一Excel不太适合:它不能满足数据用户的所有需求。例如,产品经理喜欢挖掘数字,但以一种方便的方式进行挖掘。这使他能够解决自己的问题,而不用考虑如何获取信息和收集指标。
高质量的数据可视化使决策更容易,更快捷。
一个人的位置越高,就越需要在电话上拥有手头的汇总数据。高层管理人员不需要细节-控制整个情况很重要,而BI是一个很好的工具。
产品仪表板Profi.ru(表格之一)的示例。出于保密目的,指标和轴的名称被隐藏
实际任务的例子
任务1-将数据从源(操作系统)传输到数据仓库或ETL
数据工程师的日常任务之一。
为此可以使用:
- 由cron或使用特殊的协调器(如Airflow或Prefect)运行的自写脚本;
- 开源ETL解决方案:Pentaho Data Integration,Talend Data Studio等;
- 专有解决方案:Informatica PowerCenter,SSIS等;
- 云解决方案:Matillion,Panoply等。
在一个简单的版本中,可以通过编写一个20行的YML文件来解决该问题,大约需要5分钟。
在最困难的情况下,当您需要添加新的源(例如,新的数据库)时,可能需要几天的时间。
在Profi中,此简单任务-简化了流程-包括以下步骤:
- 从客户中找出所需的数据以及数据的位置。
- 了解是否可以访问此数据。
- 如果没有访问权限,请询问管理员。
- 在Jira中使用发出代码将新分支添加到Git。
- 创建迁移以通过交互式Python脚本将数据添加到锚模型。
- 添加下载文件(YML文件,其中描述了从何处获取数据以及将数据写入到哪个表中)。
- 在展台上测试。
- 将数据上传到存储库。
- 创建一个拉取请求。
- 通过代码审查。
- 通过代码审查后,数据将上传到master分支并自动卷入生产环境(CI / CD)。
任务2-方便地放置下载的数据
另一个常见的任务是放置下载的数据,以便最终用户(或BI工具)可以轻松地使用它,而不必为大多数任务进行不必要的移动。即,构建或更新维度数据存储(DDS)。
为此,可以应用第一个任务的解决方案,因为这也是一个ETL过程。DDS以其最简单的形式使用SQL脚本进行更新。
任务3-来自非典型任务
流分析诞生于Profi。产品团队会产生大量事件-我们将其记录在ClickHouse中。但是您不能一次在其中大量插入记录,因此必须将记录成批合并。也就是说,您不能直接编写-您需要一个中间处理程序。
我们使用基于Apache Flink的引擎。到目前为止,过程如下:引擎处理传入的事件流⟶在ClickHouse中批量添加事件the动态计数15分钟内的事件数⟶将事件转移到服务中,从而确定是否存在异常-与相同的15分钟的值进行比较,深度为3个月⟶如果存在,它将向Slack发送通知。
前端分析架构(下载部分)
Apache Flink框架保证至少交付一次。但是,有重复的机会。对于RabbitMQ,可以使用相关ID来解决。这样就保证了一次交付的数据完整性。
我们使用Apache Flink再次计算事件的数量,通过NodeJS编写的自写仪表板,ReactJS的front进行显示。快速搜索没有类似的解决方案。而且代码本身非常简单-编写代码并不花时间。
监视是技术性的。为了防止在早期阶段出现问题,我们研究异常情况。该公司的一些重要全球指标尚未包括在监控中,因为流分析的方向处于组建阶段。
基本数据工程师工具
关于数据工程师的任务,现在或多或少地很清楚,现在稍微了解一下用于解决这些问题的工具。当然,不同公司中的工具可以(也应该)有所不同-一切都取决于数据量,其接收速度和异构性。这也可能取决于专家对一种特定仪器的偏见,因为他使用过这种仪器并且非常了解它。Profi.ru确定了此类选项→
用于数据可视化-Tableau,元数据库
Tableau被选择了很长时间。该系统使您可以快速分析大量数据,而无需昂贵的实现。对我们来说,它方便,美观且熟悉-我们经常在其中工作。
很少有人了解Metabase,同时它对于原型设计非常有用。
在可视化工具中,您还可以说一下Airbnb的Superset。它的特殊功能是许多数据库连接和可视化功能。但是,对于普通用户而言,它不如Metabase方便-您无法在其中联接表,因此您需要创建单独的视图。
在同一个配置数据库中,您可以联接表,此外,该服务可以自己执行操作,同时考虑数据库模式。 Metabase的界面更简单,更好。
有很多工具-随便找。
用于数据存储-ClickHouse,Vertica
ClickHouse是用于存储杂货事件的免费快速工具。在此基础上,分析师自己进行单独的分析(如果他们有足够的数据),或者数据工程师进行汇总并将其重新上传到Vertica以建立店面。
Vertica是一款很酷的用户友好产品,用于终端存储展示。
用于数据流控制和计算-气流
我们通过控制台工具加载数据。例如,通过MySQL附带的客户端,结果更快。
控制台工具的优点是速度。数据不会通过同一Python进程的内存进行泵送。在这些缺点中,对从一个数据库传输到另一个数据库的数据的控制较少。
主要的编程语言是Python
Python的入门门槛要低得多,而且该公司具有使用这种语言的能力。另一个原因是在气流下,DAG是用Python编写的。这些脚本只是下载内容的包装,大部分工作是通过控制台脚本完成的。
我们使用Java进行实时分析开发。
一种选择数据工具的方法-为了不繁育技术动物园该怎么做
市场上有很多工具可以在每个阶段使用数据:从数据的外观到输出,再到董事会的仪表盘。毫不奇怪,一些公司可能有许多不相关的解决方案-所谓的技术动物园。
技术动物园是做相同事情的工具。例如,用于消息传递的Kafka和RabbitMQ或用于可视化的Grafana和Zeppelin。
数据和AI领域的技术和公司地图-您可以看到有多少个重复的解决方案
同样,许多人可以出于个人目的使用不同的ETL工具。在Profi中,情况正是如此。主要的ETL在Airflow上,但是有人使用Pentaho进行个人上传。他们可以检验假设,而无需通过工程师来运行这些数据。基本上,从事研究活动-探索产品开发新方法的经验丰富的专家会使用自助服务工具。他们主要感兴趣的是用于分析的数据集,而且它还在不断变化。因此,将这些负载添加到主平台没有任何意义。
回到动物园。通常,重复技术的使用与人为因素相关。独立的内部团队习惯于使用另一个团队可能不使用的一个或另一个工具。有时自治是解决特殊问题的唯一方法。例如,研发团队需要使用某种工具进行测试-只是很方便,团队中的某人已经使用过它,或者还有另一个原因。等待系统管理员的资源来安装和配置此工具很长时间。同时,周到细致的管理员仍然需要证明这确实是必要的。因此,团队将工具安装在其虚拟机上并解决其特定任务。
, . , .
出现新工具的另一个常见原因是希望在一个尚未建立标准或没有经过验证的准则的较新领域尝试未知产品。像开发人员一样,数据工程师应始终研究新工具,以期找到更好的解决方案来解决当前问题或与市场需求保持同步。
尝试新工具的诱惑真的很棒。但是,为了做出正确的选择,首先需要自律。它可以帮助您不要完全专注于研究冲动,而可以考虑公司为新工具支持基础结构的能力。
不要为了技术而使用技术。最好以务实的方式解决这个问题:任务是可以解决此任务的一组工具。然后评估它们中的每一个并选择最佳的一个。例如,此工具可以更有效地解决问题,但是没有能力,并且该工具的效率略低,但是该公司的人员知道如何使用它。该工具是付费的,但易于维护和使用,这是一种时尚的开源软件,但是需要管理员的支持。这样的二分法出现,需要冷静的头脑来解决。
选择乐器是信念的飞跃,是个人经验的一半。尚不确定该工具是否适合。例如,在Profi中,他们从Pentaho开始,因为他们在该工具上拥有专业知识,但最后却发现这是一个错误的决定。随着项目的发展,内部的Pentaho存储库变得非常缓慢。顺便说一句,保存数据花了一分钟,如果习惯于不断保存工作,那么时间就从我的手指上溜走了。为此,添加了一个复杂的启动,计划任务-计算机挂起。
在转而使用Airflow时,痛苦结束了,Airflow是一个受大型社区欢迎的工具。
社区服务的存在对于解决复杂问题非常重要-您可以向同事寻求建议。如果公司成熟并且拥有资源,那么考虑购买技术支持是很有意义的。这将帮助您快速解决问题并获得使用该产品的建议。
如果我们谈论选择方法,则Profi遵循以下原则:
- 不要一个人做一个决定。当一个人选择某件事时,他会自动说服自己是对的。当有强有力的防御措施要说服别人时,这是另一回事。这也有助于了解仪器的弱点。
- 向首席数据官寻求建议(纵向对话)。这可以是BI团队负责人的首席数据工程师。上层对此情况的看法更为广泛。
- 与其他团队沟通(水平对话)。他们使用什么工具以及效果如何。也许同事的工具可以解决您的问题,而您不必安排很多解决方案。
内部能力可以有效替代外部服务提供商
选择工具的方法也可以被认为是公司内部能力的运用。
在很多情况下,企业的任务很艰巨,但是没有钱去执行。这项任务既艰巨又重要,以一种很好的方式,最好让具有相关经验的外部服务提供商参与。但是,由于没有这样的机会(金钱),因此将指派内部团队来解决问题。此外,如果企业已经证明了自己的有效性,那么企业通常会更信任其员工。
当员工制定新方向时,此类任务的示例正在执行负载测试并创建数据仓库。尤其是数据仓库,因为它对每个企业都是一个独特的故事。无法购买存储空间,您只能雇用外部专家,他们将在内部团队的支持下进行构建。
顺便说一下,随着新方向的发展,团队可能意识到对外部服务提供商的需求已经消失。
在Profi中,BI是在内部实施的。主要困难是该企业想要快速启动BI。但是建立这样的项目需要花费时间:建立能力,填写数据,建立便捷的存储方案,选择工具并掌握它们。
主阶段-热阶段-一切均已构建并结晶后,持续了大约一年。而且该项目仍在开发中。
在建立公司数据仓库时,重要的是要遵守高标准,捍卫自己的立场并且不要以某种方式取悦企业。但有时建议采用快速方法。因此,在产品开发中,它甚至可能是唯一正确的方法。您需要快速前进,测试产品假设等。但是存储必须基于可靠的体系结构,否则它将无法快速适应不断增长的业务,并且该项目将消失。
我们非常痛苦地重做了大部分项目,然后必须尽快完成。
在这个困难的项目中,我们的领导者提供了很多帮助,他们捍卫了工作的进展,向管理层解释了我们在做什么,浪费了资源,只是为我们辩护。没有这种支持,我不确定我们是否能够启动该项目。
在这样的故事中,所谓的早期采用者(准备好尝试新事物的人)在高层管理人员,分析师和产品经理中扮演着重要角色。为了使一个粗略的话题脱颖而出,需要开拓者来确认一切正常并且易于使用。
如果有人想分享上述第三个问题的解决方案-欢迎:-)