2015-04-21 19 views
23

Qualcuno potrebbe confrontare Flink e Spark come piattaforme per l'apprendimento automatico? Quale è potenzialmente migliore per gli algoritmi iterativi? Collegamento alla discussione generale Flink vs Spark: What is the difference between Apache Spark and Apache Flink?Apache Flink vs Apache Spark come piattaforme per l'apprendimento automatico su larga scala?

+1

Flink è un progetto relativamente giovane ed è difficile confrontare questo nuovo promettente quadro con un progetto così gigantesco come Spark. – ipoteka

+0

Non risponderò a questa domanda ora perché avremo uno sguardo più approfondito nel prossimo futuro su entrambi i framework ML. Per ora sono totalmente d'accordo con @ipoteka. –

+2

Dovresti controllare la libreria di apprendimento automatico recentemente creata da Flink: http://ci.apache.org/projects/flink/flink-docs-master/libs/ml/. Come potete vedere qui, abbiamo programmato di fare molto di più: http://goo.gl/h9Qmt3 –

risposta

22

Disclaimer: Sono un membro PMC di Apache Flink. La mia risposta si concentra sulle differenze di esecuzione delle iterazioni in Flink e Spark.

Apache Spark esegue le iterazioni mediante lo srotolamento del ciclo. Ciò significa che per ogni iterazione è pianificata ed eseguita una nuova serie di attività/operatori. Spark lo fa in modo molto efficiente perché è molto valido per la pianificazione delle attività a bassa latenza (lo stesso meccanismo è utilizzato per Spark streaming btw) e memorizza i dati nella cache attraverso le iterazioni. Pertanto, ogni iterazione opera sul risultato della precedente iterazione che viene tenuta in memoria. In Spark, le iterazioni sono implementate come loop regolari (vedere Logistic Regression example).

Flink esegue i programmi con iterazioni come flussi di dati ciclici. Ciò significa che un programma di flusso di dati (e tutti i suoi operatori) è programmato una sola volta e i dati vengono inviati dalla coda di un'iterazione alla sua testa. Fondamentalmente, i dati fluiscono in cicli attorno agli operatori all'interno di un'iterazione. Poiché gli operatori sono appena programmati una volta, possono mantenere uno stato su tutte le iterazioni. L'API di Flink offre due funzioni dedicate a iteration operators per specificare iterazioni: 1) iterazioni di massa, concettualmente simili allo srotolamento del ciclo e 2) delta iterations. Le iterazioni delta possono velocizzare in modo significativo alcuni algoritmi perché il lavoro in ciascuna iterazione diminuisce con l'aumentare del numero di iterazioni. Ad esempio la decima iterazione di un'implementazione del PageRank con iterazione delta completa molto più velocemente della prima iterazione.

+0

Grazie per la spiegazione! Ho capito bene che Flink può conservare lo stato e gli operatori sui nodi worker tra le iterazioni? Questo significa potenzialmente meno overhead sull'iterazione rispetto a Spark che invia l'attività ogni nuova iterazione? – Alexander

+4

Sì, Flink manterrà gli operatori sui lavoratori in esecuzione (in modo da poter mantenere facilmente lo stato tra le iterazioni). E con questo, risparmia tempo nel ridistribuire i compiti per ogni iterazione. In particolare con la funzione di iterazione delta Fabian menzionata, le iterazioni (su piccole parti dei dati) che possono essere eseguite solo per pochi secondi sono possibili. –

+0

Sembra buono! Quanto è lungo il sovraccarico fisso in Flink per ogni iterazione? Ordine di 0,1 sec? meglio? Supponiamo che l'algoritmo non stia facendo nulla, semplicemente itera. – Alexander