¿Cómo logra Spark la simultaneidad?
La entrada se puede almacenar en HDFS en forma de múltiples archivos, cada uno de los cuales contiene una cantidad de bloques llamados "Bloques". Cuando Spark lee estos archivos como entrada, los analiza de acuerdo con el formato de entrada correspondiente al formato de datos específico, generalmente combinando varios bloques en un solo InputSplit, llamado InputSplit. Tenga en cuenta que los InputSplit no pueden abarcar archivos. InputSplit y las tareas tienen una correspondencia uno a uno. Luego, cada tarea específica se asigna a un ejecutor en un nodo del clúster.
Cada nodo puede tener uno o más ejecutores.
Cada ejecutor está compuesto por varios núcleos, y cada núcleo del ejecutor solo puede ejecutar una tarea a la vez.
El resultado de cada tarea es un componente que genera un RDD objetivo.
Nota: El núcleo aquí es un núcleo virtual, no el núcleo físico de la CPU de la máquina. Puede entenderse como el hilo de trabajo del Ejecutor.
La simultaneidad de tareas en ejecución = el número de ejecutores * el número de núcleos por ejecutor.
En cuanto al número de particiones:
Para la etapa de lectura de datos (por ejemplo, sc.textFile), el archivo de entrada se divide en el mismo número de InputSplits que la tarea inicial.
Durante la fase de Mapa, el número de particiones permanece sin cambios.
Durante la fase de restauración, la agregación de RDD activará la operación aleatoria. La cantidad de particiones en el RDD agregado depende de la operación. Por ejemplo, la operación de repartición se agregará en una cantidad específica de particiones. Algunos operadores son configurables.