Quindi ho del codice che tenta di trovare una risorsa su HDFS ... se non è lì calcolerà il contenuto di quel file, quindi lo scriverà. E la prossima volta che si accede al lettore può solo guardare il file. Questo serve a prevenire il costoso ricalcolo di certe funzioniCondivisione di una risorsa (file) tra diversi processi Python usando HDFS
Tuttavia ... Ho diversi processi in esecuzione contemporaneamente su macchine diverse nello stesso cluster. SOSPETTO che stanno provando ad accedere alla stessa risorsa e sto colpendo una condizione di competizione che porta un sacco di errori in cui non posso aprire un file o esiste un file ma non può essere letto.
Speriamo che questa linea temporale dimostrerà quello che ritengo il mio problema sia
- Processo A va per accedere risorsa X
- processo A ritrova esiste risorsa X e comincia a scrivere
- Processo B va per accedere risorsa X
- processo A finisce di scrivere risorsa X ... e così via
Ovviamente vorrei che Process B aspetti che il processo A sia fatto con Resource X e lo legga semplicemente quando A è pronto.
Mi vengono in mente alcuni semafori, ma non sono a conoscenza di come utilizzarli in più processi Python su processori separati che guardano la stessa posizione HDFS. Qualsiasi aiuto sarebbe molto apprezzato
AGGIORNAMENTO: Essere clear..process A e B processo finirà calcolo del medesimo uscita esatta (cioè lo stesso nome, con lo stesso contenuto, nella stessa posizione). Idealmente, B non dovrebbe dover calcolarlo. B aspetterebbe A per calcolarlo, quindi leggere l'output una volta che A è terminato. In sostanza, l'intero processo funziona come una "cache a lungo termine" utilizzando HDFS. Dove una determinata funzione avrà una firma di output. Qualsiasi processo che desideri l'output di una funzione determinerà innanzitutto la firma dell'output (questo è fondamentalmente un hash di alcuni parametri di funzione, input, ecc.). Quindi controllerà l'HDFS per vedere se è lì. Se non lo è ... scriverà calcolarlo e scriverlo sull'HDFS in modo che anche altri processi possano leggerlo.
Puoi pubblicare il tuo codice? –
Non è chiaro se i processi A e B riscriveranno la risorsa X, proveranno ad aggiungerli? Si deve scrivere dopo l'altro? –
@SergeBallesta Ho aggiunto un aggiornamento che spero chiarisca la domanda – sedavidw