Soy nuevo en hadoop aquí. No está claro por qué necesitamos poder ordenar por claves mientras usamos hadoop mapreduce? Después de la fase del mapa, necesitamos distribuir los datos correspondientes a cada clave única a un cierto número de reductores. Esto se puede hacer sin tener la necesidad de ordenarlo ¿verdad?¿Dónde se utiliza Sort en la fase MapReduce y por qué?
Respuesta
Está ahí, porque ordenar es un buen truco para agrupar las llaves. Por supuesto, si su trabajo o algoritmo no necesita ningún orden de sus claves, entonces será más rápido agrupar mediante algún truco de hashing.
En el mismo Hadoop, ya existe una JIRA presentada desde hace años (source). Varias otras distribuciones que se superponen a Hadoop ya tienen estas características, Hanborq por ejemplo (lo llaman sort evidance). (source)
A su pregunta real (por qué), MapReduce era inherentemente un documento de Google (source), que establece lo siguiente:
te garantizamos que dentro de una partición dada, el intermedio clave/valor los pares se procesan en orden de clave creciente. Esto garantiza el orden hace que sea fácil de generar un archivo de salida ordenados por partición, que es útil cuando el formato de archivo de salida tiene que apoyar al azar búsquedas acceso eficiente por la clave o usuarios de la salida encuentran conveniente tiene los datos ordenados
Por lo tanto, fue más una decisión conveniente para admitir la ordenación, pero no para permitir intrínsecamente solo ordenar las teclas de grupo.
La "clasificación por clave" se comprende mejor si tenemos en cuenta el hecho de que hadoop DISTRIBUTES procesa para usted mediante el envío de claves diferentes a diferentes máquinas. El (simplificado) versión básica de la idea es la siguiente:
The reducer which a (k,v) pair is sent to = k.hashCode()%num_of_machines.
lo tanto, si mi código hash de clave es 10, y tengo 2 máquinas, la clave será enviada a la máquina # 0, por ejemplo.
Por lo tanto, la clave (en primer lugar) nos brinda una forma simple de distribuir el cálculo.
Además de simplificar la distribución de los cálculos, las claves nos brindan la posibilidad de unir registros de archivos de datos dispares en un único clúster. Así es como podemos hacer cosas como word_count, por ejemplo.
De hecho, si descubre que no necesita llaves --- ¡probablemente tampoco necesite hadoop!
El ejemplo clásico (recuento de palabras):
En el hadoop "recuento de palabras" ejemplo, emitimos llaves (una clave = una palabra) con valores (# veces esa palabra fue visto en un segmento de texto). Esto permite que una función SINGLE reduce reciba una palabra SIMPLE y, por lo tanto, agregue todas las veces que se vio, creando un conteo de palabras preciso.
Por lo tanto, la agregación de claves es lo que permite que la fase de "mapa" se distribuya en varias máquinas de forma independiente.Sin agregar claves para el mismo reductor, en el ejemplo del conteo de palabras, podríamos obtener varios conteos de palabras para una palabra dada, ya que no hay garantía de que un único reductor reciba todos los recuentos de palabras de todos los archivos.
Otro ejemplo:
Ahora ... digamos que tenemos un número de seguridad social como las identificaciones y queremos dar salida a una agregación de datos personales. Digamos que tenemos 2 archivos masivos.
ssn-> nombre de
ssn-> shoe_size
En este caso, podemos aprovechar el poder de agrupación clave, de manera que un nombre de individuos y el tamaño del zapato se envían tanto a la función de reducir MISMO.
El reductor (2) recibirá 2 registros aquí:
ssn-> nombre, shoe_size
La idea aquí es que al escribir map/reduce puestos de trabajo, usted tiene que codificar sus "tuplas" que se emiten de tal manera que se pueden unir de manera significativa, en la fase de reducción. Cualquier entorno informático distribuido probablemente necesite, en algún momento, combinar registros calculados en diferentes nodos. Las claves nos brindan una metodología conveniente y escalable para hacer esto.
Entonces, el hecho de que se garantice que las MISMAS teclas vayan a la MISMA función reductora confirma que CADA reductor para este número de seguridad social en particular recibirá TODOS los datos asociados con ese número, permitiéndonos unir y generar registros de datos que incluyen ssn, nombre y tamaño del zapato.
Conclusión
sin distribuir por la llave, uniéndose a los datos de tal manera que requeriría la lógica dolorosamente complejo que implica algún tipo de intermediario de almacenamiento de datos/almacenamiento en caché. Hadoop simplemente generaliza y abstrae la necesidad común de "unir" los resultados de datos de cómputos paralelos mediante el uso de un paradigma familiar: claves y valores.
- 1. MapReduce y SQL GROUP POR
- 2. ¿Dónde está jQuery .sort() Documentation?
- 3. ¿Por qué Selection Sort no es estable?
- 4. setOnItemLongClickListener y setOnItemClickListener no se activan cuando se utiliza drag-sort-listview (DSLV)
- 5. ¿Por qué se utiliza la exclamación en las URL?
- 6. ¿Para qué se utiliza #pragma?
- 7. ¿Utiliza Qt y por qué lo usa?
- 8. ¿Por qué se utiliza la vista de base de datos?
- 9. ¿Para qué se utiliza la sección COMDAT?
- 10. MapReduce - Cómo se clasifica la salida por valor
- 11. ¿Por qué nadie utiliza INotifyPropertyChanging?
- 12. ¿Por qué se utiliza el copiador en este código?
- 13. ¿Por qué el quicksort es más popular que radix-sort?
- 14. ¿Para qué se utiliza Go?
- 15. ¿Para qué se utiliza Sqlite?
- 16. ¿para qué se utiliza java.lang.reflect.Method.isBridge()?
- 17. ¿Cuál es la diferencia entre sort() y sort.list() en R?
- 18. ¿Para qué se utiliza nbactions.xml?
- 19. ¿Por qué se utiliza FoxPro para sistemas POS?
- 20. ¿Para qué se utiliza `related_name` en Django?
- 21. ¿Por qué obtengo un System.ArgumentException cuando se invoca Sort (IComparer) en una lista?
- 22. ¿Para qué se utiliza LDAP?
- 23. ¿Para qué se utiliza .data.rel.ro?
- 24. ¿Por qué este Linq Cast Fail cuando se utiliza ToList?
- 25. ¿Por qué no se utiliza el índice para esta consulta?
- 26. ¿Para qué se utiliza iframe?
- 27. ¿para qué se utiliza ids.xml?
- 28. ¿Por qué 55 AA se utiliza como la firma de inicio en las PC de IBM?
- 29. ¿Por qué se cuelga este código que utiliza sombreados `let`?
- 30. ¿Para qué se utiliza global.asax?
Gracias Matt por la edición de las fuentes. –
Gracias Thomas! ¡Eso lo explica! – user428900
En mi opinión, hadoop comienza la clasificación inicial en la salida del mapa que se derramó en el disco (la clasificación ocurre justo antes de mover los registros al derrame) posteriormente fusiona la ordenación (relativamente menos costo) y desde el principio las claves se ordenan. Los combinadores que se invocan y las claves clasificadas también ayudan a invocar el reductor, por lo que la clasificación es una buena idea. – Kalai