Tabla de contenido
Gestión del ciclo de vida del trabajo
Detenga el trabajo con gracia para crear el punto de guardado final
Iniciar un trabajo desde un punto de guardado
Tres modos de envío de trabajos
Tres modos para enviar y ver tareas
Enviar y ver tareas en modo Sesión
Envíe y vea trabajos en el modo de clúster por trabajo
Modo de aplicación para enviar y ver trabajos
Flink proporciona una interfaz de línea de comandos (CLI) bin/Flink para ejecutar programas empaquetados como archivos JAR y controlar su ejecución. La CLI es parte de cualquier configuración de Flink y se puede usar tanto en configuraciones locales de un solo nodo como en configuraciones distribuidas. Se conecta al JobManager en ejecución especificado en conf/flink-conf.yaml.
lista CLI
funcionar | usar |
hilo-sesión.sh | Use yarn-session.sh para iniciar un clúster de Flink residente para aceptar las tareas enviadas por los clientes. |
correr | Envíe trabajos de Flink Los trabajos se pueden enviar a un clúster de Flink residente o ejecutarse en modo independiente. |
ejecutar aplicación | Ejecutar trabajos en modo Aplicación . |
información | Gráfico de ejecución optimizado para trabajos de impresión. Nuevamente, se debe pasar el jar para el trabajo . |
lista | Enumere todos los trabajos (incluido JobID ) |
punto de guardado | Se utiliza para crear o procesar puntos de guardado para un trabajo determinado. Si el parámetro state.savepoints.dir no se especifica en conf/flink-conf.yaml , puede ser necesario especificar un directorio de puntos de guardado fuera de JobID . |
Cancelar | cancelar trabajo |
detener | detener el trabajo (solo trabajos de transmisión) |
Gestión del ciclo de vida del trabajo
Un requisito previo para usar la CLI de Flink es tener un clúster de Flink en ejecución implementado en Kubernetes , YARN o cualquier otra opción disponible. Puede iniciar el clúster de Flink localmente y probar los comandos en su propia máquina.
enviar un trabajo
Enviar un trabajo significa cargar el JAR del trabajo y las dependencias relacionadas al clúster de Flink e iniciar la ejecución del trabajo . Por ejemplo, elegimos un trabajo de ejecución prolongada como ejemplos/streaming/StateMachineExample.jar . Puede elegir cualquier otro archivo jar de la carpeta Examples/ para implementar su propio trabajo .
$ ./bin/flink run \
--detached \
./examples/streaming/StateMachineExample.jar
Enviar un trabajo con --tached hará que el comando regrese después de que se complete la confirmación, con la salida que contiene la ID del trabajo recién enviado .
El trabajo se ha enviado con JobID cca7bc1061d61cf15238e92312c2fc2 0
La información de uso impresa enumera los parámetros relacionados con el trabajo, que se pueden agregar al final del comando de envío del trabajo si lo desea.
También hay un comando de aplicación de ejecución que se puede usar para ejecutar trabajos en Modo de aplicación , que funciona de manera similar a ejecutar .
Los comandos run y run-application admiten la aceptación de parámetros de configuración adicionales a través de -D . Por ejemplo, el grado máximo de paralelismo de un trabajo se puede establecer configurando -Dpipeline.max parallelism=120 . Este parámetro es útil en modo por trabajo o aplicación , porque puede pasar cualquier parámetro de configuración al clúster sin cambiar los archivos de configuración.
Al enviar un trabajo en modo de sesión , solo se admiten los parámetros de configuración.
Detección de trabajo
Puede detectar cualquier trabajo en ejecución con el siguiente comando :
$ ./bin/flink list
Todos los trabajos que se enviaron pero no se ejecutaron se enumeran en Trabajos programados.
Crear puntos de guardado
Se pueden crear puntos de guardado para guardar el estado actual de un trabajo. Solo JobID:
$ ./bin/flink savepoint \
$JOB_ID \
/tmp/flink-savepoints
La carpeta savepoint es opcional y debe especificarse si state.savepoints.dir no está configurado.
La ruta al punto de guardado se puede usar más adelante para reiniciar el trabajo de Flink .
eliminar punto de guardado
Para eliminar un punto de guardado, --necesita agregar el comando --dispose con la ruta del punto de guardado correspondiente :
$ ./bin/flink savepoint \
--dispose \
/tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
$JOB_ID
Si utiliza una instancia de estado personalizado (como un estado de reducción personalizado o un estado de RocksDB), debe especificar la ruta al JAR del programa utilizado para activar el punto de guardado . De lo contrario, encontrará una excepción ClassNotFoundException :
$ ./bin/flink savepoint \
--dispose <savepointPath> \
--jarfile <jarFile>
Activar el procesamiento de Savepoint a través de la operación Savepoint no solo elimina los datos del almacenamiento, sino que también hace que Flink limpie los metadatos asociados con Savepoint .
terminar trabajo
Detenga el trabajo con gracia para crear el punto de guardado final
Esta es una forma más elegante de finalizar un trabajo de transmisión en ejecución y, por lo tanto, el flujo desde el origen hasta el receptor . Cuando el usuario solicite detener el trabajo, se solicitará a todas las fuentes que envíen la última barrera del punto de control , activando así el punto de control , y después de completar con éxito el punto de control , completarán la finalización del trabajo llamando a cancelar () .
$ ./bin/flink stop \
--savepointPath /tmp/flink-savepoints \
$JOB_ID
Suspendiendo el trabajo "cca7bc1061d61cf15238e92312c2fc20" con un punto de guardado.
Punto de guardado completado. Ruta: archivo:/tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab
Si state.savepoints.dir no está configurado , la carpeta del punto de guardado debe especificarse con --savepointPath .
Si se especifica el indicador --drain , MAX_WATERMARK se emitirá antes de la última barrera del punto de control . Esto activará todos los temporizadores de tiempo de eventos registrados, borrando cualquier estado en espera de una marca de agua específica, como ventanas. El trabajo se ejecutará hasta que todas las fuentes se apaguen correctamente. Esto permite que el trabajo termine de procesar todos los datos en tránsito para que, cuando se detenga, se puedan procesar los datos posteriores al punto de guardado.
Si desea finalizar el trabajo de forma permanente, use el indicador --drain . No use --drain si desea reanudar el trabajo más tarde , ya que esto puede generar resultados erróneos.
cancelar trabajo
La cancelación de un trabajo se puede hacer con la operación cancelar:
$ ./bin/flink cancel $JOB_ID
Cancelando trabajo cca7bc1061d61cf15238e92312c2fc20.
Trabajo cancelado cca7bc1061d61cf15238e92312c2fc20.
El estado del trabajo correspondiente pasará de "En ejecución" a "Cancelado". Cualquier cálculo se detendrá.
Iniciar un trabajo desde un punto de guardado
Se puede iniciar un trabajo desde un punto de guardado mediante la acción ejecutar (y ejecutar la aplicación ).
$ ./bin/flink run \
--detached \
--fromSavepoint /tmp/flink-savepoints/savepoint-cca7bc-bb1e257f0dab \
./examples/streaming/StateMachineExample.jar
Parece que este comando es idéntico al comando de ejecución inicial, excepto por el parámetro --fromSavepoint, que se usa para hacer referencia al estado de un trabajo detenido anteriormente, lo que generará una nueva ID de trabajo que se puede usar para trabajos de mantenimiento .
De forma predeterminada, intentamos hacer coincidir todo el estado del punto de guardado con el trabajo que se envía. Si desea permitir la omisión de estados de punto de guardado que no se pueden restaurar, puede configurar el indicador --allowNonRestoredState . Si un operador que formaba parte del programa se eliminó del programa cuando se activó el punto de guardado y aún desea utilizar el punto de guardado, debe permitirlo.
$ ./bin/flink run \
--fromSavepoint <savepointPath> \
--allowNonRestoredState ...
Esto es útil si su programa elimina operadores que formaban parte de los puntos de guardado.
Tres modos de envío de trabajos
modelo |
describir |
características |
Sesión modelo |
El modo Seesion creará un clúster de Flink de acuerdo con los parámetros de recursos que establezca y todos los trabajos se enviarán a este clúster para que se ejecuten. El clúster no se liberará automáticamente una vez que el trabajo termine de ejecutarse. Por ejemplo, si ocurre una excepción en un trabajo y se cierra un Administrador de tareas , todos los demás trabajos que se ejecutan en el Administrador de tareas fallarán. Además, dado que solo hay un administrador de trabajos en el mismo clúster , a medida que aumenta la cantidad de trabajos, la presión sobre el administrador de trabajos aumentará en consecuencia. |
Ventajas: al enviar trabajos, la sobrecarga de tiempo causada por la asignación de recursos es menor que en otros modos. Desventajas: dado que todos los trabajos se ejecutan en el clúster, habrá competencia por los recursos e interacción entre los trabajos. Según las características anteriores, este modo es adecuado para implementar trabajos que requieren un tiempo de inicio corto y un tiempo de ejecución relativamente corto. |
Clúster por trabajo modelo |
Cuando se usa el modo de clúster por trabajo , cada vez que se envía un trabajo de Flink , YARN iniciará un nuevo clúster de Flink para el trabajo y luego ejecutará el trabajo. Cuando el trabajo termine de ejecutarse o se cancele, también se liberará el clúster de Flink al que pertenece el trabajo. |
Ventajas: aislamiento de recursos entre trabajos, el comportamiento anormal de un trabajo no afectará a otros trabajos. Debido a que cada trabajo tiene una correspondencia uno a uno con un Administrador de trabajos , no habrá problema de que un Administrador de trabajos se sobrecargue debido a la ejecución de varios trabajos . Desventaja: cada vez que se ejecuta un trabajo, se debe iniciar un clúster de Flink dedicado y la sobrecarga de iniciar el trabajo es mayor. En base a las características anteriores, este modo suele ser adecuado para trabajos de larga duración. |
Modo de aplicación |
Al usar el modo de aplicación, cada vez que se envía una aplicación de Flink (una aplicación contiene uno o más trabajos), YARN iniciará un nuevo clúster de Flink para la aplicación . Cuando la Aplicación finaliza o se cancela, también se liberará el clúster de Flink al que pertenece la Aplicación . La diferencia entre este modo y el modo Por trabajo es que el método main() en el paquete JAR correspondiente a la Aplicación se ejecutará en el Administrador de trabajos en el clúster . Si el paquete JAR enviado contiene varios trabajos, estos trabajos se ejecutarán en el clúster al que pertenece la aplicación . |
Ventajas: Puede reducir la carga del cliente al enviar trabajos. Desventajas: cada vez que se ejecuta una aplicación Flink , se debe iniciar un clúster de Flink dedicado y el tiempo dedicado a iniciar la aplicación será mayor. |
Tres modos para enviar y ver tareas
Enviar y ver tareas en modo Sesión
- Ejecute el siguiente comando para iniciar la sesión de YARN.
yarn-session.sh --detached
- Ejecute el siguiente comando para enviar el trabajo.
flink run /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar
Nota: este artículo usa el ejemplo TopSpeedWindowing proporcionado por Flink, que es un trabajo de transmisión de larga duración.
Una vez que el envío se haya realizado correctamente, se devolverá el ID de aplicación de YARN del trabajo de Flink enviado. Se devuelve información similar a la siguiente.
- Ejecute el siguiente comando para ver el estado del trabajo.
flink list -t yarn-session -Dyarn.application.id=<application_XXXX_YY>
También puede ver el estado del trabajo a través de la interfaz de usuario web.
- Ejecute el siguiente comando para detener el trabajo.
flink cancel -t yarn-session -Dyarn.application.id=<application_XXXX_YY> <jobId>
Envíe y vea trabajos en el modo de clúster por trabajo
- Ejecute el siguiente comando para enviar el trabajo.
flink run -t yarn-per-job --detached /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar
Una vez que el envío se haya realizado correctamente, se devolverá el ID de aplicación de YARN del trabajo de Flink enviado. Se devuelve información similar a la siguiente.
- Ejecute el siguiente comando para ver el estado del trabajo.
flink list -t yarn-per-job -Dyarn.application.id=<application_XXXX_YY>
Tenga en cuenta que <application_XXXX_YY> en el ejemplo de este artículo es el Id. de aplicación devuelto después de que se ejecuta el trabajo.
También puede ver el estado del trabajo a través de la interfaz de usuario web.Para obtener más información, consulte Visualización del estado del trabajo a través de la interfaz de usuario web.
- Ejecute el siguiente comando para detener el trabajo.
flink cancel -t yarn-per-job -Dyarn.application.id=<application_XXXX_YY> <jobId>
Modo de aplicación para enviar y ver trabajos
- Ejecute el siguiente comando para enviar el trabajo.
flink run-application -t yarn-application /opt/apps/FLINK/flink-current/examples/streaming/TopSpeedWindowing.jar
Una vez que el envío se haya realizado correctamente, se devolverá el ID de aplicación de YARN del trabajo de Flink enviado. Se devuelve información similar a la siguiente.
- Ejecute el siguiente comando para ver el estado del trabajo.
flink list -t yarn-application -Dyarn.application.id=<application_XXXX_YY>
También puede ver el estado del trabajo a través de la interfaz de usuario web.Para obtener más información, consulte Visualización del estado del trabajo a través de la interfaz de usuario web.
- Ejecute el siguiente comando para detener el trabajo.
flink cancel -t yarn-application -Dyarn.application.id=<application_XXXX_YY> <jobId>