Ich mache ein paar Tests mit Nutch und Hadoop und ich brauche eine riesige Menge an Daten. Ich möchte mit 20 GB beginnen, 100 GB, 500 GB und schließlich 1-2 TB erreichen.
Das Problem ist, dass ich nicht über diese Menge an Daten verfüge, also denke ich über Möglichkeiten nach, es zu produzieren.
Die Daten selbst können beliebig sein. Eine Idee besteht darin, eine erste Datenmenge zu nehmen und sie zu duplizieren. Aber es ist nicht gut genug, weil Dateien benötigt werden, die sich voneinander unterscheiden (identische Dateien werden ignoriert).
Eine andere Idee ist, ein Programm zu schreiben, das Dateien mit Dummy-Daten erstellt.
Irgendeine andere Idee?
Dies ist möglicherweise eine bessere Frage für die Statistik-StackExchange-Site (siehe zum Beispiel meine Frage zu Best Practices zur Generierung synthetischer Daten ).
Wenn Sie jedoch nicht so sehr an den Dateneigenschaften interessiert sind, wie die Infrastruktur, mit der Sie Daten bearbeiten und bearbeiten können, können Sie die Statistik-Website ignorieren. Insbesondere, wenn Sie sich nicht auf statistische Aspekte der Daten konzentrieren und nur "Big Data" wollen, können wir uns darauf konzentrieren, wie man einen großen Datenstapel erzeugen kann.
Ich kann mehrere Antworten anbieten:
Wenn Sie nur an zufälligen numerischen Daten interessiert sind, generieren Sie einen großen Stream von Ihrer bevorzugten Implementierung des Mersenne Twisters. Es gibt auch / dev / random (siehe diesen Wikipedia-Eintrag für weitere Informationen ). Ich bevorzuge einen bekannten Zufallszahlengenerator, da die Ergebnisse bis zum Überdruss von jemand anderem reproduziert werden können.
Bei strukturierten Daten können Sie sich die Zuordnung von Zufallszahlen zu Indizes ansehen und eine Tabelle erstellen, die Indizes beispielsweise auf Strings, Zahlen usw. abbildet, wie sie beispielsweise bei der Erstellung einer Datenbank mit Namen und Adressen vorkommen können usw. Wenn Sie eine ausreichend große Tabelle oder ein ausreichend reichhaltiges Mapping-Ziel haben, können Sie das Risiko von Kollisionen (z. B. gleiche Namen) reduzieren, obwohl Sie vielleicht einige Kollisionen haben möchten, wie sie auch in der Realität vorkommen.
Beachten Sie, dass Sie bei jeder generativen Methode nicht den gesamten Datensatz vor Beginn Ihrer Arbeit speichern müssen. Solange Sie den Status (z. B. des RNG) aufzeichnen, können Sie dort weitermachen, wo Sie aufgehört haben.
Für Textdaten können Sie einfache Zufallszeichenfolgengeneratoren betrachten. Sie können eigene Schätzungen für die Wahrscheinlichkeit von Strings unterschiedlicher Länge oder unterschiedlicher Eigenschaften erstellen. Dasselbe gilt für Sätze, Absätze, Dokumente usw. - entscheiden Sie einfach, welche Eigenschaften Sie emulieren möchten, erstellen Sie ein "leeres" Objekt und füllen Sie es mit Text.
Wenn Sie nur exakte Duplikate vermeiden wollen, können Sie eine Kombination Ihrer beiden Ideen ausprobieren - erstellen Sie beschädigte Kopien eines relativ kleinen Datensatzes. "Korruptions" -Operationen könnten beinhalten: Ersetzen, Einfügen, Löschen und Zeichenaustausch.
Ich würde ein einfaches Programm schreiben, um es zu tun. Das Programm muss nicht zu klar sein, da die Geschwindigkeit des Schreibens auf die Festplatte wahrscheinlich Ihr Flaschenhals ist.
Fast schon der lange Kommentar: Ich habe kürzlich eine Festplattenpartition erweitert und ich weiß genau, wie lange es dauern kann, eine große Anzahl von Dateien zu verschieben oder zu erstellen. Es wäre viel schneller, das Betriebssystem einen Bereich von freiem Speicherplatz auf der Festplatte anzufordern und dann einen neuen Eintrag in der FAT für diesen Bereich zu erstellen, ohne ein einzelnes Bit des Inhalts zu schreiben (die zuvor vorhandenen Informationen wiederverwenden). Dies würde Ihrem Zweck dienen (da Sie sich nicht um Dateiinhalte kümmern) und wäre so schnell wie das Löschen einer Datei.
Das Problem ist, dass dies in Java schwierig zu erreichen ist. Ich habe eine Open-Source-Bibliothek mit dem Namen fat32-lib gefunden, die jedoch nicht auf native basiert Code Ich denke nicht, dass es hier nützlich ist. Für ein bestimmtes Dateisystem und eine niedrigere Sprache (wie C), wenn Sie die Zeit und Motivation haben, denke ich, dass es erreichbar wäre.
Schauen Sie sich TPC.org an, sie haben verschiedene Datenbank-Benchmarks mit Datengeneratoren und vordefinierten Abfragen.
Die Generatoren haben einen Skalierungsfaktor, mit dem die Zieldatengröße definiert werden kann.
Es gibt auch das Myriad-Forschungsprojekt ( Papier ), das sich auf die verteilte Datengenerierung" Big Data "konzentriert. Myriad hat eine steile Lernkurve, daher müssen Sie möglicherweise die Autoren der Software um Hilfe bitten.