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

基于工作者、核和数据流大小确定最佳火花分区数

谷梁凌
2023-03-14

Spark-land中有几个类似但不同的概念,围绕着如何将工作分配到不同的节点并并发执行。具体有:

  • Spark驱动程序节点(sparkdrivercount)
  • Spark群集可用的辅助节点数(numworkernodes)
  • Spark executors的数量(NumExecutors)
  • 所有工作人员/执行人员同时操作的DataFrame(DataFrame)
  • dataframe(numdfrows)
  • 中的行数
  • dataframe上的分区数(numpartitions)
  • ,最后是每个工作节点上可用的CPU核数(NumCPUCORESPERWorker)

我相信所有的Spark集群都只有一个Spark驱动程序,然后是0+个工作节点。如果我错了,请从纠正我开始!假设我对此或多或少是正确的,让我们锁定几个变量。假设我们有一个带有1个驱动程序和4个工作节点的Spark集群,每个工作节点上有4个CPU核(所以总共有16个CPU核)。所以这里的“给定”是:

sparkDriverCount = 1
numWorkerNodes = 4
numCpuCores = numWorkerNodes * numCpuCoresPerWorker = 4 * 4 = 16
    null

共有1个答案

卞嘉许
2023-03-14

是的,一个spark应用程序只有一个驱动程序。

numworkernodesnumexecutors之间是什么关系?

一个worker可以承载多个执行器,您可以将它看作worker是集群的机器/节点,而executor是运行在该worker上的进程(在核心中执行)。

我只是用:

--num-executors 64

当我启动/提交脚本时,我猜spark知道它需要召集多少工人(当然,也要考虑其他参数和机器的性质)。

因此,就我个人而言,我不知道任何这样的比例。

sc = SparkContext(appName = "smeeb-App")
total_cores = int(sc._conf.get('spark.executor.instances')) * int(sc._conf.get('spark.executor.cores'))
dataset = sc.textFile(input_path, total_cores * 3)

如果分区太少,就会有大量的数据块,尤其是在处理bigdata时,这样就会给应用程序带来内存压力。

太多的分区会使hdfs承受很大的压力,因为必须从hdfs生成的所有元数据随着分区数量的增加而显著增加(因为它维护临时文件等)。*

因此,您也需要为分区数量找到一个合适的位置,这是微调应用程序的一部分。:)

 类似资料:
  • [新加入Spark]语言-Scala 根据文档,RangePartitioner对元素进行排序并将其划分为块,然后将块分发到不同的机器。下面的例子说明了它是如何工作的。 假设我们有一个数据框,有两列,一列(比如“a”)的连续值从1到1000。还有另一个数据帧具有相同的模式,但对应的列只有4个值30、250、500、900。(可以是任意值,从1到1000中随机选择) 如果我使用RangePartit

  • 我有一些关于Kafka主题分区->spark流媒体资源利用的用例,我想更清楚地说明这些用例。 我使用spark独立模式,所以我只有“执行者总数”和“执行者内存”的设置。据我所知并根据文档,将并行性引入Spark streaming的方法是使用分区的Kafka主题->RDD将具有与Kafka相同数量的分区,当我使用spark-kafka直接流集成时。 因此,如果我在主题中有一个分区和一个执行器核心,

  • 我有5个表存储为CSV文件(A.CSV、B.CSV、C.CSV、D.CSV、E.CSV)。每个文件按日期分区。如果文件夹结构如下:

  • 创建了具有3个分区的主题 创建StreamingContext时将批处理持续时间设置为10秒 以纱线模式运行,有2个执行程序(3个分区共4个内核) 现在我如何测试它是否起作用。 我有一个制作人,一次发送60000条消息到这个主题。当我检查spark UI时,我得到以下信息:

  • 我通过指定分区的数量从文本文件创建RDD(Spark 1.6)。但它给我的分区数与指定的分区数不同。 案例1 案例2 案例3 案例4 文件/home/pvikash/data/test的内容。txt是: 这是一个测试文件。将用于rdd分区 基于以上案例,我有几个问题。 对于案例2,显式指定的分区数为0,但实际分区数为1(即使默认最小分区为2),为什么实际分区数为1? 对于案例3,为什么在指定数量的

  • 我希望在我工作的公司里从SVN转到Git。我面临的问题是如何让我的头脑围绕一个体面的工作流程。 通常,对于处于启动后状态的PHP项目,客户端会为一些带有ID(smeg23452)的工作创建票证。在SVN中,我们通常会将票证ID放在开发分支的每次提交中,然后挑选这些更改并将它们放入主干。没关系,但是有时合并失败,或者开发人员未能将票证号与工作相对应。 在理想情况下,我希望能够在Git中为票证建立一个