vlambda博客
学习文章列表

高并发 高性能 Go语言开发企业级抽奖项目



这个课这里有,还有同类更多课



RECOMMEND

好课推荐


高并发 高性能 Go语言开发企业级抽奖项目










高并发 高性能 Go语言开发企业级抽奖项目



以下内容为填充,无视即可




用户可能会想这样协调一个操作。• 前一个操作成功完成时,开始运行这个操作。用户可能想这样管理一个操作。• 操作成功或失败,需要发送电子邮件通知。• 记录完成操作所需要的时间,或者完成操作的不同步骤所需要的时间。以上一系列的操作或者工作流可以通过一个有向无环图(Directed Acyclic Graph,DAG) 来表示。执行工作流时,操作要么并行,要么根据前次操作的结果执行。工作流协调调度将复杂的处理过程分解形成简单的、可重复使用的单元,这正是良好的工 程实践。工作流引擎有助于确定工作流组件之间的接口。另外,这里不需要考虑应用的逻 辑,因为使用的是自动化流程系统已经存在的一部分。良好的工作流自动化流程引擎能够支持这样一些业务需求:元数据与数据血缘跟踪(追踪 特定数据如何通过转化和合并步骤进行修改)、企业中不同软件之间的集成、数据生命周 期管理以及数据质量的追踪与报告。这里也支持运维功能,如管理工作流组件的存储库、 规划灵活的工作流、管理依赖关系、监控来自集中化位置的工作流状态、重试失败的工作 流、生成报表以及监测到问题出现时回滚工作流。下面我们来讨论一下对于架构师来说,有哪些基于 Hadoop 的应用进行协调调度的常见 方法。6.2 脚本的局限性 第一次部署基于 Hadoop 的应用时,你可能倾向于使用某种脚本语言(如 Bash、Perl 或 Python)将不同的操作结合到一起。如果工作流比较短而且不太重要,那么这种方法是可 行的,而且实施起来通常比其他方法更简单。Bash 脚本通常如例 6-1 所示。例 6-1 workflow.sh sqoop job -exec import_data if beeline -u "jdbc:hive2://host2:10000/db" -f add_partition.hql 2>&1 | grep FAIL then echo "Failed to add partition. Cannot continue." fi if beeline -u "jdbc:hive2://host2:10000/db" -f aggregate.hql 2>&1 | grep FAIL then echo "Failed to aggregate. Cannot continue." fi sqoop job -exec export_data 而且用户会经常执行该脚本,时间为每天上午 1 点,使用的 crontab 项如例 6-2 中所示。例 6-2 crontab 项 0 1 * * * /path/to/my/workflow.sh > /var/log/workflow-`date +%y-%m-%d`.log 图灵社区会员 largelove([email protected]) 专享 尊重版权 146 | 第 6 章 当该脚本投入生产,有人依赖脚本的结果时,就会有其他需求出现。你可能想更好地处理 错误、通知用户以及其他监控工作流状态的系统、追踪工作流(不管是作为整体的工作流 还是某个单一操作)的执行时间、更精细化地处理工作流不同步骤之间的逻辑、重新运行 整个工作流或者部分工作流,以及在不同工作流中复用已有的组件。在产品需求不断升级的情况下,维持一个内部自动化脚本会很困难,相当于从零开始。尽管 有很多工具具有这样的功能,我们还是建议熟悉其中的一个,以此满足自动化流程的需求。需要明白的是,迁移一个现存的工作流脚本使之能够在一个工作流管理器中运行,这种操 作一般来说并不是很复杂。如果各步骤之间相对独立——如例 6-1,每个步骤都使用前一 个步骤写入 HDFS 中的文件——那么转化会比较简单。不过,如果脚本使用标准输出或者 本地文件系统在不同步骤之间传递信息,那么这个过程可能会很复杂。如果后期有迁移计 划,那么在选择使用脚本中创建工作流,或是在工作流管理器中创建工作流的时候,就需 要慎重考虑以上因素。6.3 企业级任务调度器及Hadoop 很多公司的工作流自动化和调度软件都有一个内部统一的标准框架。常见的选择包括 ControlM、UC4、Autosys 与 ActiveBatch。使用现存的软件调度 Hadoop 工作流是一个比较 合理的选择。这样可以保证复用现有基础设施,而且不需要学习其他的框架。不仅是针对 Hadoop,将多种系统集成到同一工作流时,这种方法总会使集成变得更轻松。一般来说,这些系统会在每个服务器上安装 agent,以便在每个服务器中执行各种操作。在 Hadoop 集群中,用户的工具与应用 JAR 包通常在边缘节点(edge node,也称 gateway node,网关节点)上部署。使用这些工具设计工作流时,开发者通常会指定执行操作的 服务器,然后指定 agent 在服务器上执行的查询命令。例 6-1 中的命令分别为 sqoop 与 beeline。agent 将执行命令,等待命令的完成并且将返回状态报告给工作流管理器。设计 工作流时,开发者能够指定规则,即如何处理每个任务以及整个工作流的成功或者失败。同一个企业作业调度程序也能用于调度工作流,使其在指定的时间或者按照指定间隔周期 性运行。这些企业工作流自动化系统并不是针对 Hadoop 而创建的,所以使用这些系 统的详细概述不在本书的讨论范围之内。我们将重点介绍属于 Hadoop 生态 系统的框架。6.4 Hadoop生态系统中的工作流框架 Hadoop 生态系统中有一些工作流引擎。这些引擎紧密集成并且拥有内部支持。因此,对 于很多企业来说,如果需要调度 Hadoop 工作流,却没有标准的自动化解决方法,那么可 以选择其中一个工作流引擎用于工作流自动化与调度。对于分布式系统,较为流行的开源工作流包括 Apache Oozie、Azkaban、Luigi 与 Chronos。