Sono un nuovo arrivato qui. Non è chiaro il motivo per cui dobbiamo essere in grado di ordinare per chiavi durante l'utilizzo di hanoop mapreduce? Dopo la fase della mappa, dobbiamo distribuire i dati corrispondenti a ciascuna chiave univoca a un certo numero di riduttori. Questo può essere fatto senza aver bisogno di ordinarlo correttamente?Dove si trova l'ordinamento utilizzato nella fase MapReduce e perché?
risposta
È lì, perché l'ordinamento è un trucchetto per raggruppare le chiavi. Ovviamente, se il tuo lavoro o l'algoritmo non ha bisogno di alcun ordine delle tue chiavi, allora sarai più veloce da raggruppare per qualche trucco di hashing.
Nella stessa Hadoop, esiste già una JIRA depositata per questo da anni (source). Diverse altre distribuzioni che si trovano su Hadoop hanno già queste caratteristiche, ad esempio Hanborq (lo chiamano evitamento di specie). (source)
Alla tua domanda effettiva (Perché), MapReduce era intrinsecamente un documento da parte di Google (source) in cui si afferma quanto segue:
vi possiamo garantire che all'interno di una determinata partizione, l'intermedio chiave/valore le coppie vengono elaborate in ordine crescente di chiave. Questa garanzia ordinamento rende facile per generare un file di output ordinato per partizione, che è utile quando il formato del file di output deve supportare casuali le ricerche di accesso efficienti chiave, o utenti dell'uscita trovare conveniente avere i dati ordinati.
Quindi è stata più una decisione di supporto supportare l'ordinamento, ma non solo per consentire automaticamente l'ordinamento per raggruppare le chiavi.
L'ordinamento per chiave è meglio compreso se consideriamo il fatto che hadoop DISTRIBUTES processi per voi inviando chiavi diverse a macchine diverse. La versione base (semplificata) del l'idea è questa:
The reducer which a (k,v) pair is sent to = k.hashCode()%num_of_machines.
Quindi, se hashcode di mia chiave è 10, e ho 2 macchine, la chiave verrà inviato macchina # 0, per esempio.
Quindi, la chiave ci (prima) ci fornisce un modo semplice per distribuire il calcolo.
Oltre a semplificare la distribuzione del calcolo, le chiavi ci consentono di unire record da file di dati disparati in un unico cluster. Questo è il modo in cui possiamo fare cose come il conteggio delle parole, per esempio.
Infatti, se stai scoprendo che non hai bisogno delle chiavi --- probabilmente non hai bisogno nemmeno di hadoop!
L'esempio classico (numero di parole):
Nel Hadoop "parola count" esempio, emettiamo chiavi (una chiave = una sola parola) con valori (# volte questa parola è stato visto in un segmento di testo). Ciò consente a una funzione di riduzione SINGLE di ricevere una sola parola, e quindi di aggiungere tutte le volte che è stata vista, creando un conteggio accurato delle parole.
Quindi, l'aggregazione di chiavi è ciò che consente di distribuire la fase "mappa" su più macchine in modo indipendente.Senza aggregare le chiavi allo stesso riduttore, nell'esempio del conteggio delle parole, potremmo ottenere diversi conteggi di parole per una determinata parola, poiché non c'è garanzia che un singolo riduttore riceverebbe tutti i conteggi di parole da tutti i file.
Un altro esempio:
Ora ... Diciamo che abbiamo i numeri di previdenza sociale come ids e vogliamo uscita un'aggregazione dei dati personali. Diciamo che abbiamo 2 file enormi.
ssn-> nome
ssn-> shoe_size
In questo caso, si può sfruttare la potenza di raggruppamento chiave, in modo che un nome individui e numero di scarpa sono entrambi inviati alla funzione ridurre STESSO.
Il riduttore (2) riceveranno 2 record qui:
ssn-> nome, shoe_size
L'idea è che quando si scrive mappa/ridurre i posti di lavoro, è necessario codificare i "tuple", che vengono emessi in modo tale da poter essere uniti in modo significativo, nella fase di riduzione. Qualsiasi ambiente di calcolo distribuito probabilmente, a un certo punto, dovrà combinare record calcolati in nodi diversi. Le chiavi ci danno una metodologia conveniente e scalabile per farlo.
Quindi - il fatto che siamo sicuri che i tasti SAME passino alla funzione di riduttore SAME conferma che OGNI riduttore per questo particolare numero di sicurezza sociale riceverà TUTTI i dati associati a quel numero, permettendoci di unire e produrre record di dati che includono ssn, nome e dimensione della scarpa.
Conclusione
senza distribuire tramite chiave, unendo i dati in modo richiederebbe logica dolorosamente complesso che coinvolge una sorta di intermediario dati archiviazione/caching. Hadoop semplicemente generalizza e astrae la necessità comune di "unire" i risultati dei dati da calcoli paralleli usando un pardigma familiare: chiavi e valori.
- 1. Dove si trova jarsigner?
- 2. Dove si trova ImmutableArray?
- 3. Dove si trova Boost.Process?
- 4. Dove si trova LocalFileSystem.PERSISTENT?
- 5. Dove si trova "ListViewItemPlaceholderBackgroundThemeBrush"?
- 6. Dove si trova Microsoft.WindowsAzure.Diagnostics?
- 7. Dove si trova erase_if?
- 8. Dove si trova MsDeployPublish?
- 9. Dove si trova HttpContent.ReadAsAsync?
- 10. Dove si trova Microsoft.Deployment.WindowsInstaller?
- 11. Dove si trova tools.jar?
- 12. Dove si trova System.Windows.Threading.DispatcherTimer?
- 13. Dove si trova "tableClient.CreateTableIfNotExist" nella libreria di AzureStorage v2?
- 14. CUDA cutil.h dove si trova?
- 15. Dove si trova VPERMB in AVX2?
- 16. Dove si trova l'interprete Ruby?
- 17. Dove si trova l'annotazione @Transactional?
- 18. Dove si trova GOTO: EOF?
- 19. Dove si trova Visual Studio 2005 Express?
- 20. Quale funzione e dove si trova $ this-> getPriceHtml()?
- 21. Dove si trova "PFFacebookUtils.framework" sul repository CocoaPods?
- 22. Dove si trova session.id in Play 2.0?
- 23. Dove si trova il cookie .ASPXAUTH
- 24. Dove si trova l'oggetto lanciato in C++?
- 25. Dove si trova cordova-2.7.0.jar?
- 26. Dove si trova la sua tabella?
- 27. Dove si trova Xcode sul disco rigido?
- 28. Dove si trova git mv in SourceTree?
- 29. Dove si trova SqliteDataReader in sqlite-net?
- 30. Dove si trova il repository source mercurial.hg
Grazie Matt per la modifica delle fonti. –
Grazie Thomas! Questo lo spiega! – user428900
A mio avviso, hadoop inizia l'ordinamento iniziale con l'output della mappa che viene versato nel disco (l'ordinamento avviene prima di spostare i record per lo sversamento) successivamente unisce l'ordinamento (relativamente meno costo), e poiché dall'inizio le chiavi sono ordinate, aiuta anche i combinatori da invocare e anche le chiavi ordinate aiutano quando si richiama il riduttore, quindi l'ordinamento è una buona idea. – Kalai