1 、 Checkpoint 失败 : Checkpoint expirou antes de completar
A razão é porque
checkpointConf.setCheckpointTimeout(8000L)
A configuração é muito pequena, o padrão é 10 minutos, aqui apenas 8 segundos é definido.
Quando um aplicativo Flink está sob pressão (por exemplo, causado por um componente externo anormal), a barreira fluirá muito lentamente, fazendo com que o tempo do ponto de verificação suba.
2. Recomendações para isolamento de recursos
No Flink, o isolamento de recursos é realizado por meio de Slots, o que significa que vários Slots serão executados na mesma JVM. Esse isolamento é muito fraco, especialmente para ambientes de produção. O Flink App deve ser testado em um cluster Flink separado antes de ficar online. Caso contrário, um Flink App instável e problemático ficará online, o que pode afetar o App em todo o cluster Flink.
3. Recursos insuficientes fazem com que o contêiner seja encerrado
`The assigned slot container_container编号 was removed.`
O Flink App lança esse tipo de exceção. Ao verificar o log, geralmente é porque um determinado Flink App tem uma grande quantidade de memória, o que faz com que o TaskManager (Container on Yarn) seja encerrado.
Mas nem todos os casos são por esse motivo. Você precisa olhar o log do yarn (verifique o log de tarefas do yarn: yarn logs -applicationId -appOwner). Se o código for escrito corretamente, ele é de fato recursos insuficientes. Na verdade, 1G Slot executa Multiple Tasks (Slot Group Share) são realmente muito fáceis de aparecer.
Portanto, existem duas opções, você pode escolher uma de acordo com a situação específica.
-
Agende o aplicativo Flink em um cluster com uma memória maior por slot.
-
Por meio do slotSharingGroup ("xxx"), reduza o número de tarefas compartilhadas no Slot
4. Um erro é relatado na inicialização, indicando que a classe de camisa não pode ser encontrada
java.lang.NoClassDefFoundError: com/sun/jersey/core/util/FeaturesAndProperties
A solução é inserir yarn e copiar as próximas duas perguntas do projeto lib para a lib do flink
hadoop / share / hadoop / yarn / lib / jersey-client-1.9.jar /hadoop/share/hadoop/yarn/lib/jersey-core-1.9.jar
5. Conflito de versão do Scala
java.lang.NoSuchMethodError:scala.collection.immutable.HashSet$.empty()Lscala/collection/
Solução, adicione
import org.apache.flink.api.scala._
6. Nenhum fluxo de retração é usado para relatar um erro
Table is not an append一only table. Use the toRetractStream() in order to handle add and retract messages.
Isso ocorre porque a tabela dinâmica não está no modo apenas anexar, ela precisa ser processada com toRetractStream (retract stream).
tableEnv.toRetractStream[Person](result).print()
7, idéias de resolução 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)
solução:
-
Verifique se o número de slots é suficiente ou se o número de slots alocados é válido
-
Se os paralelos do programa são todos alocados normalmente (haverá tal situação, se 5 paralelos, mas apenas 2 entrem em vigor em alguns pontos e os outros 3 não tenham fluxo de dados)
-
Verifique se o programa flink possui distorção de dados, você pode verificar a quantidade de dados processados por cada subnó de cada partição por meio da interface ui do flink
8. Falha ao analisar o tipo de valor de retorno e relatar um erro
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)
Solução: A razão para esse fenômeno geralmente é que a expressão lambda não tem um tipo de valor de retorno claro ou a estrutura de dados especial flink não consegue analisar seu tipo. Neste momento, precisamos adicionar o tipo de valor de retorno após o método, como Como corda
input.flatMap((Integer number, Collector<String> out) -> {
......
})
// 提供返回值类型
.returns(Types.STRING)
9. Conflito de pacote jar do 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)
Solução: basta remover as dependências relacionadas ao hadoop do arquivo pom
10. O relógio não pode ser iniciado devido a relógio não sincronizado
Um erro é relatado ao iniciar uma tarefa Flink
Caused by: java.lang.RuntimeException: Couldn't deploy Yarn cluster
Em seguida, olhe com atenção e descubra que existe tal frase nele
system times on machines may be out of sync
Isso significa que a hora do sistema na máquina pode não estar sincronizada. Basta sincronizar a hora das máquinas do cluster.