大数据技术之Azkaban2

简介: 大数据技术之Azkaban2

2.2.3 自动失败重试案例

需求:如果执行任务失败,需要重试 3 次,重试的时间间隔 10000ms

具体步骤:

  1. 编译配置流


参数说明:

  • retries:重试次数
  • retry.backoff:重试的时间间隔

2)将修改后的 basic.flow 和 azkaban.project 压缩成 four.zip 文件

3)重复 2.3.1 节 HelloWorld 后续步骤。

4)执行并观察到一次失败+三次重试

5)也可以点击上图中的 Log,在任务日志中看到,总共执行了 4 次。

6)也可以在 Flow 全局配置中添加任务失败重试配置,此时重试配置会应用到所有 Job。

案例如下:


2.2.4 手动失败重试案例

需求:JobA=》JobB(依赖于 A)=》JobC=》JobD=》JobE=》JobF。生产环境,任何 Job 都

有可能挂掉,可以根据需求执行想要执行的 Job。

具体步骤:

1)编译配置流

2)将修改后的 basic.flow 和 azkaban.project 压缩成 five.zip 文件

3)重复 2.3.1 节 HelloWorld 后续步骤。


Enable 和 Disable 下面都分别有如下参数:


Parents:该作业的上一个任务


Ancestors:该作业前的所有任务


Children:该作业后的一个任务


Descendents:该作业后的所有任务


Enable All:所有的任务


4)可以根据需求选择性执行对应的任务。


第 3 章 Azkaban 进阶

3.1 JavaProcess 作业类型案例

JavaProcess 类型可以运行一个自定义主类方法,type 类型为 javaprocess,可用的配置为:


Xms:最小堆


Xmx:最大堆


classpath:类路径


java.class:要运行的 Java 对象,其中必须包含 Main 方法


main.args:main 方法的参数(可以传多个值,空格分隔)


案例:


1)新建一个 azkaban 的 maven 工程


2)创建包名:com.atguigu


3)创建 AzTest 类


package com.atguigu;
public class AzTest {
 public static void main(String[] args) {
     System.out.println("This is for testing!");
 }
}

4)打包成 jar 包 azkaban-1.0-SNAPSHOT.jar

5)新建 testJava.flow,内容如下

nodes:
 - name: test_java
   type: javaprocess     
   config: 
       Xms: 96M
       Xmx: 200M
       java.class: com.atguigu.AzTest

骚戴理解:在Azkaban中,如果在使用JavaProcess类型的作业时没有指定classpath,将默认使用系统变量CLASSPATH的值作为classpath。如果系统变量CLASSPATH未设置,则默认使用当前目录作为classpath。


6)将 Jar 包、flow 文件和 project 文件打包成 javatest.zip


7)创建项目=》上传 javatest.zip =》执行作业=》观察结果

3.2 条件工作流案例

条件工作流功能允许用户自定义执行条件来决定是否运行某些Job。


条件可以由当前Job的父 Job 输出的运行时参数构成


条件可以使用预定义宏。


在这些条件下,用户可以在确定 Job执行逻辑时获得更大的灵活性,例如,只要父 Job 之一成功,就可以运行当前 Job。


骚戴理解:例如有三个job,分别是jobA,jobB,jobC,其中jobC依赖于jobA和jobB,默认jobC运行的条件就是jobA和jobB都执行完了,才会执行jobC。但是通过条件工作流功能就可以实现只要jobA和jobB有一个执行完就执行jobC的效果。


预定义宏指的是一些预先定义好的变量,在Azkaban中被用来传递信息和简化工作流的配置。这些预定义宏可以用于工作流文件的各个部分(例如任务命令行中的参数、电子邮件通知模板等),以便在运行时根据需要进行替换。使用预定义宏可以减少重复编码,提高可维护性和灵活性。Azkaban自带了一些预定义宏(例如${jobId}表示当前任务的ID、${startTime}表示任务开始时间等),用户还可以自定义自己的预定义宏。


3.2.1 运行时参数案例

1)基本原理


(1)父 Job 将参数写入 JOB_OUTPUT_PROP_FILE 环境变量所指向的文件


(2)子 Job 使用 ${jobName:param}来获取父 Job 输出的参数并定义执行条件


2)支持的条件运算符:


(1)== 等于


(2)!= 不等于


(3)> 大于


(4)>= 大于等于


(5)< 小于


(6)<= 小于等于


(7)&& 与


(8)|| 或


(9)! 非


3)案例:


需求:


JobA 执行一个 shell 脚本。


JobB 执行一个 shell 脚本,但 JobB 不需要每天都执行,而只需要每个周一执行。


(1)新建 JobA.sh


#!/bin/bash
echo "do JobA"
wk=`date +%w`
echo "{\"wk\":$wk}" > $JOB_OUTPUT_PROP_FILE

骚戴理解:这里date +%w是获取当前是星期几,返回数据,其中周日返回0,其他1-6。然后用梵引`把值赋予给wk变量,最后通过josn的格式把wk写到JOB_OUTPUT_PROP_FILE环境变量里,其中\"是转义后的双引号。这里的思路是jobA获取当前日期然后写到JOB_OUTPUT_PROP_FILE中,jobB去获取jobA传过来的日期,然后进行判断,注意jobA的日期和jobB的日期是同一天


(2)新建 JobB.sh

1. #!/bin/bash
2. echo "do JobB


(3)新建 condition.flow

nodes:
- name: JobA
  type: command
  config:
     command: sh JobA.sh
- name: JobB
  type: command
  dependsOn:
     - JobA
  config:
     command: sh JobB.sh
  condition: ${JobA:wk} == 1

(4)将 JobA.sh、JobB.sh、condition.flow 和 azkaban.project 打包成 condition.zip


(5)创建 condition 项目=》上传 condition.zip 文件=》执行作业=》观察结果


(6)按照我们设定的条件,JobB 会根据当日日期决定是否执行。



3.2.2 预定义宏案例

Azkaban 中预置了几个特殊的判断条件,称为预定义宏。


预定义宏会根据所有父 Job 的完成情况进行判断,再决定是否执行。可用的预定义宏如下:


(1)all_success: 表示父 Job 全部成功才执行(默认)


(2)all_done:表示父 Job 全部完成才执行


(3)all_failed:表示父 Job 全部失败才执行


(4)one_success:表示父 Job 至少一个成功才执行


(5)one_failed:表示父 Job 至少一个失败才执行


1)案例


需求:


JobA 执行一个 shell 脚本


JobB 执行一个 shell 脚本


JobC 执行一个 shell 脚本,要求 JobA、JobB 中有一个成功即可执行


(1)新建 JobA.sh

#!/bin/bash
echo "do JobA"

(2)新建 JobC.sh

1. #!/bin/bash
2. echo "do JobC"


(3)新建 macro.flow

nodes:
    - name: JobA
      type: command
      config:
          command: sh JobA.sh
    - name: JobB
      type: command
      config:
          command: sh JobB.sh 
    - name: JobC
      type: command
      dependsOn:
         - JobA
         - JobB
     config:
          command: sh JobC.sh
     condition: one_success


(4)JobA.sh、JobC.sh、macro.flow、azkaban.project 文件,打包成 macro.zip。

注意:没有 JobB.sh。

(5)创建 macro 项目=》上传 macro.zip 文件=》执行作业=》观察结果

相关实践学习
基于MaxCompute的热门话题分析
Apsara Clouder大数据专项技能认证配套课程:基于MaxCompute的热门话题分析
目录
相关文章
|
2月前
|
存储 人工智能 大数据
云栖2025|阿里云开源大数据发布新一代“湖流一体”数智平台及全栈技术升级
阿里云在云栖大会发布“湖流一体”数智平台,推出DLF-3.0全模态湖仓、实时计算Flink版升级及EMR系列新品,融合实时化、多模态、智能化技术,打造AI时代高效开放的数据底座,赋能企业数字化转型。
690 0
|
4月前
|
数据采集 人工智能 分布式计算
ODPS在AI时代的发展战略与技术演进分析报告
ODPS(现MaxCompute)历经十五年发展,从分布式计算平台演进为AI时代的数据基础设施,以超大规模处理、多模态融合与Data+AI协同为核心竞争力,支撑大模型训练与实时分析等前沿场景,助力企业实现数据驱动与智能化转型。
403 4
|
5月前
|
存储 分布式计算 Hadoop
Hadoop框架解析:大数据处理的核心技术
组件是对数据和方法的封装,从用户角度看是实现特定功能的独立黑盒子,能够有效完成任务。组件,也常被称作封装体,是对数据和方法的简洁封装形式。从用户的角度来看,它就像是一个实现了特定功能的黑盒子,具备输入和输出接口,能够独立完成某些任务。
|
2月前
|
数据可视化 大数据 关系型数据库
基于python大数据技术的医疗数据分析与研究
在数字化时代,医疗数据呈爆炸式增长,涵盖患者信息、检查指标、生活方式等。大数据技术助力疾病预测、资源优化与智慧医疗发展,结合Python、MySQL与B/S架构,推动医疗系统高效实现。
|
4月前
|
SQL 分布式计算 大数据
我与ODPS的十年技术共生之路
ODPS十年相伴,从初识的分布式计算到共生进化,突破架构边界,推动数据价值深挖。其湖仓一体、隐私计算与Serverless能力,助力企业降本增效,赋能政务与商业场景,成为数字化转型的“数字神经系统”。
|
4月前
|
存储 人工智能 算法
Java 大视界 -- Java 大数据在智能医疗影像数据压缩与传输优化中的技术应用(227)
本文探讨 Java 大数据在智能医疗影像压缩与传输中的关键技术应用,分析其如何解决医疗影像数据存储、传输与压缩三大难题,并结合实际案例展示技术落地效果。
|
4月前
|
机器学习/深度学习 算法 Java
Java 大视界 -- Java 大数据在智能物流运输车辆智能调度与路径优化中的技术实现(218)
本文深入探讨了Java大数据技术在智能物流运输中车辆调度与路径优化的应用。通过遗传算法实现车辆资源的智能调度,结合实时路况数据和强化学习算法进行动态路径优化,有效提升了物流效率与客户满意度。以京东物流和顺丰速运的实际案例为支撑,展示了Java大数据在解决行业痛点问题中的强大能力,为物流行业的智能化转型提供了切实可行的技术方案。
|
5月前
|
数据采集 自然语言处理 分布式计算
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
大数据岗位技能需求挖掘:Python爬虫与NLP技术结合
|
5月前
|
存储 分布式计算 算法
Java 大视界 -- Java 大数据在智能教育在线考试监考与作弊检测中的技术创新(193)
本文探讨了Java大数据技术在智能教育在线考试监考与作弊检测中的创新应用。随着在线考试的普及,作弊问题日益突出,传统监考方式难以应对。通过Java大数据技术,可实现考生行为分析、图像识别等多维度监控,提升作弊检测的准确性与效率。结合Hadoop与Spark等技术,系统能实时处理海量数据,构建智能监考体系,保障考试公平性,推动教育评价体系的数字化转型。
|
5月前
|
SQL 缓存 监控
大数据之路:阿里巴巴大数据实践——实时技术与数据服务
实时技术通过流式架构实现数据的实时采集、处理与存储,支持高并发、低延迟的数据服务。架构涵盖数据分层、多流关联,结合Flink、Kafka等技术实现高效流计算。数据服务提供统一接口,支持SQL查询、数据推送与定时任务,保障数据实时性与可靠性。