Flink enviar parámetros de tareas

Las opiniones sobre los parámetros en línea son divergentes y poco realistas

  1. Envíe la configuración de parámetros de la tarea de hilo:

parámetro

valor sugerido

descripción

-n (administrador de tareas)

Número de nodos * (4-8)

1.10 es obsoleto

Este parámetro es el número de administradores de tareas de Flink La operación del motor de Flink debe estar compuesta por un administrador de trabajos y varios administradores de tareas. Cada administrador de tareas es una parte independiente. Cuando una aplicación Flink necesita ejecutarse, se asignará aleatoriamente a un administrador de tareas para que se ejecute. Por lo tanto, aumenta el número de administradores de tareas y se pueden ejecutar más aplicaciones Flink en paralelo sin interferencias. Pero, obviamente, los recursos en el clúster son limitados. Cuantos más administradores de tareas, menos recursos puede asignar un solo administrador de tareas, lo que también hará que el rendimiento de Flink se degrade. Por lo tanto, de acuerdo con los valores empíricos, el número de administradores de tareas puede ser el número de nodos del clúster * 4 ~ el número de nodos * 8.

-s (ranura)

Configurar de acuerdo con la escena real

Este parámetro es la cantidad de ranuras que posee un solo administrador de tareas. Después de enviar la tarea Flink, la cantidad total de ranuras que se pueden usar en el clúster es ranura * administrador de tareas. Una ranura puede proporcionar 1 simultaneidad para un administrador de tareas. Por ejemplo, ranura = 30, es decir, un administrador de tareas puede ejecutar como máximo 30 simultaneidad. Por supuesto, en la operación real, también puede ejecutar 20 simultaneidad, luego las 10 ranuras restantes son inactivo en este momento. Las ranuras restantes no utilizadas no ocuparán recursos de la CPU, pero sí los recursos de memoria relacionados. La modificación de este parámetro se ajusta dinámicamente de acuerdo con la concurrencia real utilizada. En el caso de que haya suficiente memoria, puede establecer un valor mayor de manera apropiada.

-tm (memoria del administrador de tareas)

30000

Este parámetro es el recurso de memoria asignado a un solo administrador de tareas. Siempre que la memoria del administrador de tareas se utilice lo suficiente, una mayor asignación de recursos de memoria no mejorará directamente el rendimiento. Una vez asignada la memoria del administrador de tareas, toda la memoria restante se puede asignar primero al administrador de tareas. Según el valor de la experiencia, se pueden asignar alrededor de 30000 MB.

–Jm (memoria del administrador de trabajos)

5000

Este parámetro es el recurso de memoria asignado a jobmanager. Este parámetro casi no tiene ningún efecto sobre el rendimiento general y no necesita asignarse demasiado. Según el valor de la experiencia, asigne 5000 MB ~ 15000 MB.

 

  1. Afinación
  1. Aumente el uso de la CPU mientras reduce la sobrecarga de rendimiento adicional
  1. De acuerdo con el modelo de negocio, configure un recolector de basura apropiado, analice el registro de GC, establezca un tamaño de partición razonable, concurrencia de subprocesos de GC y reduzca las operaciones completas de GC.
  2. Establezca una cantidad razonable de TaskManagers y la cantidad de ranuras correspondientes a cada TaskManager, de modo que cada nodo tenga un grado razonable de paralelismo de tareas. Preste atención a que la cantidad de ranuras no debe ser demasiado alta para evitar la sobrecarga adicional de subprocesos.
  3. Establezca el número de particiones en el operador para evitar GC con memoria insuficiente.
  4. Para evitar la desviación de datos, puede utilizar interfaces como reequilibrio para dividir los datos de manera uniforme.
  5. De acuerdo con el tamaño del procesamiento de datos, establezca la cantidad de bloques de datos del búfer en el búfer "taskmanager.network.numberOfBuffers".
  6. Optimice la lógica empresarial, reduzca la cantidad de operaciones de cálculo y E / S. Filtre los datos innecesarios por adelantado, reutilice el espacio de la memoria tanto como sea posible y evite los cálculos dobles.

 

  1. Memoria JVM GC
  1. Configuración de GC: en el archivo de configuración "flink-conf.yaml" del cliente, agregue parámetros en el elemento de configuración "env.java.opts":

“-Xloggc: <LOG_DIR> /gc.log -XX: + PrintGCDetails -XX: -OmitStackTraceInFastThrow -XX: + PrintGCTimeStamps -XX: + PrintGCDateStamps -XX: + UseGCLogFileRotation -XX: NumberOfGCLogFiles = 20M -XX:

 

  1. Configuración de parámetros de recursos
    1. core: heap_memory = 1: 4, es decir, 1 núcleo corresponde a la memoria 4G. P.ej:
      • El valor del parámetro central es 1CU, y el valor del parámetro de memoria de pila es 3G, entonces el resultado final de la asignación de recursos es 1CU + 4G.
      • El valor del parámetro principal es 1CU, el valor del parámetro de memoria de pila es 5G y el resultado final de la asignación de recursos es 1.25CU + 5G
  2. Optimizar el funcionamiento de DataStream
  1. El programa en tiempo real optimiza la operación de agrupación o partición de datos de DataStream. Cuando las particiones provocan sesgos de datos, debe considerar optimizar las particiones.
  2. Evite las operaciones sin paralelismo, algunas operaciones en DataStream causarán paralelismo, como WindowAll.
  3. Intente no utilizar String para keyBy.
  1. Paralelismo
    1. Aumente el grado de paralelismo de las tareas y aproveche al máximo la potencia de cálculo de las máquinas de clúster. Generalmente, el grado de paralelismo se establece en 2-3 veces el número total de núcleos de CPU en el clúster.
    2. El número de fuentes está relacionado con el número de particiones ascendentes. Por ejemplo, la cantidad de fuentes es 16 y la cantidad simultánea de fuentes puede ser 16, 8 o 4, etc., y no debe exceder las 16. (El número simultáneo de Source no puede ser mayor que el número de particiones de Source)
    3. Paralelismo de configuración de operador: el paralelismo de un operador, fuente de datos y sumidero se puede especificar llamando al método setParallelism ()
    4. Paralelismo de configuración del entorno de ejecución: los programas Flink se ejecutan en el entorno de ejecución. El entorno de ejecución define un paralelismo predeterminado para todos los operadores ejecutados, fuentes de datos y sumideros de datos. El paralelismo predeterminado del entorno de ejecución se puede especificar llamando al método setParallelism ().
    5. Establecer el grado de paralelismo cuando el cliente envía: El grado de paralelismo se puede establecer cuando el cliente envía el trabajo a Flink . Para el cliente CLI , el grado de paralelismo se puede especificar mediante el parámetro " -p ".
    6. Proporcionado en el archivo de configuración del sistema: En flink-conf.yaml en , proporcionó los parámetros de paralelismo .
  2. Configuración de parámetros de tareas
    1. Cuando use el comando yarn-session , agregue el parámetro " -jm MEM " para configurar la memoria
    2. Cuando utilice el comando yarn-cluster , agregue el parámetro " -yjm MEM " para configurar la memoria
    3. Cuando utilice el comando yarn-session , agregue el parámetro " -n NUM " para establecer el número de TaskManagers
    4. Cuando utilice el comando yarn-cluster , agregue el parámetro " -yn NUM " para establecer el número de TaskManagers
    5. Cuando use el comando yarn-session , agregue el parámetro " -p NUM " para establecer el número de SLOT
    6. Cuando utilice el comando yarn-cluster , agregue el parámetro " -yp NUM " para establecer el número de SLOT
    7. Cuando use el comando yarn-sesion , agregue el parámetro " -tm MEM " para configurar la memoria
    8. Cuando utilice el comando yarn-cluster , agregue el parámetro " -ytm MEM " para configurar la memoria
  3. Configuración de partición
  1. Partición aleatoria: particiona los elementos de forma aleatoria. dataStream.shuffle ()
  2. Los elementos se dividen en función de la operación por turnos, de modo que cada partición es responsable del equilibrio. Resuelva la situación de sesgo de datos: dataStream.rebalance ();
  3. Utilice round-robin para dividir elementos en subconjuntos de operaciones posteriores. Cuando desea distribuir datos de cada instancia paralela de una fuente a un subconjunto de mapeadores para distribuir la carga, pero no desea dividir completamente el equilibrio de carga: dataStream.rescale ();
  4. Transmita cada elemento a todas las particiones: dataStream.broadcast ();
  5. Partición personalizada: use un particionador personalizado para seleccionar la tarea de destino para cada elemento y partición de acuerdo con una determinada característica para optimizar la ejecución de la tarea
  1. Configuración del punto de control

https://ververica.cn/developers/introduction-to-state-management-and-fault-tolerance/

 

  1. estado de flink

https://ververica.cn/developers/flink-state-best-practices/

  1. Configuración y ajuste de parámetros oficiales:
  1. https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/deployment/config.html
  1. https://ci.apache.org/projects/flink/flink-docs-release-1.12/zh/deployment/memory/mem_tuning.html

 

Supongo que te gusta

Origin blog.csdn.net/qq_34387470/article/details/115366459
Recomendado
Clasificación