大数据 - Spark系列《一》- 分区 partition数目设置详解

目录

🐶3.2.1 分区过程

🐶3.2.2 SplitSize计算和分区个数计算

🐶3.2.3 Partition的数目设置

1. 🥙对于数据读入阶段,输入文件被划分为多少个InputSplit就会需要多少初始task.

2. 🥙对于转换算子产生的RDD的分区数

 3. 🥙repartition和coalesce操作会聚合成指定分区数。

🐶3.2.4 groupBy不一定会Shuffle


🐶3.2.1 分区过程

每一个过程的任务数,对应一个InputSplit,Paritition 输入可能以多个文件的形式存储在HDFS上面,,每个File都包含了很多块(128切分),称为block

当Spark读取这些文件作为输入时,会根据具体数据格式对应的InputFormat进行解析,按照SplitSize切成一个个输入分片。随后将为这些输入分片生成具体的task. InputSplit与Task是一一对应的关系

注意:InputSplit不能跨越文件。

随后这些具体的Task每个都会被分配到集群上的某个节点的某个Executor去执行。

  • 每个节点可以起一个或多个Executor.

  • 每个Executor由若干core组成,每个Executor的每个core一次只能执行一个task.

  • 每个task执行的结果就就是生成了目标rdd的一个partition.

注意:这里的core是虚拟的core而不是机器的物理CPU核,可以理解为Executor的一个工作线程。Task被执行的并发度=Executor数目*每个Executor核数(=core总个数)

🐶3.2.2 SplitSize计算和分区个数计算

🐶3.2.3 Partition的数目设置

1. 🥙对于数据读入阶段,输入文件被划分为多少个InputSplit就会需要多少初始task.

1)集合

  • 默认所有资源(LocalSchedulerBackend: scheduler.conf.getInt("spark.default.parallelism", totalCores))

  • 通过参数指定

2)文件

根据计算来的任务切片大小和输入路径下的文件大小 ,至少2并行度

3)数据库

指定的

2. 🥙对于转换算子产生的RDD的分区数
  • 原则上分区个数是不变的

  • 有些算子可以调用的时候指定分区个数 distinct join groupBy groupByKey

  • 特殊的算子 有特殊规定 union(和) join

    • spark.default.parallelism

    • 分区数多的哪个rdd的分区数

val rdd3 = rdd1.intersection(rdd2)  // 取大的
val rdd4 = rdd1.subtract(rdd2) // 前面的RDD分区数
println(rdd1.cartesian(rdd2).getNumPartitions) // 两个分区个数乘积

 注意: 可能产生Shuffle的算子可以指定分区个数的

//可能产生shuffle的操作
distinct(p)     减少
groupBy(_._1 , p)    Shuffle 
groupByKey( p)       Shuffle 
groupByKey(_+_, p)   Shuffle 
join( , p)
 3. 🥙repartition和coalesce操作会聚合成指定分区数。
println(rdd1.repartition(3).getNumPartitions) // 增加 
println(rdd1.repartition(1).getNumPartitions)  //减少
println(rdd1.coalesce(1, true).getNumPartitions)  //减少
println(rdd1.coalesce(3, true).getNumPartitions)  //增加
// 不允许Shuffle就不能增加分区
println(rdd1.coalesce(3, false).getNumPartitions)  //增加失败
println(rdd1.coalesce(1, false).getNumPartitions)  //减少  不会Shuffle

🐶3.2.4 groupBy不一定会Shuffle

Shuffle:上游一个分区的数据可能被下游所有分区引用

package com.doit.com.doit.day0128import org.apache.spark.SparkContext.jarOfObject
import org.apache.spark.rdd.RDD
import org.apache.spark.{HashPartitioner, SparkConf, SparkContext}/*** @日期: 2024/1/29* @Author: Wang NaPao* @Blog: https://blog.csdn.net/weixin_40968325?spm=1018.2226.3001.5343* @Tips: 我是技术大牛* @Description:*/object Test03 {def main(args: Array[String]): Unit = {val conf = new SparkConf().setAppName("doe").setMaster("local[*]")val sc = new SparkContext(conf)val rdd1 = sc.makeRDD(List("a b c d e f g"), 2)val rdd2: RDD[String] = rdd1.flatMap(_.split("\\s+"))val wordOne = rdd2.map(line=>{println("aaaaaa")(line,1)})   //2//对数据使用HashPartitioner在分区 2val rdd3 = wordOne.partitionBy(new HashPartitioner(3))rdd3.mapPartitionsWithIndex((p,iter)=>{iter.map(e=>(p,e))}).foreach(println)//底层默认是HashPartition分区 2val rdd4: RDD[(String, Iterable[(String, Int)])] = rdd3.groupBy(_._1, 3)val rdd5: RDD[(Int, (String, Iterable[(String, Int)]))] = rdd4.mapPartitionsWithIndex((p, iter) => {iter.map(e => (p, e))})rdd5.foreach(println)sc.stop()}
}

 结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/438436.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

千帆杯AI原生应用开发挑战赛,每期10万,等你而战!

大赛介绍 随着大模型技术的飞速发展,2024年将会成为AI原生应用爆发的元年,引领千行百业的创新变革。在这一时代背景下,百度智能云重磅推出千帆杯AI原生应用开发挑战赛,旨在激发广大开发者的创意潜能,推动AI原生应用在…

vit细粒度图像分类(五)TransFC学习笔记

1.摘要 细粒度图像具有不同子类间差异小、相同子类内差异大的特点。现有网络模型在处理过程中存在特征提取能力不足、特征表示冗余和归纳偏置能力弱等问题,因此提出一种改进的 Transformer图像分类模型。 首先,利用外部注意力取代原 Transformer模型中的…

数据分析入门指南:用 Python 开启数据之旅

文章目录 前言发现宝藏为什么选择 Python 进行数据分析?准备工作数据分析基础1. 数据加载2. 数据探索3. 数据清洗4. 数据可视化 探索更多可能性好书推荐总结 前言 为了巩固所学的知识,作者尝试着开始发布一些学习笔记类的博客,方便日后回顾。…

C语言王道第八周一题

Description 初始化顺序表(顺序表中元素为整型),里边的元素是 1,2,3,然后通过 scanf 读取一个元素(假如插入的是 6),插入到第 2 个位置,打印输出顺序表,每个 元素占 3 个…

vuepress搭建个人博客以及部署

vuepress,Vue 驱动的静态网站生成器,以 Markdown 为中心的项目结构,以最少的配置帮助你专注于写作。 vuepress官网 vuepress存在很多主题,也可以自定义设计主题,上传npm使用 这里采用vuepress-theme-hope主题模板进行制…

AIGC专题:2024年金融业生成式AI应用报告

今天分享的是AIGC系列深度研究报告:《AIGC专题:2024年金融业生成式AI应用报告》。 (报告出品方:度小满) 前言 毫无疑问,生成式人工智能是2023年全球最具影响力的创新科技,它代表着一种范式转…

赛氪荣获“2023天津高新技术企业大会支持单位”

1月23日上午,2023天津市高新技术企业大会新闻发布会在天开高教科技园核心区综合服务中心召开,市高企协以及来自高校、企业、社会组织等80余人现场参会。 大会组委会秘书长张博航介绍到:“本次大会将实现自开办以来的多个首次,首次…

GoogLeNet模型详解

模型介绍 GoogLeNet是谷歌工程师设计的深度神经网络结构,于2014年在ImageNet比赛中取得了冠军。它的设计特点在于既有深度,又在横向上拥有“宽度”,并采用了一种名为Inception的核心子网络结构。这个网络名字中的“GoogLeNet”是对LeNet的致…

sql优化的方法

目录 一、准备数据 1.1、创建表结构 1.2、创建存储过程 二、索引介绍 2.1、类型介绍 2.2、建立索引 2.3、建立复合索引 2.4、查看所有建立的索引 2.5、删除索引 三、EXPLAIN分析参数说明 四、SQL优化案例 4.1、避免使用SELECT * 4.2、慎用UNION关键字 4.4、避免使…

响应式架构设计:性能更高更快的架构模式(框架部分后续再完善)

文章目录 一、初识响应式1、什么是Reactive(响应式)2、响应式编程(Reactive Programming)的含义3、响应式编程的特点4、响应式编程的主要模式5、响应式编程的核心元素(1)流(2)传播变…

Nginx 主动检查 被动检查

被动检查 proxy_next_upstream http {upstrean httpget {//max_fail5,失败5词,直接下线 down,//fail_timeout10s, 10s之后 重新上线 up//fail_timeout10s, max_fail5,5次失败在10s内,下线,server IP:80 max_fails5 fail_time…

除毛可以用宠物空气净化器吗?猫用空气净化器质量高的品牌推荐

如今,越来越多的家庭选择养宠物,因为它们给家里带来了温馨和快乐。然而,宠物也可能带来异味和空气中的浮毛,这可能会给我们的健康带来问题,成为一个困扰。 为了解决家里的异味问题,尤其是宠物的排泄物味道…