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

标签 hadoop mapreduce hdfs cluster-computing

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

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

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

我知道为了表示我的数据,可以生成不可分割的文件,或者生成巨大的序列文件(在我的例子中,单个文件的大小约为 10Tb - 我应该打包所有文件吗?我的数据合二为一)。因此,可能使用 Hadoop 处理我的数据。然而,我的模型似乎不太适合 Hadoop:社区是否同意?或者有关于如何以最佳方式布置这些数据的建议?或者甚至是其他可能更适合该模型的集群计算系统?

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

谢谢,

亚历克斯

最佳答案

看起来您处理的大文件数量相对较少。由于您的文件很大且不可拆分,因此 Hadoop 将难以在集群中有效地调度和分发作业。我认为您在一批中处理的文件越多(例如数百个),使用 Hadoop 的值(value)就越大。

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

关于Hadoop 用于处理非常大的二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5229864/

相关文章:

hadoop - Spark 小兽人条纹

hadoop - 在MapReduce中使用HBase代替HDFS

java - 通过我的 PHP 网页运行用 Java 编写的 MapReduce 作业

hadoop - 使用 Tez 进行 MapReduce

hadoop - 是否每次都需要伪分发模式下的Namenode格式

shell - Oozie Shell操作输出数据超出其限制[2048]

java - Hadoop节点无效

java - Hadoop 查找任务尝试的主机名

hadoop - 增加Hive Mapper任务失败?

sql-server - 排除Sqoop中的列