Flink on Yarn tiene dos métodos de ejecución, uno es el modo Session-Cluster, el otro es el modo Pre-Job-Cluster
Flink On Yarn realiza tareas de dos formas
Flink Session (Session-Cluster)
- Modo de gestión de memoria centralizada: inicialice un clúster de Flink en Yarn, abra los recursos designados y luego envíe a Flink Jon en esta sesión de Flink, lo que significa que no importa cuántos trabajos se envíen, estos trabajos compartirán el hilo al principio Recursos solicitado en. Este grupo de Flink residirá en el grupo de Yarn a menos que se detenga manualmente.
- Iniciar un demonio en hilo para iniciar varios trabajos, es decir, iniciar una aplicación maestra para gestionar varios trabajos
- Este modo se divide en dos pasos: yarn-session.sh (desarrollo de recursos) + flink run (enviar tarea)
./yarn-session.sh -n 4 -jm 1024 -tm 5120 -s 5 -nm yarn-session-jobs -d
Descripción de parámetros:
- -n: especifique el número de administrador de tareas, especifique el número de administrador de tareas
- -jm: la cantidad de memoria ocupada por jobmanager, en MB
- -tm: especifica la memoria ocupada por cada administrador de tareas, en MB
- -s: especifica la cantidad de núcleos de CPU que puede usar cada administrador de tareas
- -nm: especifica el nombre de la aplicación
- -d: comienza en segundo plano, después de que se inicia la sesión, el proceso se cierra
Descripción del proceso de inicio:
- Después de iniciar la sesión, yarn primero asignará un contenedor para iniciar la aplicación maestra y el administrador de trabajos. La memoria ocupada es el tamaño de memoria especificado por -jm, y la CPU es de 1 núcleo.
- Antes de comenzar el trabajo, jobmanager no iniciará taskmanager (jobmanager asignará dinámicamente el taskmanager de acuerdo con el grado de paralelismo del trabajo, es decir, los espacios ocupados)
- Enviar tarea al maestro de aplicaciones
./flink run -p 3 -yid application_id -d -c com.xxx ~/jar/xxx-1.0-SNAPSHOT.jar
Se utiliza para iniciar un trabajo en la aplicación maestra especificada
Nota: El parámetro de trabajo debe escribirse antes de -c, de lo contrario, el parámetro especificado no funcionará
Descripción de parámetros:
- -p: especifique el grado de paralelismo de la tarea. Si especifica el grado de paralelismo en el código del programa, el parámetro de grado de paralelismo aquí no tiene ningún efecto
- -yid: especifica a qué ID de aplicación se envía la tarea, el valor predeterminado es la última aplicación enviada a este nodo
- -c: entrada principal del trabajo + ruta del tarro
Flink ejecutar (Clúster por trabajo)
Inicie un solo trabajo y envíelo al grupo de hilos, es decir, un solo trabajo y una sola sesión, para lograr un aislamiento completo de los recursos.
El comando para iniciar el trabajo es diferente al de yarn-session. Al especificar -m yarn-cluster, los parámetros se han comparado con -y session.
./flink run \
-m yarn-cluster \
-yn 2 \
-yjm 1024 \
-ytm 3076 \
-p 2 \
-ys 3 \
-yD name=hadoop \
-ynm RTC_KB_FLINK_TEST \
-yqu rt_constant \
-c com.kb.rt.Test02 ~/jar/kb-1.0-SNAPSHOT.jar
Descripción de parámetros:
- -m: yarn-cluster, que significa iniciar una sola sesión y enviar un solo trabajo
- -yn: número de administrador de tareas
- -yjm: uso de memoria de jobmanager
- -ytm: uso de memoria de cada administrador de tareas
- -ys: la cantidad de núcleos de CPU que puede usar cada administrador de tareas
- -ynm: nombre de la aplicación
- -yqu: especifica el nombre de la cola de trabajos
- -c: programa entrada principal + ruta de jarra
- -p: especifica el grado de paralelismo de la tarea
- -yD: configuración de parámetros dinámicos
Proceso de envío de tareas
- flink-client envía la tarea a yarn y carga todos los frascos y configuraciones dependientes a hdfs
- Para solicitar recursos de ResourceManager, ResourceManager contiene principalmente dos partes: ApplicationManager y resourceScheduler
- ApplicationManager inicia ApplicationMaster y ResourceScheduler asigna los contenedores necesarios para ejecutar ApplicationMaster.
- Inicie JobManager de Flink en ApplicationMaster y solicite recursos de ResourceManager a través de RPC de forma de sondeo
- Después de que ResourceManager reciba la solicitud, asignará el contenedor correspondiente para iniciar TaskManager en el futuro y descargar el jar y la configuración correspondientes de hdfs.
- ApplicationMater requiere el contenedor correspondiente para iniciar la tarea.
- Se inician el JobManager y el TaskManager correspondientes.
Gestión de recursos de Flink
cadenas de operador
En todo el proceso de procesamiento del flujo de datos, hay muchos operadores, que también pueden entenderse como operadores. Existe una cierta relación entre los operadores adyacentes. Conectar a los operadores adyacentes para formar una cadena es la clave para la computación distribuida eficiente de flink. entre hilos y la serialización y deserialización de mensajes.
Flujos uno a uno: entre la fuente y el mapa, no hay cambio de partición ni intercambio de datos entre particiones.
Redistribución de flujos: entre map y keyby / window y entre keyby / window y sumidero, hay un cambio en el intercambio de datos entre particiones o el número de particiones.
espacio
-
Las ranuras generalmente se refieren a un subconjunto de recursos fijos del administrador de tareas o subprocesos. Si hay 3 ranuras en un administrador de tareas, cada ranura administra 1/3 del alojamiento de la memoria.
-
Los recursos de memoria no tendrán competencia de memoria debido a la existencia de ranuras, y las ranuras aíslan la memoria, pero tenga en cuenta que la CPU no está aislada
Las ranuras y el paralelismo son diferentes. La ranura es un concepto estático, lo que significa que el administrador de tareas puede tener la capacidad de ejecutarse en paralelo. El paralelismo solo es significativo cuando se ejecuta el programa. Es un concepto dinámico y se refiere al uso real del programa cuando se está ejecutando La capacidad de concurrencia, pero las dos están relacionadas. El paralelismo no puede ser mayor que el número de ranuras.
Espacio para compartir: SlotSharingGroup y CoLocationGroup
De forma predeterminada, Flink permite que las subtareas compartan espacios, siempre que todas provengan del mismo trabajo y tengan subtareas de diferentes tareas con el mismo SlotSharingGroup (el nombre predeterminado es el predeterminado). Entonces significa que las subtareas de tareas con diferentes nombres se comparten en una ranura, de modo que una ranura tiene la oportunidad de contener una canalización completa. Por lo tanto, en el caso predeterminado de compartición de espacios, el número de espacios necesarios para el inicio del trabajo es igual al paralelismo máximo del operador en el trabajo.
La figura anterior es un trabajo del modelo fuente-mapa-reducción, que se muestra en la esquina inferior izquierda de la figura, donde el paralelismo de fuente y mapa es 4, y el paralelismo de reducción es 3. Cada círculo representa una subtarea; y el paralelismo máximo del operador en todo el trabajo es 4; si la tarea se envía para ejecución, puede saber que el trabajo requiere 4 espacios; si el trabajo se envía a 2 administradores de tareas, cada administrador de tareas allí son 3 ranuras, como se muestra en el lado derecho de la figura, de las cuales 3 ranuras tienen una tubería con un modelo completo de fuente-mapa-reducción. Sin embargo, el proceso de reproducción aleatoria de datos no se dibuja.
La figura anterior contiene el trabajo modelo de source-map, keyBy / window / apply, sink, donde el paralelismo de source-map es 6, el paralelismo de keyBy / window / apply es 6 y el paralelismo de sumidero es 1, luego el trabajo es necesario para el envío Hay 6 ranuras. Después de la asignación, la primera ranura a la izquierda tiene una canalización completa, ejecutando 3 subtareas, y las 5 ranuras restantes ejecutan estas 2 subtareas respectivamente, y finalmente los datos se transmiten al receptor para salida.
Parámetros de ejecución de Flink
参数说明
Action "run" compiles and runs a program.
Syntax: run [OPTIONS] <jar-file> <arguments>
"run" action options:
-c,--class <classname> Class with the program entry
point ("main" method or
"getPlan()" method. Only
needed if the JAR file does
not specify the class in its
manifest.
-C,--classpath <url> Adds a URL to each user code
classloader on all nodes in
the cluster. The paths must
specify a protocol (e.g.
file://) and be accessible
on all nodes (e.g. by means
of a NFS share). You can use
this option multiple times
for specifying more than one
URL. The protocol must be
supported by the {
@link
java.net.URLClassLoader}.
-d,--detached If present, runs the job in
detached mode
-m,--jobmanager <host:port> Address of the JobManager
(master) to which to
connect. Use this flag to
connect to a different
JobManager than the one
specified in the
configuration.
-p,--parallelism <parallelism> The parallelism with which
to run the program. Optional
flag to override the default
value specified in the
configuration.
-q,--sysoutLogging If present, suppress logging
output to standard out.
-s,--fromSavepoint <savepointPath> Path to a savepoint to reset
the job back to (for example
file:///flink/savepoint-1537
).
-z,--zookeeperNamespace <zookeeperNamespace> Namespace to create the
Zookeeper sub-paths for high
availability mode
Options for yarn-cluster mode:
-yD <arg> Dynamic properties
-yd,--yarndetached Start detached
-yid,--yarnapplicationId <arg> Attach to running YARN session
-yj,--yarnjar <arg> Path to Flink jar file
-yjm,--yarnjobManagerMemory <arg> Memory for JobManager Container [in
MB]
-yn,--yarncontainer <arg> Number of YARN container to allocate
(=Number of Task Managers)
-ynm,--yarnname <arg> Set a custom name for the application
on YARN
-yq,--yarnquery Display available YARN resources
(memory, cores)
-yqu,--yarnqueue <arg> Specify YARN queue.
-ys,--yarnslots <arg> Number of slots per TaskManager
-yst,--yarnstreaming Start Flink in streaming mode
-yt,--yarnship <arg> Ship files in the specified directory
(t for transfer)
-ytm,--yarntaskManagerMemory <arg> Memory per TaskManager Container [in
MB]
-yz,--yarnzookeeperNamespace <arg> Namespace to create the Zookeeper
sub-paths for high availability mode
-n 10 一共启动10个TaskManager节点
-jm 1024 JobManager的内存大小为1024M
-tm 2048 TaskManager的内存大小为2048M
-d 使用detached模式进行部署(部署完成后本地命令行可以退出)
-qu default 部署到YARN的default队列中