what true the purpose pig following ecosystem duty datanodes and about hadoop mapreduce mrjob

purpose - what is true about pig and hive in relation to the hadoop ecosystem?



¿Cómo funciona mapreduce sort and shuffle? (4)

Estoy usando la biblioteca de yelps MRJob para lograr la funcionalidad map-reduce. Sé que map reduce tiene un algoritmo interno de ordenación y mezcla que ordena los valores en función de sus claves. Entonces, si tengo los siguientes resultados después de la fase del mapa

(1, 24) (4, 25) (3, 26)

Sé que la fase de ordenar y mezclar producirá la siguiente salida

(1, 24) (3, 26) (4, 25)

Que es como se esperaba

Pero si tengo dos claves similares y valores diferentes, ¿por qué la fase de ordenar y mezclar ordena los datos sobre la base del primer valor que aparece?

Por ejemplo, si tengo la siguiente lista de valores de mapper

(2, <25, 26>) (1, <24, 23>) (1, <23, 24>)

El resultado esperado es

(1, <24, 23>) (1, <23, 24>) (2, <25, 26>)

Pero el resultado que obtengo es

(1, <23, 24>) (1, <24, 23>) (2, <25, 26>)

¿Es esta biblioteca MRjob específica? ¿Hay alguna forma de detener esta clasificación en base a los valores?

CÓDIGO

from mrjob.job import MRJob import math class SortMR(MRJob): def steps(self): return [ self.mr(mapper=self.rangemr, reducer=self.rangesort)] def rangemr(self, key, line): for a in line.split(): yield 1,a def rangesort(self,numid,line): for a in line: yield(1, a) if __name__ == ''__main__'': SortMR.run()


El MRjob local solo usa el sistema operativo ''ordenar'' en la salida del mapeador.

El mapeador escribe en el formato:

clave <-tab-> valor / n

Por lo tanto, terminas con las claves clasificadas principalmente por clave, pero secundariamente por valor.

Como se señaló, esto no ocurre en la versión real de hadoop, solo la simulación "local".


La única forma de ''ordenar'' los valores es usar una clave compuesta que contenga cierta información del valor mismo. El método compareToTo de su clave puede garantizar que las claves se clasifiquen primero por el componente de clave real y luego por el componente de valor. Finalmente, necesitará un particionador de grupo para asegurarse de que en el reductor todas las claves con el mismo componente de "clave" (la clave real) se consideran iguales, y los valores asociados se repiten en una llamada al método de reducción.

Esto se conoce como un "tipo secundario", una pregunta similar a esta proporciona algunos enlaces a ejemplos.


La fase de ordenar y mezclar no garantiza el orden de los valores que el reductor obtiene para una clave determinada.


Sort in hadoop está basado en claves y, por lo tanto, no garantiza el orden de los valores.