欠伸展肢体,吟咏心自愉。这篇文章主要讲述深入浅出:数据流水线管理(下)相关的知识,希望能为你提供帮助。
在《??深入浅出:数据流水线管理(上)??》中,我们详细介绍了数据流水线的定义与模型、应用类别、运行方式、示例及挑战。在下半部分,我们将详细介绍数据流水线的功能需求、系统组件等内容。
数据流水线管理系统功能需求为应对12.5节列出的挑战,需要搭建一个满足以下功能需求的数据流水线管理系统:自动化流水线、数据管理和性能要求。
1、自动化流水线
数据中台的应用运营和调度,离不开一个高度可靠和自动化的数据流水线管理系统。用开源组件搭建的数据流水线可以完成很多工作,但在生产环境中,我们需要将软件工程的严谨性应用于数据管道的开发和执行中,加速数据处理和分析应用的交付,同时提高质量,降低成本。这样数据团队才能通过提供“更快、更好、更便宜”的数据来提高数据的商业价值和客户满意度。所以,像拼接积木一样将组件拼凑在一起是远远不够的。
这里举一个Uber的例子。Uber在早期快速发展阶段,使用了众多的数据工作流,因为缺乏一个良好的数据流管理工具,员工必须为每个用例从几个功能重叠的工具中进行选择。这个大工具箱虽然允许快速扩展,但要求工程师学习重复的数据工作流系统以应对不同的项目,被证明是难以管理和维护的。
因此,我们需要一个可以创建、管理、调度和部署数据工作流的中心工具,来实现数据管理自动化。在数据管理自化的阶段,通过拼接组件,企业已经拥有一个基本的大数据平台,接下来可能有以下需求:
要实现这些需求,需要一个作业调度引擎,一般称为工作流系统,能够根据时间或数据可用性来运行这些程序和查询(类似Linux机器上的Cron程序),常见的工作流系统包括Oozie、Azkaban、Airflow。
不同工作流系统之间的功能差异很大。例如,一些系统提供依赖关系管理,允许指定调度逻辑,如作业A仅在作业B和作业C完成时运行;一些系统允许仅管理Hadoop程序,而另一些系统则允许更多类型的工作流程,必须决定一个最符合要求的。
除了工作流系统,还有其他需要自动化的任务。例如,如果HDFS上的某些数据需要在一段时间后删除,假设数据只保留一年,那么在一年后的第一天,我们需要从数据集中删除最早一天的数据,依次类推,这就是数据保留策略。需要编写一个程序,为每个数据源指定并实施数据保留策略,否则硬盘容量将很快耗尽。
2、数据管理
当数据流水线投入生产并开始正常提供报告后,真正焦灼且有挑战性的问题来了:数据管理问题。一个企业级大数据系统不仅要处理与任何标准系统操作类似的硬件和软件故障问题,还要处理与数据相关的问题。一个真正数据驱动的系统需要确保数据完整、正确、准时,并为数据进化做好准备。因此,数据流水线管理系统应该满足下列数据管理需求:
此外,我们要为数据科学家提供单独的测试环境来测试代码,并提供各种便捷和安全的工具,使他们能够快速验证自己的想法,并将其方便地发布到生产环境。
3、性能要求
除了上面在自动化和数据管理方面的功能需求之外,数据流水线管理系统还必须满足下面的性能要求。
数据流水线管理系统组件为了达到上面列出的管理功能,搭建一个完善的数据流水线管理系统需要如图所示的系统组件。
数据流水线组件图
总而言之,建设一个完善的数据流水线管理系统的核心是在受控制的环境中应用一系列工具链,以支持在复杂分布式计算环境中的数据开发。
批流合一数据流水线上一篇介绍过数据流水线的应用举例,其中有批处理和流处理两种核心模式。在处理的时候一般需要将批处理和流处理数据分别存储和处理,这就会造成资源的冗余和额外的协调工作。其实时下还有一种非常流行的说法叫作批流合一(也叫作批流融合)。这个概念的兴起并不意外,流式处理引擎的发展非常迅速,从Storm到Spark Streaming再到Flink,原因有二:一是底层数据处理技术的更新迭代,二是业务的发展对流式处理框架提出了同时支持低延迟和高吞吐的要求。那么,企业在设计流水线整体架构时就需要考虑,是走批流分离路线还是走批流合一路线?
批流分离比较好理解,这里分析一下批流合一的底层逻辑。批流合一路线中一个比较激进的分支认定“批处理逐渐走向历史,流处理即将挑起大梁”,参考Jay Kreps提出的Kappa架构(如图)。
【深入浅出(数据流水线管理(下))】
Kappa架构图
正如作者Jay Kreps自述的那样:
在继续分析之前,先来回顾一下Lambda架构的基本特性。Lambda作为在传统数据分析平台进化的架构,其数据处理分为Speed Layer、Batch Layer和Serving Layer三个部分,其中:
Kappa架构体系中的规范数据存储不是使用像SQL这样的关系型数据库或像Cassandra这样的键值存储,而是仅附加不可变的日志。数据从日志中流过计算系统,并注入辅助的存储中以进行应用服务。
Kappa架构将Lambda架构化繁为简。Kappa体系结构系统类似于Lambda体系结构系统,但删除了批处理系统。要代替批处理,只需简单地将数据快速输送至流式系统中。
通过对比可以看出,Kappa的整体思路是在单个流式处理引擎中同时进行实时数据处理和连续再处理。这就要求传入的数据流可以全部或从特定位置进行回溯,如果有任何代码更改,则使用第二次流处理将通过最新的实时引擎重播所有先前的数据,并替换存储在服务层的数据。Kappa专注于仅将数据作为流处理,所以除了有非常适合的实际使用场景,其本质上不能替代Lambda体系结构。Kappa可以算是批流合一这个领域的突出代表,但是通过对它的分析,可以推导出一个初步结论:全面的批流合一的大一统是有一定难度的,但在用例非常确定的场景下,可以尝试。
分析完Kappa之后,继续来看Lambda。Lambda在一套平台中将批计算和流计算整合在了一起,但是经典的Lambda架构并不完美,随后出现的有状态流计算架构就是在其之上的不断优化:
在批流合一这个领域,在有状态流式计算架构中,基于Flink的解决方案是值得探讨的。Flink支持流式计算的状态管理,即计算过程中将算子的中间结果数据保存在内存或文件系统中,等下一个事件进入算子后可以从之前的状态中获取中间结果来计算当前的结果。这在大数据的实时数据应用处理场景中有非常好的支持,其中值得特别说明的应用场景是实时数据仓库的建设实践。在这个场景中,流式计算框架与离线数据仓库相结合,利用SQL灵活的加工能力,对流式数据进行实时清洗和结构化处理,同时利用有状态流式计算技术,降低在离线数据计算过程中调度逻辑的复杂度,快速产出分析及统计结果。
Flink的DataStream API用于开发流式应用,而DataSet API则用于处理批量数据。Flink提供丰富的转换操作以完成对数据集的批量处理,最终将数据写入外部存储介质中。原则上,Flink倾向于将批量数据作为流式数据的子集,进而通过一套引擎同时处理批量和流式数据。目前来看,批流合一的关注重点是将批作为流的特殊情况处理。Flink社区表示未来将会加大在批流合一这个领域的投入。
批和流是数据应用中的两种形态,有各自的应用场景。如果需要将两种状态融合,那么在容错性、数据异构性及数据一致性等方面都要进行相应的考量,并非一定要具体选择哪一种。在企业发展的不同阶段,业务的需求不尽相同,最重要的是在一个数据驱动的IT架构下,架构能随着企业发展的不同阶段而演化。
小结数据流水线是数据驱动的重要环节,也是数据中台建设的重要过程。数据流水线中数据流转的效率决定了数据中台建设过程中的数据能力共享、复用的效率。本章介绍了数据流水线及其在建设过程中的问题,并对数据流水线的最佳实践形式进行了详细阐述。
推荐阅读
- 第一个SSM整个框架完成增删改查的项目(里面的配置文件可以复用)
- Mac下hadoop,hive, hbase,spark单机环境搭建
- Some characters were lost while converting from UNICODE to CP 0. Save to file anyway? winedt
- 红蜘蛛控制软件
- tomcat 二进制 安装
- Github不想下载整个仓库 | 单个文件夹下载方式 简单的方法
- 新星计划·第三季 | 更好的总结创作
- 单片机设计 | 基于STM32单片机智能RFID刷卡汽车位锁设计
- MATLAB mod函数的一些坑和总结