Как произвести огромное количество данных? - PullRequest
8 голосов
/ 29 декабря 2011

Я провожу некоторые тесты с помощью nutch и hadoop, и мне нужно огромное количество данных. Я хочу начать с 20 ГБ, перейти к 100 ГБ, 500 ГБ и в конечном итоге достичь 1-2 ТБ.

Проблема в том, что у меня нет такого количества данных, поэтому я думаю о способах их получения.

Сами данные могут быть любыми. Одна из идей - взять исходный набор данных и продублировать его. Но его недостаточно, потому что нужны файлы, отличные друг от друга (идентичные файлы игнорируются).

Другая идея - написать программу, которая будет создавать файлы с фиктивными данными.

Есть еще идеи?

Ответы [ 5 ]

7 голосов
/ 31 декабря 2011

Это может быть лучшим вопросом для сайта статистики StackExchange (см., Например, мой вопрос о передовых методах создания синтетических данных ).

Однако, если вас не так интересуют свойства данных, как инфраструктура для манипулирования данными и работы с ними, вы можете игнорировать сайт статистики. В частности, если вы не сосредоточены на статистических аспектах данных и просто хотите «больших данных», тогда мы можем сосредоточиться на том, как можно генерировать большую кучу данных.

Я могу предложить несколько ответов:

  1. Если вы просто заинтересованы в случайных числовых данных, создайте большой поток из вашей любимой реализации Mersenne Twister. Существует также / dev / random (см. эту запись в Википедии для получения дополнительной информации ). Я предпочитаю известный генератор случайных чисел, так как результаты могут быть воспроизведены до тошноты кем-либо еще.

  2. Для структурированных данных вы можете посмотреть на отображение случайных чисел на индексы и создать таблицу, которая сопоставляет индексы, скажем, со строками, числами и т. Д., Что может встретиться при создании базы данных имен, адресов и т. д. Если у вас достаточно большая таблица или достаточно богатая цель сопоставления, вы можете уменьшить риск коллизий (например, с одинаковыми именами), хотя, возможно, вы хотели бы иметь несколько коллизий, поскольку они также случаются в реальности.

  3. Имейте в виду, что при любом генеративном методе вам не нужно сохранять весь набор данных перед началом работы. Пока вы записываете состояние (например, ГСЧ), вы можете выбрать, где остановились.

  4. Для текстовых данных вы можете посмотреть на простые генераторы случайных строк. Вы можете создать свои собственные оценки для вероятности строк различной длины или различных характеристик. То же самое можно сказать о предложениях, абзацах, документах и ​​т. Д. - просто решите, какие свойства вы хотите эмулировать, создайте «пустой» объект и заполните его текстом.

1 голос
/ 29 декабря 2011

Если вам нужно только избежать точных дубликатов, вы можете попробовать комбинацию двух ваших идей - создать поврежденные копии относительно небольшого набора данных.Операции «порчи» могут включать: замену, вставку, удаление и замену символов.

0 голосов
/ 03 января 2014

Взгляните на TPC.org , они имеют разные тесты базы данных с генераторами данных и предопределенными запросами.

Генераторы имеют масштабный коэффициент, который позволяет определить целевой размер данных.

Существует также множество исследовательских проектов ( paper ), которые направлены на генерацию распределенных данных "больших данных". У Myriad крутая кривая обучения, поэтому вам, возможно, придется обратиться за помощью к авторам программного обеспечения.

0 голосов
/ 29 декабря 2011

Просто о долгом комментарии: я недавно расширил раздел диска, и я хорошо знаю, сколько времени может потребоваться для перемещения или создания большого количества файлов. Было бы гораздо быстрее запросить у ОС диапазон свободного места на диске, а затем создать новую запись в FAT для этого диапазона, не записывая ни единого бита контента (повторно используя ранее существующую информацию). Это будет соответствовать вашим целям (поскольку вам не важно содержимое файла) и будет таким же быстрым, как удаление файла.

Проблема в том, что этого может быть трудно достичь в Java. Я нашел библиотеку с открытым исходным кодом, названную fat32-lib , но, поскольку она не использует нативный код, я не думаю, что она здесь полезна. Для данной файловой системы и использования языка более низкого уровня (например, C), если у вас есть время и мотивация, я думаю, это было бы достижимо.

0 голосов
/ 29 декабря 2011

Я бы написал простую программу для этого.Программа не должна быть чёткой, так как скорость записи на диск, скорее всего, станет для вас проблемой.

...