Hable acerca de la tormenta

Los blogs orientados a la entrevista se presentan en estilo Q / A.


Pregunta 1: ¿Presentar brevemente Storm?

Respuesta 1:

Storm es un sistema informático distribuido en tiempo real gratuito y de código abierto. El uso de Storm puede manejar fácilmente flujos de datos ilimitados de manera confiable. Al igual que Hadoop procesa grandes datos en lotes, Storm puede procesar datos en tiempo real.

Arquitectura de clúster de tormenta, como se muestra a continuación:

Inserte la descripción de la imagen aquí
Para la explicación de la figura anterior:

1. Nimbus (como maestro, función: distribuir código al Supervisor)
El nodo maestro del clúster Storm es responsable de distribuir el código de usuario y asignarlo al nodo Trabajador en el nodo Supervisor específico para ejecutar la Tarea del componente (Spout / Bolt) correspondiente a la Topología .

2. Supervisor (como esclavo, función: administrar el inicio y la finalización del proceso de trabajo)
El nodo esclavo del clúster Storm es responsable de administrar el inicio y la finalización de cada proceso de trabajo que se ejecuta en el nodo Supervisor. A través del elemento de configuración supervisor.slots.ports en el archivo de configuración de Storm, puede especificar la cantidad máxima de ranuras permitidas en un Supervisor. Cada ranura se identifica de manera única por un número de puerto, y un número de puerto corresponde a un proceso Trabajador (si el proceso Trabajador es Inicio)

3. El trabajador (un proceso
que procesa específicamente la lógica de componentes ) ejecuta un proceso que procesa específicamente la lógica de componentes. Solo hay dos tipos de tareas que ejecuta Worker, una es la tarea Spout y la otra es la tarea Bolt.

4.
Cada subproceso / perno en el trabajador de tareas se denomina tarea. Después de la tormenta 0.8, la tarea ya no corresponde a un subproceso físico. Las tareas con diferentes caños / pernos pueden compartir un subproceso físico, que se denomina ejecutor.

5. ZooKeeper se
usa para coordinar Nimbus y el Supervisor. Si el Supervisor no puede ejecutar la Topología debido a un problema, Nimbus detectará y redistribuirá la Topología de inmediato para que se ejecute en otros Supervisores disponibles.


Pregunta 2: ¿Hablar sobre el modelo de programación Storm (spout-> tuple-> bolt)?

Answer2 :

Strom se puede dividir en dos componentes: boquilla y perno durante la operación. Entre ellos, la fuente de datos comienza desde la boquilla y los datos se envían al perno en modo tupla. Se pueden conectar varios pernos en serie, y un perno también se puede conectar a múltiples puntos / pernos. .

Todo el principio de tiempo de ejecución es el siguiente:

Inserte la descripción de la imagen aquí
Explicación de los conceptos principales en la imagen de arriba:

1.
El nombre de una aplicación en tiempo real que se ejecuta en Topology Storm. Gráfico de topología que integra Spout y Bolt. Define la relación de combinación, número concurrente, configuración, etc. de Spout and Bolt.

2. Spout
obtiene los componentes del flujo de datos de origen en una topología. Normalmente, el spout leerá datos de una fuente de datos externa y luego los convertirá a los datos de origen dentro de la topología.

3. Bolt
acepta los datos y luego ejecuta el componente de procesamiento, donde los usuarios pueden realizar las operaciones que desean.

4.
La unidad básica de transmisión de mensajes únicos de Tuple , entendida como un grupo de mensajes, es una Tuple.

5.
Colección de Stream Tuple. Representa el flujo de datos.


Pregunta 3: ¿Hablar sobre el funcionamiento de la topología?

Answer3 :

En Storm, la tarea informática de una aplicación en tiempo real se empaqueta y se lanza como Topología, que es similar a la tarea Hadoop MapReduce. Pero hay una diferencia: en Hadoop, la tarea MapReduce finalmente finalizará después de que se complete la ejecución; en Storm, una vez que se envía la tarea de Topología, nunca terminará a menos que muestre que detiene la tarea . La tarea informática Topología es un gráfico conectado por diferentes Spouts y Bolts a través de un flujo de datos (Stream). Cuando una Tormenta ejecuta una Topología en un clúster, principalmente completa la ejecución de Topología a través de las siguientes tres entidades:

(1). Trabajador (proceso)
(2). Ejecutor (hilo)
(3). Tarea
Inserte la descripción de la imagen aquí

1. Trabajador (1 proceso de trabajador ejecuta un subconjunto de 1 topología)
1 proceso de trabajador ejecuta un subconjunto de 1 topología (Nota: no habrá 1 trabajador que sirva múltiples topologías). Un proceso de trabajo iniciará uno o más subprocesos ejecutores para ejecutar un componente de topología (spout o bolt). Por lo tanto, una topología en ejecución se compone de múltiples procesos de trabajo en varias máquinas físicas en el clúster.

2. Ejecutor (el ejecutor es un hilo separado iniciado por el proceso del trabajador) El
ejecutor es un hilo separado iniciado por el proceso del trabajador. Cada ejecutor solo ejecutará una tarea de 1 componente (spout o bolt) de topología (Nota: la tarea puede ser 1 o más, el valor predeterminado de tormenta es 1 componente solo genera 1 tarea, el hilo ejecutor estará en cada Todas las instancias de tareas se llaman secuencialmente en el segundo bucle).

3. Tarea (la unidad
que finalmente ejecuta el código en el spout o bolt) La tarea es la unidad que finalmente ejecuta el código en el spout o bolt (Nota: 1 tarea es 1 instancia de spout o bolt, y el hilo ejecutor llamará a esta tarea durante la ejecución El método nextTuple o execute). Después de que se inicia la topología, se fija el número de tareas de un componente (spout o bolt), pero el número de subprocesos ejecutores utilizados por el componente se puede ajustar dinámicamente (por ejemplo: 1 subproceso ejecutor puede ejecutar una o más tareas del componente Ejemplos). Esto significa que existe dicha condición #threads <= # tareas para un componente (es decir, el número de subprocesos es menor o igual que el número de tareas). De forma predeterminada, el número de tareas es igual al número de subprocesos ejecutores, es decir, un subproceso ejecutor ejecuta solo una tarea.

Inserte la descripción de la imagen aquí


Pregunta 4: ¿Hablar sobre Storm Streaming Grouping?

Answer4 :

La agrupación de flujo es la abstracción más importante en Storm. Puede controlar la forma en que la Tarea correspondiente a Spot / Bolt distribuye Tuple, y lanzar la Tuple a la Tarea correspondiente al Spot / Bolt objetivo.
Inserte la descripción de la imagen aquí
Actualmente, Storm Streaming Grouping admite los siguientes tipos:

1. Agrupación
aleatoria de agrupación aleatoria, en la medida de lo posible distribuida uniformemente en el perno aguas abajo para definir la agrupación de flujo como una fila mixta. Esta agrupación aleatoria significa que la entrada de Spout se barajará o se distribuirá aleatoriamente a las tareas de este Bolt. la agrupación aleatoria asigna la tupla de cada tarea de manera más uniforme.

2. La agrupación de campos se
agrupa por campo y se agrupa por el valor del campo en los datos; las tuplas con el mismo valor de campo se envían a la misma tarea. Este mecanismo de agrupación garantiza que las tuplas con el mismo valor de campo irán a la misma tarea.

3. Todos los grupos: transmisión
transmisión de transmisión, para cada tupla se copiará a cada tornillo para su procesamiento.

4. Agrupación global Agrupación
global, Tuple se asigna a una Tarea en un Bolt, para lograr la Topología transaccional. Todas las tuplas en Stream se enviarán a la misma tarea de bolt para el procesamiento, y todas las tuplas se enviarán a la tarea de bolt con el menor task_id para el procesamiento.

5. Ninguna agrupación: no agrupación.
Este método se utiliza cuando no se presta atención a la estrategia de equilibrio de carga de procesamiento paralelo. Actualmente es equivalente a la agrupación aleatoria. Además, Storm organizará la tarea de tornillo y su tarea de suministro de datos aguas arriba bajo el mismo hilo.

6. Agrupación directa: la agrupación directa especifica la agrupación. La
unidad de transmisión de la tupla determina directamente el perno al que se transmitirá la tupla. Generalmente, es el perno el que recibe la tupla para decidir qué perno transmitir. Este es un método de agrupación especial. El uso de esta agrupación significa que el remitente del mensaje especifica qué tarea del receptor del mensaje procesará el mensaje. Solo las secuencias de mensajes declaradas como Direct Stream pueden declarar este método de agrupación. Y esta tupla de mensaje debe transmitirse utilizando el método emitDirect. El manejador de mensajes puede obtener el taskid del mensaje procesándolo a través de TopologyContext (el método OutputCollector.emit también devolverá el taskid).

207 artículos originales publicados · 80 elogiados · 120,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_36963950/article/details/105336074
Recomendado
Clasificación