相关疑难解决方法(0)

根据worker,core和DataFrame大小确定Spark分区的最佳数量

Spark-land中有几个相似但又不同的概念,围绕着如何将工作分配到不同的节点并同时执行.具体来说,有:

  • Spark Driver节点(sparkDriverCount)
  • Spark群集可用的工作节点数(numWorkerNodes)
  • Spark执行器的数量(numExecutors)
  • 由所有工人/执行者同时操作的DataFrame(dataFrame)
  • dataFrame(numDFRows)中的行数
  • dataFrame(numPartitions)上的分区数
  • 最后,每个工作节点上可用的CPU核心数量(numCpuCoresPerWorker)

相信所有Spark集群都有一个且只有一个 Spark Driver,然后是0+个工作节点.如果我错了,请先纠正我!假设我或多或少是正确的,让我们在这里锁定一些变量.假设我们有一个带有1个驱动程序和4个工作节点的Spark集群,每个工作节点上有4个CPU核心(因此总共有16个CPU核心).所以这里的"给定"是:

sparkDriverCount = 1
numWorkerNodes = 4
numCpuCores = numWorkerNodes * numCpuCoresPerWorker = 4 * 4 = 16
Run Code Online (Sandbox Code Playgroud)

鉴于作为设置,我想知道如何确定一些事情.特别:

  • numWorkerNodes和之间有什么关系numExecutors?是否有一些已知/普遍接受的工人与遗嘱执行人的比例?有没有办法确定numExecutors给定numWorkerNodes(或任何其他输入)?
  • 是否已知/普遍接受/最佳比率numDFRowsnumPartitions?如何根据dataFrame?的大小计算"最佳"分区数?
  • 我从其他工程师那里得知,一般的"经验法则"是:numPartitions = numWorkerNodes * numCpuCoresPerWorker那有什么道理吗?换句话说,它规定每个CPU核心应该有一个分区.

partitioning distributed-computing bigdata apache-spark spark-dataframe

20
推荐指数
1
解决办法
1万
查看次数