首页 > 编程知识 正文

大数据分析平台的搭建(大数据实时平台搭建)

时间:2023-05-06 00:15:29 阅读:103573 作者:1958

目前经常使用大数据平台运行一些批处理任务,批处理当然离不开调度任务。例如,定期从业务数据库中提取数据,定期运行hive/spark任务,定期推送每日和每月的索引数据。任务调度系统已经成为大数据处理平台不可或缺的一部分。

一、原始任务调度

记得第一次从零开始参与大数据平台的搭建。最初,任务调度使用Crontab、分时日、月和周,并且在一台主机上配置了各种任务脚本。Crontab使用起来非常方便,配置也很简单。起初,任务很少。用起来还行。每天起床查看日志。任务越来越多,就出现了任务不能在原计划时间内完成的问题,就出现了在上级任务完成之前,靠后的任务已经起床的问题。此时,如果没有数据,任务会报告错误,或者两个任务并行运行,导致错误的结果。检查任务错误的原因越来越麻烦,各种任务的依赖关系也变得越来越负责。最后只是检查任务问题,每天一条一条整理麻绳。crontab虽然简单稳定,但是随着任务的增加和依赖关系的日益复杂,完全不能满足我们的需求。这时,我们需要建立自己的调度系统。

00-1010任务单元往往有很强的依赖关系,只有上游任务执行成功,下游任务才能执行。例如,上游任务1结束后,可以获得结果,下游任务2和3只能结合任务1的结果执行。因此,下游任务的启动只能在上游任务成功运行后才能开始,才能获得结果。为了保证数据处理结果的准确性,这些任务必须根据上下游的依赖关系有序高效地进行,最终保证业务指标能够按时正常生成。

二、调度系统

Apache Airflow是一款功能强大的工具,可以作为工作流工具进行任务有向无环图(DAG)的排列、任务调度和任务监控。气流管理DAG中作业之间的执行依赖关系,可以处理作业失败、重试和报警。开发人员可以编写Python代码,将数据转换为工作流中的操作。

它主要由以下组件组成:

Web server:主要包括工作流配置、监控、管理等操作调度器:工作流调度过程、触发工作流执行、状态更新等操作消息队列:存储任务执行命令和任务执行状态报告worker:执行任务和报告状态mysql:存储工作流和任务元数据信息具体执行过程:

Scheduler扫描dag文件并存储在数据库中,判断是否触发达到触发执行时间的dag的执行,生成dag_run,并将task_instance存储在数据库中,将执行命令发送给消息队列工作者,从队列中获取任务执行命令。执行工作者向消息队列调度器报告任务执行状态,以获得任务执行状态。然后做下一个手术。schduler根据状态更新数据库

Airflow

将每个任务操作组件拖放到工作区。kettle支持各种常见的数据转换。此外,用户可以将Python、Java、JavaScript和SQL中的自定义脚本拖放到画布上。Kettle可以接受多种文件类型作为输入,并通过JDBC和ODBC作为源或目的地连接到40多个数据库。社区版是免费的,但是提供的功能比付费版少。

Kettle

XXL-JOB是一个分布式任务调度平台,其核心设计目标是快速开发、简单学习、轻量级、易扩展。抽象调度行为形成“调度中心”的公共平台,而平台本身不承担业务逻辑,由“调度中心”负责发起调度请求;任务被抽象成分散的作业处理器,由“执行器”管理,执行器负责接收调度请求并执行作业处理器中相应的业务逻辑。因此,“调度”和“任务”两部分可以相互解耦,提高系统的整体稳定性和可扩展性。(后来我才知道XXL是作者的名字。

拼音首字母缩写)

调度系统开源工具有很多,可以结合自己公司人员的熟悉程度和需求选择合适的进行改进。

三、如何设计调度系统

调度平台其实需要解决三个问题:任务编排、任务执行和任务监控。

任务编排,采用调用外部编排服务的方式,主要考虑的是编排需要根据业务的一些属性进行实现,所以将易变的业务部分从作业调度平台分离出去。如果后续有对编排逻辑进行调整和修改,都无需操作业务作业调度平台。任务排队,支持多队列排队配置,后期根据不同类型的开发人员可以配置不同的队列和资源,比如面向不同的开发人员需要有不同的服务队列,面向不同的任务也需要有不同的队列优先级支持。通过队列来隔离调度,能够更好地满足具有不同需求的用户。不同队列的资源不同,合理的利用资源,达到业务价值最大化。任务调度,是对任务、以及属于该任务的一组子任务进行调度,为了简单可控起见,每个任务经过编排后会得到一组有序的任务列表,然后对每个任务进行调度。这里面,稍有点复杂的是,任务里还有子任务,子任务是一些处理组件,比如字段转换、数据抽取,子任务需要在上层任务中引用实现调度。任务是调度运行的基本单位。被调度运行的任务会发送到消息队列中,然后等待任务协调计算平台消费并运行任务,这时调度平台只需要等待任务运行完成的结果消息到达,然后对作业和任务的状态进行更新,根据实际状态确定下一次调度的任务。

调度平台设计中还需要注意以下几项:

调度运行的任务需要进行超时处理,比如某个任务由于开发人员设计不合理导致运行时间过长,可以设置任务最大的执行时长,超过最大时长的任务需要及时kill掉,以免占用大量资源,影响正常的任务运行。控制同时能够被调度的作业的数量,集群资源是有限的,我们需要控制任务的并发量,后期任务上千上万后我们要及时调整任务的启动时间,避免同时启动大量的任务,减少调度资源和计算资源压力;作业优先级控制,每个业务都有一定的重要级别,我们要有限保障最重要的业务优先执行,优先给与调度资源分配。在任务积压时候,先执行优先级高的任务,保障业务影响最小化。

四、总结

ETL 开发是数据工程师必备的技能之一,在数据仓库、BI等场景中起到重要的作用。但很多从业者连 ETL 对应的英文是什么都不了解,更不要谈对 ETL 的深入解析,这无疑是非常不称职的。做ETL 你可以用任何的编程语言来完成开发,无论是 shell、python、java 甚至数据库的存储过程,只要它最终是让数据完成抽取(E)、转化(T)、加载(L)的效果即可。由于ETL是极为复杂的过程,而手写程序不易管理,所以越来越多的可视化调度编排工具出现了。

不管黑猫白猫,只要能逮住老鼠就是好猫。不管是哪种工具,只要具备高效运行、易于维护两个特点,都是一款好工具。

作者:数据社 大数据实践的那些事,专注MPP数据库研究、流处理计算、数据仓库架构和数据分析

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。