Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >聊聊Spark的分区

聊聊Spark的分区

原创
作者头像
大数据学习与分享
修改于 2020-07-08 02:10:26
修改于 2020-07-08 02:10:26
7720
举报

通过之前的文章【Spark RDD详解】,大家应该了解到Spark会通过DAG将一个Spark job中用到的所有RDD划分为不同的stage,每个stage内部都会有很多子任务处理数据,而每个stage的任务数是决定性能优劣的关键指标。

       首先来了解一下Spark中分区的概念,其实就是将要处理的数据集根据一定的规则划分为不同的子集,每个子集都算做一个单独的分区,由集群中不同的机器或者是同一台机器不同的core进行分区并行处理。        Spark对接不同的数据源,在第一次得到的分区数是不一样的,但都有一个共性:对于map类算子或者通过map算子产生的彼此之间具有窄依赖关系的RDD的分区数,子RDD分区与父RDD分区是一致的。而对于通过shuffle差生的子RDD则由分区器决定,当然默认分区器是HashPartitioner,我们完全可以根据实际业务场景进行自定义分区器,只需继承Parttioner组件,主要重写几个方法即可

以加载hdfs文件为例,Spark在读取hdfs文件还没有调用其他算子进行业务处理前,得到的RDD分区数由什么决定呢?关键在于文件是否可切分!

对于可切分文件,如text文件,那么通过加载文件得到的RDD的分区数默认与该文件的block数量保持一致;

对于不可切分文件,它只有一个block块,那么得到的RDD的分区数默认也就是1。

当然,我们可以通过调用一些算子对RDD进行重分区,如repartition。 这里必须要强调一点,很多小伙伴不理解,RDD既然不存储数据,那么加载过来的文件都跑哪里去了呢?这里先给大家提个引子——blockmanager,Spark自己实现的存储管理器。RDD的存储概念其实block,至于block的大小可以根据不同的数据源进行调整,blockmanager的数据存储、传输都是以block进行的。至于block内部传输的时候,它的大小也是可以通过参数控制的,比如广播变量、shuffle传输时block的大小等

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
重要 | Spark分区并行度决定机制
最近经常有小伙伴留言,核心问题都比较类似,就是虽然接触Spark有一段时间了,但是搞不明白一个问题,为什么我从HDFS上加载不同的文件时,打印的分区数不一样,并且好像spark.default.parallelism这个参数时不是一直起作用?其实笔者之前的文章已有相关介绍,想知道为什么,就必须了解Spark在加载不同的数据源时分区决定机制以及调用不用算子时并行度决定机制以及分区划分。
大数据学习与分享
2020/08/10
1.5K0
重要 | Spark分区并行度决定机制
Spark【面试】
首先map task会从本地文件系统读取数据,转换成key-value形式的键值对集合
Java帮帮
2018/09/29
1.3K0
Spark【面试】
Spark面试八股文(上万字面试必备宝典)
rdd 分布式弹性数据集,简单的理解成一种数据结构,是 spark 框架上的通用货币。所有算子都是基于 rdd 来执行的,不同的场景会有不同的 rdd 实现类,但是都可以进行互相转换。rdd 执行过程中会形成 dag 图,然后形成 lineage 保证容错性等。从物理的角度来看 rdd 存储的是 block 和 node 之间的映射。
五分钟学大数据
2021/11/08
3.2K0
spark分区与任务切分
我们都知道在spark中,RDD是其基本的抽象数据集,其中每个RDD由多个Partition组成。在job的运行期间,参与运算的Parttion数据分布在多台机器中,进行并行计算,所以分区是计算大数据量的措施。
Tim在路上
2020/08/04
2K0
Spark性能调优01-资源调优
在开发完Spark作业之后,就该为作业配置合适的资源了。 Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。
CoderJed
2018/09/13
1.3K0
Spark性能调优01-资源调优
五万字 | Spark吐血整理,学习与面试收藏这篇就够了!
一、Spark 基础 二、Spark Core 三、Spark SQL 四、Spark Streaming 五、Structured Streaming 六、Spark 两种核心 Shuffle 七、Spark 底层执行原理 八、Spark 数据倾斜 九、Spark 性能调优 十、Spark 故障排除 十一、Spark大厂面试真题
五分钟学大数据
2021/09/22
4.6K0
【Spark】Spark之what
Spark:通用大数据快速处理引擎。可以基于Hadoop上存储的大数据(HDFS、Hive、HBase等任何实现了Hadoop接口的存储系统)进行计算。
章鱼carl
2022/03/31
9340
【Spark】Spark之what
Spark-Core
初始化工作是在Driver端进行的,而实际运行程序是在Executor端进行的,这就涉及到了跨进程通信,是需要序列化的。
ha_lydms
2023/10/26
2390
Spark-Core
Spark基础
1.Spark 使用DAG 调度器、查询优化器和物理执行引擎,能够在批处理和流数据获得很高的性能。2.spark把运算的中间数据(shuffle阶段产生的数据)存放在内存,迭代计算效率更高,mapreduce的中间结果需要落地,保存到磁盘;3.Spark计算框架对内存的利用和运行的并行度比mapreduce高,Spark运行容器为executor,内部ThreadPool中线程运行一个Task,mapreduce在线程内部运行container,container容器分类为MapTask和ReduceTask。Spark程序运行并行度高;
857技术社区
2022/05/17
4540
Spark基础
Hive/Spark小文件解决方案(企业级实战)
原文链接:https://mp.weixin.qq.com/s/m4NPnZaKJMXKrTwtZoOQeQ
用户1148526
2021/01/20
5.6K0
Hive/Spark小文件解决方案(企业级实战)
关于Spark的面试题,你应该知道这些!
之前分享过一篇博客,?不会这20个Spark热门技术点,你敢出去面试大数据吗?,那一篇确实是非常精华,提炼出了非常重要同样非常高频的Spark技术点,也算是收到了一些朋友们的好评。本篇博客,博主打算再
大数据梦想家
2021/01/27
1.8K0
关于Spark的面试题,你应该知道这些!
Spark
  Spark是Scala语言实现的核心数据结构是RDD的基于内存迭代计算的分布式框架。
挽风
2023/10/17
3960
Spark
Spark性能调优-RDD算子调优篇(深度好文,面试常问,建议收藏)
在对RDD进行算子时,要避免相同的算子和计算逻辑之下对RDD进行重复的计算,如下图所示:
五分钟学大数据
2021/04/01
8060
spark RDD
RDD,全称为Resilient Distributed Datasets(弹性分布式数据集),是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。同时,RDD还提供了一组丰富的操作来操作这些数据。在这些操作中,诸如map、flatMap、filter等转换操作实现了函数式编程模式,很好地契合了Scala的集合操作。除此之外,RDD还提供了诸如join、groupBy、reduceByKey等更为方便的操作(注意,reduceByKey是action,而非transformation),以支持常见的数据运算。
小石头
2022/11/10
5100
spark RDD
Spark优化(二)----资源调优、并行度调优
在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为参数设置。很多Spark初学者,通常不知道该设置哪些必要的参数,以及如何设置这些参数,最后就只能胡乱设置,甚至压根儿不设置。资源参数设置的不合理,可能会导致没有充分利用集群资源,作业运行会极其缓慢;或者设置的资源过大,队列没有足够的资源来提供,进而导致各种异常。总之,无论是哪种情况,都会导致Spark作业的运行效率低下,甚至根本无法运行。因此我们必须对Spark作业的资源使用原理有一个清晰的认识,并知道在Spark作业运行过程中,有哪些资源参数是可以设置的,以及如何设置合适的参数值。
小晨说数据
2021/12/23
2.1K0
Spark 基本概念及 jobs stages tasks 等 解释
还有一个是范围的依赖,即RangeDependency,它仅仅被org.apache.spark.rdd.UnionRDD使用。UnionRDD是把多个RDD合成一个RDD,这些RDD是被拼接而成,即每个parent RDD的Partition的相对顺序不会变,只不过每个parent RDD在UnionRDD中的Partition的起始位置不同
大鹅
2019/09/23
1.3K0
Spark 基本概念及 jobs stages tasks 等 解释
【万字长文】Spark最全知识点整理(内含脑图)
Spark有以下四种部署方式,分别是:Local,Standalone,Yarn,Mesos
857技术社区
2022/05/17
3K2
【万字长文】Spark最全知识点整理(内含脑图)
Spark Day06:Spark Core之Spark 内核调度和SparkSQL快速入门
ShuffleMapTask要进行Shuffle,ResultTask负责返回计算结果,一个Job中只有最后的Stage采用ResultTask,其他的均为ShuffleMapTask。
Maynor
2022/02/17
8790
Spark Day06:Spark Core之Spark 内核调度和SparkSQL快速入门
Spark RDD 分布式弹性数据集
rdd是一个粗粒度的数据生成方式和流转迭代计算方式的描述。它可以通过稳定的存储器或者从其他RDD生成,它并不需要急着进行转换,只需要在特定的rdd进行一次性的数据的迭代流转。rdd记录着自己的依赖关系,以防在数据丢失时可以通过“血缘”关系再次生成数据。用户也可以自己选择在经常重用的rdd进行数据落地,放置丢失后重做。
Tim在路上
2022/03/23
4050
Spark RDD 分布式弹性数据集
Spark性能调优指北:性能优化和故障处理
Spark 官方推荐,Task 数量应该设置为 Spark 作业总 CPU core 数量的 2~3 倍。
大数据技术架构
2021/08/25
1.1K0
Spark性能调优指北:性能优化和故障处理
相关推荐
重要 | Spark分区并行度决定机制
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档