Resumo dos problemas de desenvolvimento e produção do Flink

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:

  1. Verifique se o número de slots é suficiente ou se o número de slots alocados é válido

  2. 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)

  3. 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.

Acho que você gosta

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