Determinar el número óptimo de particiones Spark en función de los trabajadores, los núcleos y el tamaño del Marco de datos

Hay varios conceptos similares pero diferentes en Spark-land que rodean cómo el trabajo se cultiva en diferentes nodos y se ejecuta simultáneamente. Específicamente, hay:

El nodo Spark Driver sparkDriverCount) El número de nodos de trabajo disponibles para un clúster de Spark numWorkerNodes) El número de ejecutores de Spark numExecutors)El DataFrame está siendo operado por todos los trabajadores / ejecutores, simultáneamente dataFrame) El número de filas en eldataFrame (numDFRows) El número de particiones en eldataFrame (numPartitions) Y finalmente, el número de núcleos de CPU disponibles en cada nodo de trabajo numCpuCoresPerWorker)

I cree que todos los grupos de Spark tienenuno y solo un Spark Driver, y luego 0+ nodos de trabajo. Si me equivoco al respecto, ¡comience por corregirme! Suponiendo que estoy más o menos en lo cierto al respecto, fijemos algunas variables aquí. Supongamos que tenemos un clúster Spark con 1 controlador y 4 nodos de trabajo, y cada nodo de trabajo tiene 4 núcleos de CPU (un total de 16 núcleos de CPU). Entonces el "dado" aquí es:

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

Dado que, como configuración, me pregunto cómo determinar algunas cosas. Específicamente

¿Cuál es la relación entrenumWorkerNodes ynumExecutors? ¿Existe alguna proporción conocida / generalmente aceptada de trabajadores por ejecutores? ¿Hay alguna manera de determinarnumExecutors dadonumWorkerNodes (o cualquier otra entrada)? ¿Existe una relación conocida / generalmente aceptada / óptima denumDFRows anumPartitions? ¿Cómo se calcula el número 'óptimo' de particiones en función del tamaño de ladataFrame? He oído de otros ingenieros que una 'regla general' general es:numPartitions = numWorkerNodes * numCpuCoresPerWorker, ¿hay algo de verdad en eso? En otras palabras, prescribe que uno debe tener 1 partición por núcleo de CPU.

Respuestas a la pregunta(1)

Su respuesta a la pregunta