2010-07-19 10 views
5

En Hadoop puede usar el mecanismo de clasificación secundaria para ordenar los valores antes de enviarlos al reductor.¿Qué clase de tecla es adecuada para el tipo secundario?

La forma en que esto se hace en Hadoop es que agrega el valor para ordenar por la clave y luego tiene algunos métodos personalizados de comparación de grupos y claves que se enganchan en el sistema de clasificación.

Por lo tanto, deberá tener una clave que consista básicamente en la clave real y el valor para ordenar. Para hacer que esto funcione lo suficientemente rápido, necesitaré una forma de crear una clave compuesta que también sea fácil de descomponer en las partes separadas que se necesitan para los métodos de comparación de claves y grupos.

¿Cuál es la forma más inteligente de hacerlo? ¿Hay una clase Hadoop "lista para usarse" que me pueda ayudar en esto o tengo que crear una clase de clave separada para cada paso de reducción de mapa?

¿Cómo hago esto si la clave en realidad es un compuesto que consta de varias partes (también se necesita por separado debido a la particionador)?

¿Qué chicos me recomiendan?

P.S. Quería agregar la etiqueta "secundaria-clasificación" pero todavía no tengo suficiente representante para hacerlo.

+1

ahi tienes (agregue la etiqueta) :-) –

+0

Gracias por agregar la etiqueta :) –

+0

No entendí bien tu pregunta, ¿te importaría agregar un pequeño ejemplo? – Sudarshan

Respuesta

0

Es necesario cambiar las teclas de dirección reparticionan y agrupados, y thisbasicakly significa que se pone más de 1 tipo de datos de claves, toda reemplazando el método de comparación para la separación y la agrupación ....

-Usted puede serializar/deserializar sus claves, y tratar con los datos de entrada como objetos o frijoles si lo desea fuertemente tipeado, código robusto para la clasificación secundaria ...

-para escenarios más simples, simplemente ponga un signo "#" entre ¡Los valores!

Hay un gran artículo de alto nivel sobre esto aquí:

http://pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/

1

yo estaba corriendo en esta situación todo el tiempo y cansando de escribir las clases de teclas personalizadas compuestas. Escribí una clase Tuple genérica que es una lista de objetos y puede actuar como una clave compuesta. La lista puede contener un número arbitrario de objetos de tipos de envoltura primitivos de Java. Implementa WritableComparable. La fuente se puede ver aquí

https://github.com/pranab/chombo/blob/master/src/main/java/org/chombo/util/Tuple.java

0

tuviera una situación en la que tuve que ordenar los datos en dos columnas, una era de tipo cadena y otro era de tipo entero. Escribí mi WritableComparable personalizado, y en el método compareTo escribí mi lógica. En realidad, es una mejor manera desde mi punto de vista, ya que podemos personalizar nuestra lógica de clasificación.

Cuestiones relacionadas