如何生成海量数据?

我正在用nutch和hadoop做一些测试,我需要大量的数据。 我想从20GB开始,到100GB,500GB,最终达到1-2TB。

问题是我没有这么多的数据,所以我正在考虑如何制作它。

数据本身可以是任何类型。 一个想法是获取一组初始数据并复制它。 但它不够好,因为需要彼此不同的文件(相同的文件被忽略)。

另一个想法是编写一个程序,用于创建具有虚拟数据的文件。

还有其他想法吗?

对于统计StackExchange站点,这可能是一个更好的问题(例如,请参阅我关于生成合成数据的最佳实践的问题 )。

但是,如果您对作为操作和处理数据的基础结构的数据属性不太感兴趣,那么您可以忽略统计信息站点。 特别是,如果您不关注数据的统计方面,只想要“大数据”,那么我们可以专注于如何生成大量数据。

我可以提供几个答案:

  1. 如果您只对随机数字数据感兴趣,请从您最喜欢的Mersenne Twister实现生成一个大流。 还有/ dev / random( 有关更多信息,请参阅此Wikipedia条目 )。 我更喜欢一个已知的随机数生成器,因为结果可以被其他人恶心再现。

  2. 对于结构化数据,您可以查看将随机数映射到索引并创建一个将索引映射到字符串,数字等的表,例如在生成名称,地址等数据库时可能遇到的情况。如果您有一个足够大的表或一个足够丰富的映射目标,你可以降低碰撞的风险(例如同名),虽然你可能想要发生一些碰撞,因为这些碰撞也会在现实中发生。

  3. 请记住,使用任何生成方法,您无需在开始工作之前存储整个数据集。 只要您记录状态(例如RNG),您就可以从中断的地方继续。

  4. 对于文本数据,您可以查看简单的随机字符串生成器。 您可以为不同长度或不同特征的字符串的概率创建自己的估计值。 对于句子,段落,文档等也可以这样做 – 只需确定您要模拟的属性,创建“空白”对象,并用文本填充它。

如果您只需要避免完全重复,您可以尝试将两个想法结合起来 – 创建相对较小的数据集的损坏副本。 “腐败”操作可能包括:替换,插入,删除和字符交换。

我会写一个简单的程序来做。 该程序不需要太清楚,因为写入磁盘的速度可能是你的瓶颈。

差不多长时间评论:我最近扩展了一个磁盘分区,我知道移动或创建大量文件需要多长时间。 要求操作系统在磁盘上提供一系列可用空间,然后在FAT中为该范围创建一个新条目,而不写入一些内容(重用以前存在的信息)会快得多。 这将满足您的目的(因为您不关心文件内容),并且与删除文件一样快。

问题是在Java中可能很难实现。 我找到了一个名为fat32-lib的开源库,但由于它不依赖于本机代码,所以我认为它不是很有用。 对于给定的文件系统,并使用较低级别的语言(如C),如果您有时间和动力,我认为这是可以实现的。

看看TPC.org ,他们有不同的数据库基准,包括数据生成器和预定义查询。

生成器具有缩放因子,允许定义目标数据大小。

还有无数的研究项目 ( 论文 )专注于分布式“大数据”数据生成。 Myriad有一个陡峭的学习曲线,所以你可能不得不向软件的作者寻求帮助。