2011-12-29 17 views
8

Estoy haciendo algunas pruebas con nutch y hadoop y necesito una gran cantidad de datos. Quiero comenzar con 20 GB, ir a 100 GB, 500 GB y eventualmente llegar a 1-2 TB.¿Cómo se produce una gran cantidad de datos?

El problema es que no tengo esta cantidad de datos, entonces estoy pensando en maneras de producirlo.

Los datos en sí pueden ser de cualquier tipo. Una idea es tomar un conjunto inicial de datos y duplicarlo. Pero no es lo suficientemente bueno porque necesita archivos que son diferentes el uno del otro (se ignoran los archivos idénticos).

Otra idea es escribir un programa que creará archivos con datos ficticios.

¿Alguna otra idea?

+1

¿Datos de consulta de analitycs de google? – Sephy

+0

Wow, un programa como ese tomaría una buena cantidad de tiempo para funcionar. –

+1

¿Ha considerado generar números aleatorios? –

Respuesta

7

Esta puede ser una mejor pregunta para el sitio StackExchange de estadísticas (ver, por ejemplo, my question on best practices for generating synthetic data).

Sin embargo, si no está tan interesado en las propiedades de los datos como la infraestructura para manipular y trabajar con los datos, puede ignorar el sitio de estadísticas. En particular, si no se centra en los aspectos estadísticos de los datos, y simplemente quiere "grandes datos", entonces podemos centrarnos en cómo se puede generar una gran cantidad de datos.

puedo ofrecer varias respuestas:

  1. Si está interesado solamente en datos numéricos aleatorios, generar un flujo de gran tamaño desde su aplicación favorita del Mersenne Twister. También hay/dev/random (vea this Wikipedia entry for more info). Prefiero un generador de números aleatorios conocido, ya que los resultados pueden reproducirse ad nauseam por cualquier otra persona.

  2. Para datos estructurados, puede buscar mapear números aleatorios en índices y crear una tabla que mapee índices, por ejemplo, cadenas, números, etc., como uno podría encontrar al producir una base de datos de nombres, direcciones, etc. Si tiene una mesa lo suficientemente grande o un objetivo de mapeo suficientemente rico, puede reducir el riesgo de colisiones (por ejemplo, los mismos nombres), aunque tal vez le gustaría tener algunas colisiones, ya que también ocurren en la realidad.

  3. Tenga en cuenta que con cualquier método generativo no necesita almacenar todo el conjunto de datos antes de comenzar su trabajo. Siempre que grabe el estado (por ejemplo, del RNG), puede continuar desde donde lo dejó.

  4. Para datos de texto, puede ver generadores de cadenas aleatorias simples. Puede crear sus propias estimaciones para la probabilidad de cadenas de diferentes longitudes o características diferentes. Lo mismo puede decirse de oraciones, párrafos, documentos, etc., solo decida qué propiedades desea emular, cree un objeto "en blanco" y llénelo con texto.

0

Escribiría un programa simple para hacerlo. El programa no necesita ser demasiado claro ya que la velocidad de escritura en el disco es probable que sea su cuello de botella.

1

Si solo necesita evitar duplicados exactos, podría probar una combinación de sus dos ideas --- crear copias dañadas de un conjunto de datos relativamente pequeño. Las operaciones de "corrupción" pueden incluir: reemplazo, inserción, eliminación e intercambio de caracteres.

0

Casi como el comentario de larga data: Recientemente he ampliado una partición de disco y sé cuánto tiempo puede llevar mover o crear una gran cantidad de archivos. Sería mucho más rápido solicitar al SO un rango de espacio libre en el disco, y luego crear una nueva entrada en la FAT para ese rango, sin escribir un solo bit de contenido (reutilizando la información existente previamente). Esto serviría para su propósito (ya que no le importa el contenido del archivo) y sería tan rápido como eliminar un archivo.

El problema es que esto puede ser difícil de lograr en Java. Encontré una biblioteca de código abierto, llamada fat32-lib, pero como no recurre al código nativo, no creo que sea útil aquí. Para un sistema de archivos dado, y usando un lenguaje de nivel inferior (como C), si tiene el tiempo y la motivación, creo que sería factible.

0

Tenga una mirada en TPC.org, que tienen diferentes puntos de referencia de base de datos con los generadores de datos y consultas predefinidas.

Los generadores tienen un factor de escala que permite definir el tamaño de los datos de destino.

También está el myriad research project (paper) que se centra en la generación de datos distribuidos de "big data". Myriad tiene una curva de aprendizaje empinada, por lo que es posible que tenga que pedir ayuda a los autores del software.

Cuestiones relacionadas