spark数据本地性

在spark源码(六)–task提交算法的最后,我们提到过决定task运行位置的两个因素:1.task的最佳位置即数据所在位置;2.task的本地化级别。
task的本地化级别有5种:
PROCESS_LOCAL 进程本地化 相当于数据(partition)和task在同一个executor中
NODE_LOCAL 节点本地化 数据和task在一个worker节点上
NO_PREF 没有本地化级别
RACK_LOCAL 机架本地化 数据和task在一个机架下
ANY 任意的本地化级别
由于移动缓存数据的代价比较大,所以task会尽量运行在距离数据更近的地方
在实际的生产环境中,如果RDD数据被cache,在执行任务的时候,大部分的task都会在缓存的这个节点上执行,少部分在其他节点上执行,导致每个executor执行的task个数相差很多,最终执行task多的这部分executor耗费的时间比较长,拖慢整个job的执行时间。这就是数据本地化可能会带来的麻烦之一。

这是我找的一个数据本地性导致性能下降的案例。下图是executor的执行截图
在这里插入图片描述
可以看见的是前三个executor执行的task数是其他executor的12倍以上,说明大部分的task都集中在了部分executor中,出现这种问题的原因很可能就是数据数据本地性导致的。这里要解释一下数据本地性和数据倾斜的区别:
数据倾斜:一部分task很快就执行完毕,同时另部分task执行时间很长,导致整个任务执行时间比较长。出现这种问题是因为大量数据汇集到少部分partition中,这就是数据倾斜。它是task之间执行时间上的差异
数据本地性:大量的task集中到少部分executor上去执行,而其他executor则只执行少量task,部分executor执行任务过多所以耗费时间久最终导致整个job执行慢。它是executor之间执行task数量的区别
在这张图中,我们可以清楚的看到complete tasks上的差异,所以认为这是task数据本地性造成的性能下降。
那怎么解决数据本地性的问题呢?
这里我们还得再明确两个概念,task扩大本地化级别等待的时间和task执行时间。在上个task正在executor中执行的时候,下一个task会等待3s,如果3秒钟之内上个task执行完毕,那么下个task还会接着进入这个executor去执行,如果上个task3s没有执行完毕,那么这个task就会尝试扩大一个本地化级别,试着进入其他executor去执行。所以,如果某个executor内有缓存的数据,而大部分task在这个executor内执行时间又小于3s,那么就会有大量task进入一个executor。
解决这个问题的方法是缩短task扩大本地化级别等待的时间
加入大部分task在executor-01的执行时间时1.5s,我们将task扩大本地化级别等待的时间设置为1s,那么在task执行期间,下一个task就会扩大本地化级别进入其他executor去执行了。
怎么设置我们看一下官网解释

在这里插入图片描述
spark.locality.wait 指的是task扩大本地化级别时等待的时间。如果执行任务花费的时间很长并且本地化位置不佳,就应该增加等待的时间;如果大量task集中到了少部分executor中,那就应该减少等待时间。还可以曾对某个特定本地化级别,比如进程本地化,节点本地化单独设置等待时间

参考 :https://mp.weixin.qq.com/s?__biz=MzA3MDY0NTMxOQ==&mid=2247485791&idx=1&sn=52ab8a2ab64c82f1c70287d0a69bf604&chksm=9f38ea77a84f636155f724ad9a94486ede70ffbc3ff4f3de4a99cb8092a797a9e2fa91df707b&scene=21#wechat_redirect

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
手把手视频详细讲解项目开发全过程,需要的小伙伴自行百度网盘下载,链接见附件,永久有效。 课程简介 知识点介绍、代码演示、逻辑分析、灵活举例、使用图形的方式详细演示代码的流程和细节、整合企业级实战案例,全面讲解并突出重点,让学习也变成一种快乐。 课程亮点 1,知识体系完备,阶段学习者都能学有所获。 2,综合各种方式演示代码、分析逻辑,生动形象,化繁为简,讲解通俗易懂。 3,结合工作实践及分析应用,培养解决实际问题的能力。 4,使用综合案例来加强重点知识,用切实的应用场景提升编程能力,充分巩固各个知识点的应用。 5,整个课程的讲解思路是先提出问题,然后分析问题,并编程解决解题。 适用人群 1、对大数据感兴趣的在校生及应届毕业生。 2、对目前职业有进一步提升要求,希望从事大数据行业高薪工作的在职人员。 3、对大数据行业感兴趣的相关人员。 课程内容 第一章、Spark 基础环境 1.课程安排说明 2.Spark 框架概述 3.快速入门 4.Standalone集群及HA 5.Spark 应用开发入门 6.Spark 应用提交 7.Spark on YARN 8.应用部署模式DeployMode 第二章、SparkCore 模块 1.RDD 概念及特性 2.RDD 创建 3.RDD 函数及使用 4.RDD 持久化 5.案例:SogouQ日志分析 6.RDD Checkpoint 7.外部数据源(HBase和MySQL) 8.广播变量和累加器 9.Spark 内核调度 10.Spark 并行度 第三章、SparkSQL 模块 1.快速入门:词频统计 2.SparkSQL 概述 3.DataFrame 4.RDD与DataFrame转换 5.数据分析SQL和DSL 6.案例:电影评分数据分析 7.DataSet 8.外部数据源Exeternal DataSource 9.集成Hive 10.自定义函数UDF 11.分布式SQL引擎(spakr-sql和Spark ThriftServer) 12.Catalyst 优化器 第四章、离线综合实战 1.综合实战概述(需求、调研、业务) 2.环境搭建(大数据环境和应用开发环境) 3.项目初始化(工具类和属性文件) 4.广告数据ETL 5.Spark 分布式缓存 6.业务报表分析 7.应用执行部署 8.Oozie和Hue集成调度Spark 应用 第五章、SparkStreaming 模块 1.Streaming流式应用概述 2.Streaming 计算模式 3.SparkStreaming计算思路 4.入门案例 5.SparkStreaming工作原理 6.DStream及函数 7.集成Kafka 8.案例:百度搜索风云榜(实时ELT、窗口Window和状态State) 9.SparkStreaming Checkpoint 10.消费Kafka偏移量管理 第六章、StructuredStreaming模块 1.StructuredStreaming 概述(核心设计和编程模型) 2.入门案例:WordCount 3.输入源InputSources 4.Streaming Query 设置 5.输出终端OutputSink 6.集成Kafka(Source和Sink) 7.案例:物联网设备数据分析 8.事件时间窗口分析 9.Streaming Deduplication数据去重 10.Continues Processing连续流处理 第七章、实时综合实战 1.综合实战概述(需求、环境搭建和项目初始化) 2.模拟交易订单数据 3.数据实时ETL存储Kafka 4.实时应用停止 5.实时增量存储(存储HBase和Elasticsearch) 6.实时订单报表(Kafka-StructuredStreaming-Redis) 7.实时应用性能调优(数据本地性、反压机制、动态资源和日志管理)
Spark中,数据倾斜是指某些分区的数据量过大或者数据分布不均匀,导致任务执行效率低下。以下是一些可以用来解决Spark数据倾斜问题的方法: 1. 增加分区数:通过增加RDD的分区数,可以将数据更均匀地分布到更多的节点上,减少单个节点处理的数据量。 2. 随机前缀:对于可能导致数据倾斜的key,可以在处理之前为其添加随机前缀,使得分发到不同分区的概率更加均匀。 3. Salting:对于可能导致数据倾斜的key,可以在处理之前为其添加随机字符串或者数字,将数据均匀分散到不同的分区。 4. 自定义分区器:通过自定义RDD的分区器,可以根据key进行更均匀的分区,避免某些key集中在一个分区中。 5. 聚合合并:对于发生数据倾斜的key,可以在Map阶段使用Combiner函数进行本地聚合,减少传输到Reducer节点的数据量。 6. Sample抽样:通过对输入数据进行抽样,可以更好地了解数据分布情况,有助于调整任务的配置和参数。 7. 均匀分配资源:确保集群中的资源(CPU、内存等)均匀分配给任务,避免某些节点负载过重而导致数据倾斜。 8. 重分区:通过对倾斜的RDD进行重分区操作,将数据均匀地分布到不同的分区中。 9. 前置处理:对于可能导致数据倾斜的操作,可以在之前添加预处理步骤,如聚合或过滤,减少倾斜的可能性。 以上方法可以用来解决Spark中的数据倾斜问题,具体选择哪种方法或者进行组合使用,需要根据具体情况和数据特征进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值