Hadoop用于处理非常大的二进制文件

时间:2011-03-08 08:03:08

标签: hadoop mapreduce hdfs cluster-computing

我有一个我希望分发的系统,我希望以分布式方式处理许多非常大的不可拆分二进制文件。这些是几百Gb的量级。由于各种固定的,特定于实现的原因,这些文件不能并行处理,而是必须通过相同的过程顺序处理直到最后。

该应用程序是用C ++开发的,所以我会考虑使用Hadoop管道来输入和输出数据。每个实例都需要按顺序处理其自身数据(当前存储在一个文件中)的100Gb到200Gb的顺序,并且应用程序当前(可能)IO受限,因此每个作业完全在本地运行非常重要。

我非常热衷于使用HDFS来托管这些数据 - 在添加新节点时自动维护冗余副本和重新平衡的能力将非常有用。我也热衷于map reduce,因为它简单的计算以及尽可能接近数据来托管计算的要求。但是,我想知道Hadoop对于这个特定的应用程序是多么合适。

我知道,为了表示我的数据,可以生成不可拆分的文件,或者生成大量的序列文件(在我的情况下,对于单个文件,这些文件大小为10Tb - 我应该打包所有文件我的数据变成一个)。因此,可能使用Hadoop处理我的数据。然而,似乎我的模型不适合Hadoop:社区是否同意?或者建议最佳地铺设这些数据?或者甚至可以更好地适应模型的其他集群计算系统?

这个问题可能与hadoop上的现有问题重复,但除了我的系统每个文件需要一个数量级或两个以上的数据(之前我已经看到了关于几个Gb的单个文件的问题)在尺寸方面)。如果之前已经回答过,请原谅我 - 即使是这样大小的数据。

谢谢,

亚历

2 个答案:

答案 0 :(得分:4)

您似乎正在使用相对较少数量的大文件。由于您的文件很大且不可拆分,因此Hadoop在整个群集中有效地安排和分配作业时会遇到问题。我认为您在一个批处理(例如数百个)中处理的文件越多,使用Hadoop就越有价值。

由于您只使用了一些文件,您是否尝试过更简单的分发机制,例如使用ssh或GNU Parallel在多台计算机上启动进程?我使用这种方法完成了简单的任务,取得了很大的成功。在所有节点上使用NFS安装的驱动器可以共享限制您必须执行的复制量。

答案 1 :(得分:2)

你可以为你的文件编写一个自定义的InputSplit,但是因为bajafresh4life说它不是很理想,因为除非你的HDFS块大小与你的文件大小相同,否则你的文件会四处传播并且会有网络开销。或者,如果您确实使HDFS大小与文件大小相匹配,那么您将无法获得所有群集磁盘的好处。最重要的是,Hadoop可能不是最好的工具。