Resumen de los problemas de desarrollo y producción de Flink

1 、 Punto de control 失败 : El punto de control expiró antes de completar

La razón es porque

checkpointConf.setCheckpointTimeout(8000L)

La configuración es demasiado pequeña, el valor predeterminado es 10 minutos, aquí solo se configuran 8 segundos.

Cuando una aplicación Flink está bajo presión (por ejemplo, causada por un componente externo anormal), la barrera fluirá muy lentamente, haciendo que el tiempo del punto de control aumente.

2. Recomendaciones para el aislamiento de recursos

En Flink, el aislamiento de recursos se realiza a través de Slots, lo que significa que se ejecutarán múltiples Slots en la misma JVM. Este aislamiento es muy débil, especialmente para entornos de producción. La aplicación Flink debe probarse en un clúster Flink separado antes de que se conecte. De lo contrario, se conectará una aplicación Flink inestable y problemática, lo que puede afectar la aplicación en todo el clúster Flink.

3. La insuficiencia de recursos provoca la muerte del contenedor.

`The assigned slot container_container编号 was removed.`

La aplicación Flink lanza este tipo de excepción. Al verificar el registro, generalmente se debe a que cierta aplicación Flink tiene una gran huella de memoria, lo que hace que TaskManager (contenedor en hilo) se elimine.

Pero no todos los casos son por esta razón. Debe mirar el registro de lanas (consulte el registro de tareas de lanas: registros de lanas -applicationId -appOwner). Si el código está escrito correctamente, de hecho son recursos insuficientes. De hecho, 1G Slot ejecuta múltiples tareas (Slot Group Share) en realidad son bastante fáciles de aparecer.

Por lo tanto, hay dos opciones, puede elegir una de acuerdo con la situación específica.

  • Programe la aplicación Flink en un clúster con una memoria por ranura más grande.

  • A través de slotSharingGroup ("xxx"), reduzca la cantidad de tareas compartidas en la ranura

4. Se informa un error al inicio, lo que indica que no se puede encontrar la clase de camiseta.

java.lang.NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties

La solución es ingresar yarn y copiar las siguientes dos consultas del proyecto lib al lib de flink

hadoop / share / hadoop / yarn / lib / jersey-client-1.9.jar /hadoop/share/hadoop/yarn/lib/jersey-core-1.9.jar

5. Conflicto de versión de Scala

java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty()Lscala/collection/

Solución, agregue

import org.apache.flink.api.scala._

6. No se utiliza ningún flujo de retroceso para informar de un error.

Table is not an append一only table. Use the toRetractStream() in order to handle add and retract messages.

Esto se debe a que la tabla dinámica no está en modo de solo adición, debe procesarse con toRetractStream (retraer flujo).

tableEnv.toRetractStream[Person](result).print()

7, ideas de resolución de problemas OOM

java.lang.OutOfMemoryError: GC overhead limit exceeded
java.lang.OutOfMemoryError: GC overhead limit exceeded
        at java.util.Arrays.copyOfRange(Arrays.java:3664)
        at java.lang.String.<init>(String.java:207)
        at com.esotericsoftware.kryo.io.Input.readString(Input.java:466)
        at com.esotericsoftware.kryo.serializers.DefaultSerializers$StringSerializer.read(DefaultSerializers.java:177)
......
        at org.apache.flink.streaming.runtime.tasks.OperatorChain$CopyingChainingOutput.collect(OperatorChain.java:524)

solución:

  1. Compruebe si el número de espacios es suficiente o el número de espacios asignados es válido

  2. Si todos los paralelos del programa se asignan normalmente (habrá tal situación, si hay 5 paralelos, pero solo 2 tienen efecto en unos pocos puntos y los otros 3 no tienen flujo de datos)

  3. Verifique si el programa flink tiene datos sesgados, puede verificar la cantidad de datos procesados ​​por cada subnodo de cada partición a través de la interfaz ui de flink

8. No se puede analizar el tipo de valor devuelto y notificar un error.

The return type of function could not be determined automatically
Exception in thread "main" org.apache.flink.api.common.functions.InvalidTypesException: The return type of function 'main(RemoteEnvironmentTest.java:27)' could not be determined automatically, due to type erasure. You can give type information hints by using the returns(...) method on the result of the transformation call, or by letting your function implement the 'ResultTypeQueryable' interface.
 at org.apache.flink.api.java.DataSet.getType(DataSet.java:178)
 at org.apache.flink.api.java.DataSet.collect(DataSet.java:410)
 at org.apache.flink.api.java.DataSet.print(DataSet.java:1652)

Solución: La razón de este fenómeno es generalmente que la expresión lambda no tiene un tipo de valor de retorno claro, o que la estructura de datos especial flink no puede analizar su tipo. En este momento, necesitamos agregar el tipo de valor de retorno después del método, como como cuerda

input.flatMap((Integer number, Collector<String> out) -> {
 ......
})
// 提供返回值类型
.returns(Types.STRING)

9. Conflicto del paquete jar de Hadoop

Caused by: java.io.IOException: The given file system URI (hdfs:///data/checkpoint-data/abtest) did not describe the authority (like for example HDFS NameNode address/port or S3 host). The attempt to use a configured default authority failed: Hadoop configuration did not contain an entry for the default file system ('fs.defaultFS').
        at org.apache.flink.runtime.fs.hdfs.HadoopFsFactory.create(HadoopFsFactory.java:135)
        at org.apache.flink.core.fs.FileSystem.getUnguardedFileSystem(FileSystem.java:399)
        at org.apache.flink.core.fs.FileSystem.get(FileSystem.java:318)
        at org.apache.flink.core.fs.Path.getFileSystem(Path.java:298)

Solución: simplemente elimine las dependencias relacionadas con hadoop del archivo pom

10. El reloj no se puede iniciar debido a que el reloj no está sincronizado.

Se informa de un error al iniciar una tarea de Flink

Caused by: java.lang.RuntimeException: Couldn't deploy Yarn cluster

Luego mire con cuidado y descubra que hay una oración en ella.

system times on machines may be out of sync

Esto significa que es posible que la hora del sistema en la máquina no esté sincronizada. Simplemente sincronice la hora de las máquinas del clúster.

Supongo que te gusta

Origin blog.csdn.net/weixin_42073629/article/details/115223198
Recomendado
Clasificación