大数据技术之Azkaban2

本文涉及的产品
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: 大数据技术之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的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps&nbsp;
目录
相关文章
|
2月前
|
存储 机器学习/深度学习 分布式计算
大数据技术——解锁数据的力量,引领未来趋势
【10月更文挑战第5天】大数据技术——解锁数据的力量,引领未来趋势
|
18天前
|
存储 机器学习/深度学习 SQL
大数据处理与分析技术
大数据处理与分析技术
69 2
|
2月前
|
存储 分布式计算 数据可视化
大数据常用技术与工具
【10月更文挑战第16天】
125 4
|
20天前
|
存储 分布式计算 NoSQL
【赵渝强老师】大数据技术的理论基础
本文介绍了大数据平台的核心思想,包括Google的三篇重要论文:Google文件系统(GFS)、MapReduce分布式计算模型和BigTable大表。这些论文奠定了大数据生态圈的技术基础,进而发展出了Hadoop、Spark和Flink等生态系统。文章详细解释了GFS的架构、MapReduce的计算过程以及BigTable的思想和HBase的实现。
|
2月前
|
存储 数据采集 监控
大数据技术:开启智能决策与创新服务的新纪元
【10月更文挑战第5天】大数据技术:开启智能决策与创新服务的新纪元
|
14天前
|
机器学习/深度学习 存储 大数据
云计算与大数据技术的融合应用
云计算与大数据技术的融合应用
|
20天前
|
SQL 存储 算法
比 SQL 快出数量级的大数据计算技术
SQL 是大数据计算中最常用的工具,但在实际应用中,SQL 经常跑得很慢,浪费大量硬件资源。例如,某银行的反洗钱计算在 11 节点的 Vertica 集群上跑了 1.5 小时,而用 SPL 重写后,单机只需 26 秒。类似地,电商漏斗运算和时空碰撞任务在使用 SPL 后,性能也大幅提升。这是因为 SQL 无法写出低复杂度的算法,而 SPL 提供了更强大的数据类型和基础运算,能够实现高效计算。
|
23天前
|
存储 大数据 定位技术
大数据 数据索引技术
【10月更文挑战第26天】
48 3
|
23天前
|
存储 大数据 OLAP
大数据数据分区技术
【10月更文挑战第26天】
58 2
|
26天前
|
消息中间件 分布式计算 大数据
数据为王:大数据处理与分析技术在企业决策中的力量
【10月更文挑战第29天】在信息爆炸的时代,大数据处理与分析技术为企业提供了前所未有的洞察力和决策支持。本文探讨了大数据技术在企业决策中的重要性和实际应用,包括数据的力量、实时分析、数据驱动的决策以及数据安全与隐私保护。通过这些技术,企业能够从海量数据中提取有价值的信息,预测市场趋势,优化业务流程,从而在竞争中占据优势。
76 2