8

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

问题是我没有这么多的数据,所以我在想办法产生它。

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

另一个想法是编写一个程序来创建带有虚拟数据的文件。

还有什么想法吗?

4

5 回答 5

7

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

但是,如果您对数据属性不那么感兴趣,而不是对数据进行操作和使用的基础设施,那么您可以忽略统计站点。特别是,如果您不关注数据的统计方面,而只是想要“大数据”,那么我们可以专注于如何生成一大堆数据。

我可以提供几个答案:

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

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

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

  4. 对于文本数据,您可以查看简单的随机字符串生成器。您可以为不同长度或不同特征的字符串的概率创建自己的估计。句子、段落、文档等也是如此 - 只需决定要模拟哪些属性,创建一个“空白”对象,然后用文本填充它。

于 2011-12-31T16:22:18.440 回答
1

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

于 2011-12-29T13:10:44.100 回答
0

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

于 2011-12-29T13:02:27.783 回答
0

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

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

于 2011-12-29T13:52:45.797 回答
0

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

生成器具有允许定义目标数据大小的比例因子。

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

于 2014-01-03T10:57:45.927 回答