parallel processing - ¿Cuál es la "tarea" en el paralelismo de Storm?
parallel-processing apache-storm (1)
Descargo de responsabilidad: escribí el artículo al que hizo referencia en su pregunta anterior.
Sin embargo, estoy un poco confundido por el concepto de "tarea". ¿Es una tarea una instancia en ejecución del componente (spout o bolt)? Un ejecutor que tiene varias tareas en realidad dice que el ejecutor ejecuta el mismo componente varias veces, ¿estoy en lo correcto?
Si y si.
Además, en un sentido de paralelismo general, Storm generará un hilo dedicado (ejecutor) para un pico o perno, pero ¿qué contribuye al paralelismo por un ejecutor (hilo) que tiene múltiples tareas?
Ejecutar más de una tarea por ejecutor no aumenta el nivel de paralelismo: un ejecutor siempre tiene un hilo que usa para todas sus tareas, lo que significa que las tareas se ejecutan en serie en un ejecutor.
Como escribí en el artículo, tenga en cuenta que:
- El número de subprocesos del ejecutor se puede cambiar después de que se haya iniciado la topología (consulte el comando de
storm rebalance
). - El número de tareas de una topología es estático.
Y por definición existe la invariante de #executors <= #tasks
.
Por lo tanto, una razón para tener más de 2 tareas por hilo ejecutor es para darle la flexibilidad de ampliar / escalar la topología a través del comando de storm rebalance
en el futuro sin tener que desconectar la topología. Por ejemplo, imagina que comienzas con un clúster Storm de 15 máquinas, pero ya sabes que la próxima semana se agregarán otras 10 cajas. Aquí podría optar por ejecutar la topología en el nivel de paralelismo anticipado de 25 máquinas que ya están en los 15 cuadros iniciales (que es, por supuesto, más lento que 25 cuadros). Una vez que las 10 casillas adicionales estén integradas, puede volver a storm rebalance
la topología para aprovechar al máximo las 25 casillas sin tiempo de inactividad.
Otra razón para ejecutar más de 2 tareas por ejecutor es para realizar pruebas (principalmente funcionales). Por ejemplo, si su máquina de desarrollo o servidor de CI es lo suficientemente potente como para ejecutar, por ejemplo, 2 ejecutores junto con todas las otras cosas que se ejecutan en la máquina, puede ejecutar 30 tareas (aquí: 15 por ejecutor) para ver si el código como su agrupación Storm personalizada está funcionando como se esperaba.
En la práctica, normalmente ejecutamos 1 tarea por ejecutor.
PD: tenga en cuenta que Storm en realidad generará algunos hilos más detrás de las escenas . Por ejemplo, cada ejecutor tiene su propio "hilo de envío" que es responsable de manejar las tuplas salientes. También hay subprocesos de fondo "a nivel de sistema" para, por ejemplo, tuplas secundarias que se ejecutan junto a "tus" hilos. IIRC Storm UI cuenta esos hilos secundarios además de "tus" hilos.
Estoy tratando de aprender twitter storm siguiendo el gran artículo " Comprender el paralelismo de una topología de tormenta "
Sin embargo, estoy un poco confundido por el concepto de "tarea". ¿Es una tarea una instancia en ejecución del componente (spout o bolt)? Un ejecutor que tiene varias tareas en realidad dice que el ejecutor ejecuta el mismo componente varias veces, ¿estoy en lo correcto?
Además, en un sentido de paralelismo general, Storm generará un hilo dedicado (ejecutor) para un pico o perno, pero ¿qué contribuye al paralelismo por un ejecutor (hilo) que tiene múltiples tareas ? Creo que tener varias tareas en un hilo, dado que un hilo se ejecuta secuencialmente, solo hace que el hilo sea una especie de recurso "en caché", lo que evita generar un hilo nuevo para la próxima ejecución de la tarea. ¿Estoy en lo correcto?
Puedo aclarar esas confusiones yo solo después de tomar más tiempo para investigar, pero ya sabes, a los dos nos encanta stackoverflow ;-)
Gracias por adelantado.