DAG (grafico aciclico diretto) esecuzione di big data è comune. Mi chiedo come Apache Flink implementa le iterazioni. Perché può essere un grafico ciclico.In che modo Apache Flink implementa le iterazioni?
risposta
Se Flink esegue programmi iterativi, il grafico del flusso di dati non è un DAG ma consente cicli. Tuttavia, questi cicli non sono arbitrari e devono seguire un certo schema per consentire a Flink di controllare questo flusso ciclico in qualche modo.
Spesso non esiste un motivo tecnico rigoroso in altri sistemi per non supportare i cicli. Consentire i cicli in modo generico è solitamente proibito perché potrebbe generare un ciclo infinito (cioè, che una tupla gira il ciclo per sempre e il programma non termina).
Flink traccia il ciclo contando il numero di iterazione. In questo modo, Flink può tenere traccia di quale tupla appartiene a quale iterazione e può ad esempio evitare che le tuple della nuova iterazione "prendano il sopravvento" sulle tuple di una volta. Inoltre, consente a Flink di rilevare se il risultato dell'iterazione n
e n+1
sono uguali o meno. Un risultato uguale indica un calcolo finito che consente a Flink di interrompere il ciclo infinito e di terminare (ciò vale per le cosiddette iterazioni del punto fisso).
Per uno sguardo lettura dettagliata a questo documento di ricerca: https://dl.acm.org/citation.cfm?id=2350245
L'utilizzo di iterazione nel vostro programma è descritto qui: https://ci.apache.org/projects/flink/flink-docs-release-0.10/apis/programming_guide.html#iteration-operators
Tecnicamente, Flink non assegnare un contatore di iterazione per ogni tupla. Esegue invece ogni iterazione e quindi attende che tutti gli elementi siano stati elaborati per questa iterazione. Solo allora, viene avviata la prossima iterazione. –
Aggiornato la mia risposta. Il downvote è abbastanza difficile ... :) –