2010-08-06 9 views
17

Hace poco hablé con alguien que trabaja para Amazon y me preguntó: ¿Cómo haría para ordenar terabytes de datos usando un lenguaje de programación?¿Alguien realmente ordena los terabytes de datos?

Soy un chico de C++ y, por supuesto, hablamos sobre el tipo de fusión y una de las posibles técnicas es dividir los datos en un tamaño más pequeño y ordenarlos y fusionarlos finalmente.

Pero, en realidad, ¿las empresas como Amazon o eBay clasifican los terabytes de datos? Lo sé, almacenan toneladas de información, pero ¿las clasifican?

En pocas palabras, mi pregunta es: ¿por qué no deberían mantenerlos ordenados en primer lugar, en lugar de ordenar terabytes de datos?

+1

Para muchas organizaciones, un terabyte no es una gran cantidad de datos. No vaya a una reunión de grupo de usuarios de Oracle y hable sobre su gran base de datos de terabytes. Esto es definitivamente un cambio con respecto a hace diez años, cuando la gente generalmente pensaba que un terabyte era grande. –

+0

Gracias a las respuestas fabulosas para este de todos en el mundo. Realmente sorprendido por la comunidad de Stackoverflow. – user373215

+0

Ejecuté un rastreador web que, en su punto más alto, clasificaba regularmente dos terabytes de datos. Y esa fue una operación bastante pequeña en comparación con una compañía como Amazon o Google. –

Respuesta

6

Sí, algunas empresas ciertamente clasifican al menos esa cantidad de datos todos los días.

Google tiene un marco llamado MapReduce que divide el trabajo (como una ordenación por fusión) en diferentes cuadros y maneja las fallas de hardware y red sin problemas.

Hadoop es un proyecto similar de Apache que puede jugar consigo mismo, para permitir la división de un algoritmo de clasificación en un grupo de computadoras.

+0

Dean, ¿trabajas para Google? ¿Cómo manejan errores y fallas de red? Eso suena emocionante proyecto para desarrollar. – user373215

+0

Quiero decir, si hay un error, ¿otro hilo/proceso toma el relevo de donde lo dejó, etc.? – user373215

+0

eche un vistazo a apache hadoop, hacen checkpoint y replicación para manejar fallas –

11

Pero, en realidad, hace empresas como Amazon/Ebay, ordenar terabytes de datos? I saber, almacenan toneladas de información, pero clasificarlos ???

Sí. La última vez que revisé Google procesóover 20 petabytes de datos diariamente.

Por qué no habría que mantenerlos ordenados en el primer lugar en lugar de la clasificación terabytes de datos, es mi pregunta en pocas palabras .

EDITAR: relet hace un muy buen punto; solo necesita mantener índices y tenerlos ordenados. Puede recuperar fácilmente y de manera eficiente los datos de clasificación de esa manera. No tiene que ordenar todo el conjunto de datos.

+0

Estoy de acuerdo. Pero la duda es ordenar tantos datos de una vez, ¿por qué alguien lo haría? – user373215

+0

+1. Recientemente, un equipo de programadores pudo ordenar 1 terabyte en 1 minuto. – Fosco

+1

¿Quizás quiere que los datos existentes se clasifiquen según un criterio nuevo o modificado? –

3

Cada índice de base de datos es una representación ordenada de alguna parte de sus datos. Si lo indicas, clasificas las claves, incluso si no necesariamente reordenas todo el conjunto de datos.

1

Los conjuntos de datos científicos se pueden ejecutar fácilmente en terabytes. Puede ordenarlos y almacenarlos de una manera (por fecha) cuando reúne los datos. Sin embargo, en algún momento alguien querrá que los datos se clasifiquen por otro método, p. por latitud si está usando datos sobre la Tierra.

7

Tenga en cuenta los datos de registro de los servidores, Amazon debe tener una gran cantidad de datos. Los datos de registro generalmente se almacenan a medida que se reciben, es decir, se ordenan según el tiempo. Por lo tanto, si lo quiere ordenado por producto, debería ordenar todo el conjunto de datos.

Otro problema es que muchas veces los datos deben ordenarse de acuerdo con los requisitos de procesamiento, que pueden no conocerse de antemano.

Por ejemplo: aunque no es un terabyte, recientemente ordené alrededor de 24 GB de datos de red del seguidor de Twitter utilizando el tipo de fusión. La implementación que utilicé fue del profesor Dan Lemire.

http://www.daniel-lemire.com/blog/archives/2010/04/06/external-memory-sorting-in-java-the-first-release/

Los datos fueron ordenados según la ID de usuario y cada línea contenían ID de usuario seguido de ID de usuario de la persona que lo está siguiendo. Sin embargo, en mi caso, quería datos sobre quién sigue a quién. Por lo tanto, tuve que ordenarlo de nuevo por el segundo ID de usuario en cada línea.

Sin embargo, para ordenar 1 TB usaría map-reduce usando Hadoop. Ordenar es el paso predeterminado después de la función de mapa. Por lo tanto, elegiría la función de mapa como identidad y NINGUNO como función de reducción y configuración de trabajos de transmisión.

Hadoop usa HDFS que almacena datos en bloques grandes de 64 MB (este valor se puede cambiar). Por defecto, ejecuta un solo mapa por bloque. Después de ejecutar la función de mapa, la salida del mapa se ordena, supongo que por un algoritmo similar a merge sort.

Aquí está el enlace al asignador de identidades: http://hadoop.apache.org/common/docs/r0.16.4/api/org/apache/hadoop/mapred/lib/IdentityMapper.html

Si desea ordenar por un elemento en el que los datos entonces yo haría ese elemento clave en XXX y la línea como valor de salida del mapa .

3

Sí. Algunas empresas lo hacen. O tal vez incluso personas. Puede tomar operadores de alta frecuencia como ejemplo. Algunos de ellos son bien conocidos, dice Goldman Sachs. Ejecutan algoritmos muy sofisticados contra el mercado, teniendo en cuenta los datos de marcado de los últimos años, que son todos los cambios en la oferta de precios, los precios reales (transacciones AKA como impresiones), etc. Para instrumentos altamente volátiles, como las acciones , futuros y opciones, hay gigabytes de datos todos los días y tienen que realizar investigaciones científicas sobre datos para miles de instrumentos en los últimos años. Sin mencionar las noticias de que se correlacionan con el mercado, las condiciones climáticas e incluso la fase lunar. Entonces, sí, hay tipos que clasifican los terabytes de datos. Tal vez no todos los días, pero aún así lo hacen.

0

Las grandes empresas clasifican regularmente tera y petabytes de datos. He trabajado para más de una compañía. Como dijo Dean J, las empresas confían en los marcos creados para manejar tales tareas de manera eficiente y consistente. Por lo tanto, los usuarios de los datos no necesitan implementar su propia clasificación. Pero las personas que construyeron el marco tuvieron que descubrir cómo hacer ciertas cosas (no solo clasificar, sino extraer claves, enriquecer, etc.) a gran escala. A pesar de todo eso, puede haber situaciones en las que necesite implementar su propia clasificación. Por ejemplo, recientemente trabajé en un proyecto de datos que involucraba procesar archivos de registro con eventos provenientes de aplicaciones móviles. Para las políticas de seguridad/privacidad, ciertos campos en los archivos de registro deben ser encriptados antes de que los datos puedan ser trasladados para su posterior procesamiento. Eso significaba que para cada fila, se aplicaba un algoritmo de cifrado personalizado. Sin embargo, dado que la relación de cifrado a eventos era alta (el mismo valor de campo aparece cientos de veces en el archivo), era más eficiente ordenar primero el archivo, encriptar el valor y guardar en caché el resultado para cada valor repetido.

Cuestiones relacionadas