我的工作是数据挖掘,很大程度依仗数据开发。如果说数据挖掘是在烹饪美食,数据开发就是选食材、清洗食材的过程。没有好的数据开发,就没有好的数据洞察。 恰好,我自身也经历了两家不同规模的公司。由于起点的先后,前者的历史包袱严重。基于惯性,数据挖掘的任何数据,都得从原始log中提取。没有数据治理、数据分层的概念。这不仅增多了重复性的劳动,也增加了服务器集群的压力。数十款 top 游戏,每一款、每个人都这样搞,浪费时间、浪费算力。 目前这家,则大不相同。技术债不多,数据治理做得还不错。没有大谈特谈数据中台,数据开发的每一行代码,都是为下游,而不是晋升服务。数据挖掘也很少碰原始 log,这节约了大量时间,让下游有更多时间集中在业务上。
同样是数据开发,却产生不一样的结果。这让我对该工作的定位,产生了兴趣。也这篇文章的由来。
言归正传。本文翻译自:https://towardsdatascience.com/data-engineering-in-2020-e46910786eda 结合实际工作,有较大幅度删改。
随着数据体量的进一步增大,数据处理工具和技术的发展也日新月异。数据开发的工作性质也发生了巨大变化。如今所使用的工具,同十年前已大不相同。
虽然技术在发展变化,但还是存在延续性。除开大数据开发相关技能,一些更基础的技能,也值得学习。例如:版本控制(git,svn),测试驱动(TDD),继续集成和部署(CI,CD)。而这,常常容易被初学者忽略。数据开发与软件开发常常呈现割裂状态。事实上,软件开发的工作流,对数据开发是一种补足。
早期的 ETL 工程师
大数据热潮之前,数据团队常常由 BI 和 ETL 开发组成。
典型的 ETL 开发,就是将数据集从位置 A 移动到位置 B,并使用该数据构建部署到 Web 的仪表板(BI)。除此之外,BI 和 ETL 的开发与软件工程无关,该学科在本世纪初已日趋成熟。(事实上,很多公司这一步都没做好。就开始吹捧数据中台概念,为晋升找噱头。)
随着数据量的增长,以及数据分析需求的增加,在过去十年中,出现了新趋势。更现代的 BI 工具(如付费的 Tableau,免费的 D3.js 等),允许以最小成本创建仪表盘。数据开发已成为一门新学科,它使用一套新工具将软件工程原理应用于 ETL 开发。
如今的数据开发工程师
一般来说,为了使流程更加顺滑,会创建数据管道(data pipeline)。在大规模数据上,这意味着将十多种不同的技术(甚至更多)融合在一起。数据工程师必须深入了解各种技术,选择合适的工具来完成工作。并用 Scala,Java 或 Python 编写代码,才能创建弹性和可扩展的解决方案。数据工程师必须了解他们的数据,才能创建合适的分布式处理作业。数据工程师必须了解基础架构,才能确定作业失败的原因。
从概念上讲,这和典型的 ETL 作业没有区别。都是从许多数据源收集数据,将它们放入集中的数据仓库中以备分析。接着,将其转换为BI报表或机器学习模型。但是,他们之间的唯一区别,就在于数据体量的不同。后者在大规模数据下,面临更多挑战。
数据开发产业现状
在很多文章中,建议数据工程师应具备如下工具使用经验:如Hadoop,Spark,Kafka,Hive,HBase,Cassandra,MongoDB,Oozie,Flink,Zookeeper 等。
了解它们的使用,是最基础的。知其然,更要知其所以然。不仅需要掌握他们的使用,更应该明了:它们旨在解决哪些特定问题,应该或不应该在哪里使用。如果不能使用,还有什么替代方案。
近年来,快速发展的云技术,已经产生了各种各样的云原生应用程序和服务。就像几年前现代 BI 工具的应用,更多的业务可以便捷的进行数据分析。现代的云原生数据技术栈,简化了数据的提取和转换任务。
像 Apache Spark 这样的技术在未来几年仍将流行,因为它们非常适合复杂的数据转换。
尽管如此,Snowflake 和 Google BigQuery 等云数据工具的使用率很高,因为他们简化了数据提取的过程。
而Spark,则需要一定门槛的专业化的技能。
目前来看,国内的类似产品 MaxCompute,市场接受度似乎还不高?snowflake 前两天上市了,投资人挺喜欢它的故事,巴菲特也跟投了。
数据开发技能清单(补充)
除开基本的数据开发技能,如 Hadoop 那套生态外,还建议掌握如下技能:
-
版本控制(Git)和 CI / CD pipeline
SQL也是代码,因此,软件开发的那套同样有用。
- 保证代码更改可追溯。知道谁,何时以及为什么更改代码。
- 自动化测试。代码应通过自动化的测试。
- 自动化部署,代码应易于部署到不同的环境。
- 对云数据分析有所了解
人类倾向于按惯性使用工具和方法,因为这会使我们更高效。但是,并非每次,面临的挑战都一样。切莫拿着锤子找钉子。如今,更有效的方法正在角落发芽🌱。
尝试使用云数据系统,可能会有心理和现实上的阻力。一方面是面对未知的陌生感,一方面是团队内的惯性。最好的方法是,先从其他公司的经验中学习。
许多成功的初创公司,都非常开放地介绍其数据技术栈,以及他们在发展中汲取的教训。
数据工程师的角色转变
保持好奇心,紧跟行业动态。
过去几年中,数据处理工具和技术得到了巨大的发展。数据工程师中的许多人,已经可以随数据量的增长,轻松扩展应用。这大大简化了数据分析技术栈和使用它所需的门槛。
这意味着数据工程师的角色正在改变。当然,并不意味着它变得更容易。随着技术的进步,业务需求也在增长。但是,该角色可能会变得更加专业化,或分为几个不同的领域。角色分工进一步细化。
新工具使数据工程师可以专注于核心数据基础架构,性能优化,自定义数据 pipeline 和总的项目编排。同时,那些熟悉SQL的人,都可以共享这些 pipeline 中的数据转换代码。例如,analytics engineering 开始成为现实。该角色位于数据工程和数据分析之间,重点在于数据清洗和数据质量。
不管名称如何变化,“传统”数据开发人员的基本技能,仍有所作为。SQL技能和数据建模,在数据开发中仍然很普遍。
了解和学习云分析数据技术,知道如何组合不同组件,学习新的编程语言并习惯于版本控制。
最后打个广告,目前的公司在招募数据开发。各位数据开发大佬,期待您的加入。在我的个人网站主页,可找到目前服务的公司,进行内推。