img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上大数据知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化资料的朋友,可以戳这里获取

从其他封闭系统产生的日志文件,经由本系统的后端部分近线解析,将结果直接存入MySQL,而后由数仓部分使用Python脚本洗入Hive,但这实在是太慢了。

在代码当中埋了一些输出点之后,经过对行为日志的分析,我们发现最慢的部分是在数据转换的Python脚本部分

更进一步地,Python脚本的结构大概是:

#mermaid-svg-8TGRzlFi0cWusPk7 {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8TGRzlFi0cWusPk7 .error-icon{fill:#552222;}#mermaid-svg-8TGRzlFi0cWusPk7 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-8TGRzlFi0cWusPk7 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-8TGRzlFi0cWusPk7 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-8TGRzlFi0cWusPk7 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-8TGRzlFi0cWusPk7 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-8TGRzlFi0cWusPk7 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-8TGRzlFi0cWusPk7 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-8TGRzlFi0cWusPk7 .marker.cross{stroke:#333333;}#mermaid-svg-8TGRzlFi0cWusPk7 svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-8TGRzlFi0cWusPk7 .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-8TGRzlFi0cWusPk7 .cluster-label text{fill:#333;}#mermaid-svg-8TGRzlFi0cWusPk7 .cluster-label span{color:#333;}#mermaid-svg-8TGRzlFi0cWusPk7 .label text,#mermaid-svg-8TGRzlFi0cWusPk7 span{fill:#333;color:#333;}#mermaid-svg-8TGRzlFi0cWusPk7 .node rect,#mermaid-svg-8TGRzlFi0cWusPk7 .node circle,#mermaid-svg-8TGRzlFi0cWusPk7 .node ellipse,#mermaid-svg-8TGRzlFi0cWusPk7 .node polygon,#mermaid-svg-8TGRzlFi0cWusPk7 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-8TGRzlFi0cWusPk7 .node .label{text-align:center;}#mermaid-svg-8TGRzlFi0cWusPk7 .node.clickable{cursor:pointer;}#mermaid-svg-8TGRzlFi0cWusPk7 .arrowheadPath{fill:#333333;}#mermaid-svg-8TGRzlFi0cWusPk7 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-8TGRzlFi0cWusPk7 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-8TGRzlFi0cWusPk7 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-8TGRzlFi0cWusPk7 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-8TGRzlFi0cWusPk7 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-8TGRzlFi0cWusPk7 .cluster text{fill:#333;}#mermaid-svg-8TGRzlFi0cWusPk7 .cluster span{color:#333;}#mermaid-svg-8TGRzlFi0cWusPk7 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-8TGRzlFi0cWusPk7 :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

JSON

Table

MySQL

Python

Hive

也就是说,MySQL当中存储的是JSON格式的数据,原设计是直接向Elasticsearch进行推送的,后来追加了一个存入Hive的通道

那么进一步分析Python脚本的流程,大概是:

#mermaid-svg-jtnSfCW0E7Jwi0Fi {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .error-icon{fill:#552222;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .marker.cross{stroke:#333333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .cluster-label text{fill:#333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .cluster-label span{color:#333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .label text,#mermaid-svg-jtnSfCW0E7Jwi0Fi span{fill:#333;color:#333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .node rect,#mermaid-svg-jtnSfCW0E7Jwi0Fi .node circle,#mermaid-svg-jtnSfCW0E7Jwi0Fi .node ellipse,#mermaid-svg-jtnSfCW0E7Jwi0Fi .node polygon,#mermaid-svg-jtnSfCW0E7Jwi0Fi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .node .label{text-align:center;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .node.clickable{cursor:pointer;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .arrowheadPath{fill:#333333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .cluster text{fill:#333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi .cluster span{color:#333;}#mermaid-svg-jtnSfCW0E7Jwi0Fi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-jtnSfCW0E7Jwi0Fi :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

WHERE state=0 LIMIT …

Table

UPDATE state=1 WHERE … IN

MySQL

Python

Hive

问题就出现在,Python脚本对MySQL数据解析状态的更新上

由于采用的是UPDATE且附带WHERE条件,所以每次更新状态的时候,似乎都会把整个表锁上,详见这个1和这个2

而且由于这个表同时还有推送ES的一个通道,可能还有其他地方在同时访问,所以整张表会锁很久

2. 优化

找到了症结,接下来就是想办法了

既然问题出现在数据回流上,那么能不能想办法去掉这个步骤?

经过对MySQL表结构的分析,我们发现其中的某个字段与时间戳相关

也就是说,这张表的数据,在这个字段上是有序的

那么我们可以将这个字段作为关键字,记录此次数据处理到了哪个位置

优化后的大致结构如下:

#mermaid-svg-fNONDYadqlsJplAm {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-fNONDYadqlsJplAm .error-icon{fill:#552222;}#mermaid-svg-fNONDYadqlsJplAm .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-fNONDYadqlsJplAm .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-fNONDYadqlsJplAm .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-fNONDYadqlsJplAm .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-fNONDYadqlsJplAm .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-fNONDYadqlsJplAm .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-fNONDYadqlsJplAm .marker{fill:#333333;stroke:#333333;}#mermaid-svg-fNONDYadqlsJplAm .marker.cross{stroke:#333333;}#mermaid-svg-fNONDYadqlsJplAm svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-fNONDYadqlsJplAm .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-fNONDYadqlsJplAm .cluster-label text{fill:#333;}#mermaid-svg-fNONDYadqlsJplAm .cluster-label span{color:#333;}#mermaid-svg-fNONDYadqlsJplAm .label text,#mermaid-svg-fNONDYadqlsJplAm span{fill:#333;color:#333;}#mermaid-svg-fNONDYadqlsJplAm .node rect,#mermaid-svg-fNONDYadqlsJplAm .node circle,#mermaid-svg-fNONDYadqlsJplAm .node ellipse,#mermaid-svg-fNONDYadqlsJplAm .node polygon,#mermaid-svg-fNONDYadqlsJplAm .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-fNONDYadqlsJplAm .node .label{text-align:center;}#mermaid-svg-fNONDYadqlsJplAm .node.clickable{cursor:pointer;}#mermaid-svg-fNONDYadqlsJplAm .arrowheadPath{fill:#333333;}#mermaid-svg-fNONDYadqlsJplAm .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-fNONDYadqlsJplAm .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-fNONDYadqlsJplAm .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-fNONDYadqlsJplAm .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-fNONDYadqlsJplAm .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-fNONDYadqlsJplAm .cluster text{fill:#333;}#mermaid-svg-fNONDYadqlsJplAm .cluster span{color:#333;}#mermaid-svg-fNONDYadqlsJplAm div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-fNONDYadqlsJplAm :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

WHERE timestamp < …

JSON

Table

UPDATE timestamp

timestamp

Python

MySQL

Hive

Record

这样一来,数仓部分对这张表就只有读取部分,去掉写入,不再产生相关的锁,大大提升了运行效率

3. 改造

3.1. 重构

但是好景不长,过了一段时间,这部分的表现又不如人意,于是决定重构,大致的结构如:

#mermaid-svg-CZrJJ0bcaY3KUJ0F {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .error-icon{fill:#552222;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .marker{fill:#333333;stroke:#333333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .marker.cross{stroke:#333333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .cluster-label text{fill:#333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .cluster-label span{color:#333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .label text,#mermaid-svg-CZrJJ0bcaY3KUJ0F span{fill:#333;color:#333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .node rect,#mermaid-svg-CZrJJ0bcaY3KUJ0F .node circle,#mermaid-svg-CZrJJ0bcaY3KUJ0F .node ellipse,#mermaid-svg-CZrJJ0bcaY3KUJ0F .node polygon,#mermaid-svg-CZrJJ0bcaY3KUJ0F .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .node .label{text-align:center;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .node.clickable{cursor:pointer;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .arrowheadPath{fill:#333333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .cluster text{fill:#333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F .cluster span{color:#333;}#mermaid-svg-CZrJJ0bcaY3KUJ0F div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-CZrJJ0bcaY3KUJ0F :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

Parse

Bash

Python

File

HDFS

Hive

ES

此次将日志文件直接解析到HDFS,再通过Bash直接建表到Hive,最后推送至ES

数仓结构大概是:

#mermaid-svg-tXs1XzqfaFfSNFLx {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-tXs1XzqfaFfSNFLx .error-icon{fill:#552222;}#mermaid-svg-tXs1XzqfaFfSNFLx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-tXs1XzqfaFfSNFLx .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-tXs1XzqfaFfSNFLx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-tXs1XzqfaFfSNFLx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-tXs1XzqfaFfSNFLx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-tXs1XzqfaFfSNFLx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-tXs1XzqfaFfSNFLx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-tXs1XzqfaFfSNFLx .marker.cross{stroke:#333333;}#mermaid-svg-tXs1XzqfaFfSNFLx svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-tXs1XzqfaFfSNFLx .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-tXs1XzqfaFfSNFLx .cluster-label text{fill:#333;}#mermaid-svg-tXs1XzqfaFfSNFLx .cluster-label span{color:#333;}#mermaid-svg-tXs1XzqfaFfSNFLx .label text,#mermaid-svg-tXs1XzqfaFfSNFLx span{fill:#333;color:#333;}#mermaid-svg-tXs1XzqfaFfSNFLx .node rect,#mermaid-svg-tXs1XzqfaFfSNFLx .node circle,#mermaid-svg-tXs1XzqfaFfSNFLx .node ellipse,#mermaid-svg-tXs1XzqfaFfSNFLx .node polygon,#mermaid-svg-tXs1XzqfaFfSNFLx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-tXs1XzqfaFfSNFLx .node .label{text-align:center;}#mermaid-svg-tXs1XzqfaFfSNFLx .node.clickable{cursor:pointer;}#mermaid-svg-tXs1XzqfaFfSNFLx .arrowheadPath{fill:#333333;}#mermaid-svg-tXs1XzqfaFfSNFLx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-tXs1XzqfaFfSNFLx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-tXs1XzqfaFfSNFLx .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-tXs1XzqfaFfSNFLx .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-tXs1XzqfaFfSNFLx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-tXs1XzqfaFfSNFLx .cluster text{fill:#333;}#mermaid-svg-tXs1XzqfaFfSNFLx .cluster span{color:#333;}#mermaid-svg-tXs1XzqfaFfSNFLx div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-tXs1XzqfaFfSNFLx :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

Bash

SQL

SQL

Python

HDFS

ODS

DWD

APP

ES

APP直接从ODS加工有两个考虑:

  1. 其一是某个特殊字段仅在APP有效,所以DWD没有保存,只能从ODS 取数
  2. 其二是提高并行度,使得DWD和APP可以同时加工

除此之外还有控制结构:

在这里插入图片描述
大概是,有四个控制脚本,有一个控制表

控制表的部分效果如下:

  1. 记录远程文件名称,及其解析到的对应的HDFS文件的名称
  2. 记录该文件的解析状态,例如说已落ODS

几个控制脚本的部分作用如下:

1.sh

  1. 根据控制表当中的记录,选取还未处理的HDFS文件,在Hive当中建立对应的表
  2. 处理完成之后更新这些记录的状态

2.sh

  1. 根据控制表当中的记录,选取已经落到ODS的表,加工数据到DWD
  2. 处理完成之后更新这些记录的状态

3.sh

  1. 根据控制表当中的记录,选取已经落到ODS的表,加工数据到APP
  2. 处理完成之后更新这些记录的状态

3_5.sh

  1. 根据控制表当中的记录,选取已经落到APP的表,推送数据到ES
  2. 处理完成之后更新这些记录的状态
  3. 此环节暂时跳过

4.sh

  1. 根据控制表当中的记录,选取已经落到DWD和APP的表,删除其在ODS的数据
  2. 根据控制表当中的记录,选取已经推送到ES的表,且数据已过保留期限,删除其在APP的数据
  3. 处理完成之后更新这些记录的状态

该数仓使用Azkaban进行调度,设定自动任务为每10分钟自动运行一次。每次任务运行之前都会检查运行历史,如上次任务未结束则跳过此次运行,如连续失败五次则触发企业微信机器人进行预警,其他情况正常运行

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

APP
2. 处理完成之后更新这些记录的状态

3_5.sh

  1. 根据控制表当中的记录,选取已经落到APP的表,推送数据到ES
  2. 处理完成之后更新这些记录的状态
  3. 此环节暂时跳过

4.sh

  1. 根据控制表当中的记录,选取已经落到DWD和APP的表,删除其在ODS的数据
  2. 根据控制表当中的记录,选取已经推送到ES的表,且数据已过保留期限,删除其在APP的数据
  3. 处理完成之后更新这些记录的状态

该数仓使用Azkaban进行调度,设定自动任务为每10分钟自动运行一次。每次任务运行之前都会检查运行历史,如上次任务未结束则跳过此次运行,如连续失败五次则触发企业微信机器人进行预警,其他情况正常运行

[外链图片转存中…(img-GR5oiZLO-1715061493668)]
[外链图片转存中…(img-GdodYo2D-1715061493668)]

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐