Questa domanda sembra facile, ma non sono in grado di comprendere il vero lavoro che sta dietro. So che la gente dirà, scomporre in pezzi da 512 Meg e ordinarli come usando Unisci Ordina usando Riduci mappa.Ordina file 1TB su macchina con 1 GB di RAM
Quindi, ecco la domanda reale che ho:
Supponiamo che io rompere il file in 512 mega pezzo e poi inviare a diverse macchine host per ordinare loro. si supponga che queste macchine abbiano utilizzato l'Unisci ordinamento. Ora diciamo che avevo 2000 macchine ciascuna ordinate 2000, 512 mega di chunk. Ora quando li unisco di nuovo, come funziona? Le dimensioni non aumenteranno di nuovo? Ad esempio, l'unione di due 512 mega farà 1024 meg che è la dimensione della mia RAM, quindi come funzionerebbe? Qualsiasi macchina non può unire un chunk di più di 512 mega di chunk con un altro chunk perché poi la dimensione> 1 GB.
Come alla fine della fusione potrò mai unire due blocchi da 0,5 TB con un altro chunk da 0,5 TB. Il concetto di memoria virtuale entra in gioco qui?
Sono qui per chiarire le mie basi e spero di porre questa domanda molto importante (correttamente) correttamente. Inoltre, chi dovrebbe fare questo unire (dopo l'ordinamento)? La mia macchina o alcune di quelle macchine del 2000?
Si esaurisce la memoria solo se si tenta di conservare il/i file/i in memoria. Una volta suddiviso il file e ordinato ogni blocco, è sufficiente tenere una riga di ciascun file in memoria mentre li si unisce/li scrive in un nuovo file. –
L'ordinamento unione è uno dei miei algoritmi preferiti. Così semplice da capire e così utile. –
BTW, è possibile farlo utilizzando solo 2 passaggi di lettura/scrittura sull'intero dataset. (4 TB di I/O totali) Salterò i dettagli in quanto è molto complicato, ma utilizza lo stesso approccio degli algoritmi FFT fuori dal core. – Mysticial