Ho un pezzo di codice che elabora i file,Distribuzione Haskell su un cluster
processFiles :: [FilePath] -> (FilePath -> IO()) -> IO()
Questa funzione genera un processo asincrona che esegue un'azione IO. Questa azione IO deve essere inviata a un cluster tramite un sistema di pianificazione del lavoro (ad esempio Slurm).
Perché devo utilizzare il sistema di pianificazione del lavoro, non è possibile utilizzare cloudHaskell per distribuire la chiusura. Invece il programma scrive un nuovo Main.hs contenente i calcoli desiderati, ovvero copia sul nodo del cluster insieme a tutti i moduli da cui dipende e viene eseguito in remoto con "runhaskell Main.hs [opts]". Quindi il processo asincrono dovrebbe richiedere periodicamente al sistema di pianificazione del lavoro (utilizzando threadDelay) se il lavoro è terminato.
C'è un modo per evitare di creare un nuovo Main? Posso serializzare l'azione IO ed eseguirla in qualche modo nel nodo?
Andrew Cowie e Ozgun Ataman mi hanno suggerito di compilare il programma e spedirlo ai nodi, poiché il binario compilato è autonomo e facile da rsync. Un esempio di ciò sono i programmi Hadoop MapReduce basati su hadron [1] per raggruppare i nodi al lavoro, sviluppati da Ozgun Ataman. [1] https://github.com/soostone/hadron – felipez