2024年近线数仓优化改造(2),大数据开发入门教程

img
img
img

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

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

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

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. 其二是提高并行度,使得DWDAPP可以同时加工

除此之外还有控制结构:

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

控制表的部分效果如下:

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

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

由于各部分互不依赖,则可以设置成平行结构:

#mermaid-svg-UV5KNLDvEiODjTFx {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-UV5KNLDvEiODjTFx .error-icon{fill:#552222;}#mermaid-svg-UV5KNLDvEiODjTFx .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-UV5KNLDvEiODjTFx .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-UV5KNLDvEiODjTFx .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-UV5KNLDvEiODjTFx .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-UV5KNLDvEiODjTFx .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-UV5KNLDvEiODjTFx .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-UV5KNLDvEiODjTFx .marker{fill:#333333;stroke:#333333;}#mermaid-svg-UV5KNLDvEiODjTFx .marker.cross{stroke:#333333;}#mermaid-svg-UV5KNLDvEiODjTFx svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-UV5KNLDvEiODjTFx .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-UV5KNLDvEiODjTFx .cluster-label text{fill:#333;}#mermaid-svg-UV5KNLDvEiODjTFx .cluster-label span{color:#333;}#mermaid-svg-UV5KNLDvEiODjTFx .label text,#mermaid-svg-UV5KNLDvEiODjTFx span{fill:#333;color:#333;}#mermaid-svg-UV5KNLDvEiODjTFx .node rect,#mermaid-svg-UV5KNLDvEiODjTFx .node circle,#mermaid-svg-UV5KNLDvEiODjTFx .node ellipse,#mermaid-svg-UV5KNLDvEiODjTFx .node polygon,#mermaid-svg-UV5KNLDvEiODjTFx .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-UV5KNLDvEiODjTFx .node .label{text-align:center;}#mermaid-svg-UV5KNLDvEiODjTFx .node.clickable{cursor:pointer;}#mermaid-svg-UV5KNLDvEiODjTFx .arrowheadPath{fill:#333333;}#mermaid-svg-UV5KNLDvEiODjTFx .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-UV5KNLDvEiODjTFx .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-UV5KNLDvEiODjTFx .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-UV5KNLDvEiODjTFx .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-UV5KNLDvEiODjTFx .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-UV5KNLDvEiODjTFx .cluster text{fill:#333;}#mermaid-svg-UV5KNLDvEiODjTFx .cluster span{color:#333;}#mermaid-svg-UV5KNLDvEiODjTFx 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-UV5KNLDvEiODjTFx :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

Start

bash_1

bash_2

bash_3

bash_4

End

3.2. 优化

首先是关于bash_1的,我们发现解析到HDFS的文件体量过小,影响运行效率,故决定先进行一个HDFS文件的合并,使用hdfs dfs -cat,传入多个文件的路径,将其输出到Hive表的文件夹下,合并成为一个文件

然后是结构问题,原平行结构对环境的影响压力过大,在合并小文件后运行效率有所提升,在不触及数据更新容忍度的情况下,将Azkaban改为顺序结构,人为的加上依赖

#mermaid-svg-0VASdFlwmRV1Ac07 {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-0VASdFlwmRV1Ac07 .error-icon{fill:#552222;}#mermaid-svg-0VASdFlwmRV1Ac07 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-0VASdFlwmRV1Ac07 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-0VASdFlwmRV1Ac07 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-0VASdFlwmRV1Ac07 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-0VASdFlwmRV1Ac07 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-0VASdFlwmRV1Ac07 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-0VASdFlwmRV1Ac07 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-0VASdFlwmRV1Ac07 .marker.cross{stroke:#333333;}#mermaid-svg-0VASdFlwmRV1Ac07 svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-0VASdFlwmRV1Ac07 .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-0VASdFlwmRV1Ac07 .cluster-label text{fill:#333;}#mermaid-svg-0VASdFlwmRV1Ac07 .cluster-label span{color:#333;}#mermaid-svg-0VASdFlwmRV1Ac07 .label text,#mermaid-svg-0VASdFlwmRV1Ac07 span{fill:#333;color:#333;}#mermaid-svg-0VASdFlwmRV1Ac07 .node rect,#mermaid-svg-0VASdFlwmRV1Ac07 .node circle,#mermaid-svg-0VASdFlwmRV1Ac07 .node ellipse,#mermaid-svg-0VASdFlwmRV1Ac07 .node polygon,#mermaid-svg-0VASdFlwmRV1Ac07 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-0VASdFlwmRV1Ac07 .node .label{text-align:center;}#mermaid-svg-0VASdFlwmRV1Ac07 .node.clickable{cursor:pointer;}#mermaid-svg-0VASdFlwmRV1Ac07 .arrowheadPath{fill:#333333;}#mermaid-svg-0VASdFlwmRV1Ac07 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-0VASdFlwmRV1Ac07 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-0VASdFlwmRV1Ac07 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-0VASdFlwmRV1Ac07 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-0VASdFlwmRV1Ac07 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-0VASdFlwmRV1Ac07 .cluster text{fill:#333;}#mermaid-svg-0VASdFlwmRV1Ac07 .cluster span{color:#333;}#mermaid-svg-0VASdFlwmRV1Ac07 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-0VASdFlwmRV1Ac07 :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

Start

bash_1

bash_2

img
img

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

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

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

px;pointer-events:none;z-index:100;}#mermaid-svg-0VASdFlwmRV1Ac07 :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;}

Start

bash_1

bash_2

[外链图片转存中…(img-kWnclDzn-1714923551880)]
[外链图片转存中…(img-h8wjtIcf-1714923551880)]

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

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

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

  • 47
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值