当前位置: 首页 > 知识库问答 >
问题:

spark何时以及如何在执行器上分配分区

和和煦
2023-03-14

spark如何给一个执行器分配一个分区?

当我使用 1 个驱动程序和 5 个执行器在火花外壳中运行以下行时:

> var data = sc.textFile("file") // auto generates 2 partitions
> data.count()                   // materialize partitions on two nodes
> data = data.repartition(10)    // repartition data.count()            
> data.count()                   // 10 partitions still on original 2 nodes

重新分区后,10个分区仍然位于原来的两个节点上(总共5个)。这似乎非常低效,因为5个任务在包含分区的每个节点上重复运行,而不是平均分布在节点上。在同一个rdds上重复多次的迭代任务中,效率低下最为明显。

所以我的问题是,Spark如何决定哪个节点具有哪个分区,有没有办法强制将数据移动到其他节点?

共有1个答案

桂浩言
2023-03-14

我只是在这里提供一个猜测来展示逻辑(不一定是真正发生的事情)。

让我们假设你的文件不是很大,也就是说,它可以放在HDFS的一个街区内。假设数据块被复制到2个节点。如果您想在第三个节点上进行处理,这意味着您需要复制它。由于count是一个相对快速的计算,因此处理任务所需的时间可能相对较少。Spark可能认为等待并在本地进行处理比将数据转移到其他节点更好(您可以配置这个参数)。

 类似资料:
  • 我需要一些帮助来了解spark如何决定分区的数量,以及它们在executors中是如何处理的,我很抱歉这个问题,因为我知道这是一个重复的问题,但即使在阅读了许多文章后,我仍然不能理解我正在放上一个我目前正在工作的真实生活用例,以及我的Spark提交配置和集群配置。 我的硬件配置: < code>3节点计算机,总Vcores=30,总内存=320 GB。 我正在使用spark dataframe J

  • 一个executor在Spark中可以容纳多少个分区? 如何在执行程序之间分配分区(机制)? 如何设置分区的大小。想知道相关的config参数。 executor是否将所有分区存储在内存中?如果不是,当溢出到磁盘时,它是溢出整个分区到磁盘还是部分分区到磁盘?5当每个执行器有2个内核,但执行器中有5个分区时

  • 我用的是Spring靴2。x和普罗米修斯。 我想公开一个endpoint:普罗米修斯可以刮取的端口,它与执行器路径上的其他endpoint分离。 这是为了允许围绕执行器的不同安全模型与指标,是否有人知道这是否可行以及如何实现?

  • 假设我正在从S3文件夹中读取100个文件。每个文件的大小为10 MB。当我执行<code>df=spark.read时。parquet(s3路径),文件(或更确切地说分区)如何在任务之间分布?E、 g.在这种情况下,<code>df</code>将有100个分区,如果spark有10个任务正在运行以将该文件夹的内容读取到数据帧中,那么这些分区是如何分配给这10个任务的?它是以循环方式进行的,还是每

  • 我们使用的是partitioner,它用@Scope(value=“step”)注释,还有setter方法,用@beforstep注释,但framewowrk仍然没有注入step执行对象? 我们做错了什么