什么是DAG,为何Spark依靠DAG实现了大数据霸主地位
创作时间:
作者:
@小白创作中心
什么是DAG,为何Spark依靠DAG实现了大数据霸主地位
引用
CSDN
1.
https://blog.csdn.net/m0_73889530/article/details/145671432
DAG(Directed Acyclic Graph,有向无环图)是Spark等大数据处理框架的核心概念。本文将从数学定义、Spark中的实现、优化原理、容错机制等多个维度,深入解析DAG的重要性和应用价值。
1. 数学定义与特性
图论基础
- 有向性:边(Edge)具有方向(如A→B)
- 无环性:不存在循环路径(如A→B→C→A)
- 拓扑排序:所有顶点排成线性序列,满足前驱关系
关键性质
- 顶点数V,边数E满足:E ≤ V(V-1)/2
- 至少存在一个入度为0的顶点(起点)
- 至少存在一个出度为0的顶点(终点)
2. 在Spark中的实现
DAG生成流程
(Scheduler是调度程序)
Stage划分规则
依赖类型 | 示例操作 | Stage划分影响 |
|---|---|---|
窄依赖 | map, filter | 合并到同一Stage |
宽依赖 | reduceByKey | 触发新Stage划分 |
示例:WordCount的DAG结构
val text = sc.textFile("hdfs://data") // Stage0
val words = text.flatMap(_.split(" ")) // Stage0
val pairs = words.map((_, 1)) // Stage0
val counts = pairs.reduceByKey(_ + _) // Stage1(宽依赖)
counts.saveAsTextFile("hdfs://output") // Stage1
3. 优化原理与优势
对比MapReduce模型
特性 | MapReduce模型 | Spark DAG模型 |
|---|---|---|
任务调度 | 多阶段独立调度 | 全局优化调度 |
中间数据存储 | 必须写磁盘 | 内存优先 |
执行效率 | 高延迟(秒级) | 低延迟(毫秒级) |
复杂算法支持 | 迭代计算效率低 | 适合迭代和交互式查询 |
优化技术
- 流水线执行(Pipelining):
合并连续的窄依赖操作,避免中间结果落盘
- 任务合并:
// 优化前:两个Stage
rdd.map(f1).groupByKey().map(f2)
// 优化后:合并操作
rdd.map(record => f2(f1(record)))
- 数据本地化调度:
- 优先将Task调度到数据所在节点
- 本地化级别:PROCESS_LOCAL → NODE_LOCAL → RACK_LOCAL → ANY
4. 容错机制
血统(Lineage)恢复
val rdd = sc.textFile("hdfs://data")
.map(parse) // Lineage记录1
.filter(_.isValid) // Lineage记录2
.cache()
* 丢失分区时,根据血统重新计算
* 通过`checkpoint()`切断过长血统链
Checkpoint机制
spark.sparkContext.setCheckpointDir("hdfs://checkpoint")
rdd.checkpoint()
* 将RDD持久化到可靠存储
* 常用于迭代算法(如PageRank)
5. 企业级应用
性能调优指标
指标 | 健康范围 | 调优手段 |
|---|---|---|
DAG深度 | <10 | 合并窄依赖操作 |
Shuffle写数据量 | <1TB/Stage | 增加分区数或优化业务逻辑 |
Stage并行度 | ≥集群核心数 | 调整 spark.default.parallelism |
诊断命令
# 查看DAG可视化
http://driver-node:4040/stages/
# 导出DAG事件日志
spark-submit --conf spark.eventLog.enabled=true ...
6. 扩展应用场景
- 机器学习:
val model = MLPipeline.fit(trainingData) // 生成优化后的DAG
- 流处理:
val stream = spark.readStream.format("kafka")...
val query = stream.groupBy(window($"time")).count()
- 图计算:
val graph = GraphLoader.edgeListFile(sc, "hdfs://edges")
val ranks = graph.pageRank(tol=0.01)
理解DAG的重要性体现在:
- 执行优化:通过分析依赖关系实现最优调度
- 故障恢复:精确控制重新计算范围
- 资源利用:最大化并行度同时减少网络传输
- 开发指导:帮助开发者设计高效的数据处理流程
这种基于DAG的执行模型,使得Spark能够在大规模数据处理中实现比传统MapReduce快100倍的性能,成为现代大数据生态系统的核心引擎。
热门推荐
写朋友圈文案的:全面技巧、注意事项、文案句子与高效方法
天津大学&南方科大联手,脑机接口再创奇迹
重庆816地下核工程:全球最大人工洞体转型4A景区
福州周末打卡:鼓山、三坊七巷和平潭岛
唐朝服饰:从简约到华丽的千年演变史
揭秘澳大利亚医生年薪百万的秘密
光雾山&米仓山:南方的冰雪世界,等你来打卡!
从理论到实战:名家教你写好小说开头
冬季感冒泡澡有讲究:轻度可行,重度禁用
河南地理标志产品:116个特产助力乡村振兴,目标产值百亿
2024新年文案精选:从热门到走心,让祝福更有温度
40%幸福感可自主掌控,专家解析快乐公式助你提升
国家广电总局发布:电视内置机顶盒即将改变智能家居格局
彭凯平:情绪价值不是单方面索取,而是共同创造
99城二手房价下跌,专家预警房市“首个贬值潮”
科研人的“恋爱脑”:结婚一周年,送一篇“paper”
水果甜度≠含糖量!这些果子吃起来甜糖分却很低,中医也推荐~
解密《斗破苍穹》:一个逆袭故事的写作艺术
家居风水新潮流:招财摆件怎么放才最旺?
资深领导力专家贾琳洁新作:破解职场管理46大痛点
《终结者》系列:当AI威胁人类生存,我们该如何应对?
英语夸赞,育儿神器!
重庆龚滩古镇:乌江画廊畔的千年古镇,吃住玩全攻略
国营林场2024:造林防火双丰收,特色产业添新绿
新手如何玩转暗区突围?这份装备指南请收好
封神榜中的家庭传奇:李靖家族与哪吒的故事
房价上涨是供需失衡,通胀可控需精准施策——韩秀云解读中国经济热点
历史与传说的辨析:庞德后人与关羽家族的命运
甲钴胺片:坐骨神经痛的新宠?
3个超有用的知识网站:知妖怪,搜好书,全历史