2014-03-03 37 views
1

尽管我已经理解了hadoop的架构,但我在理解数据的确切位置方面存在一些错误。其中数据存储在hadoop中

我的问题是像“假设我有一些随机的书大数据..是之前使用HDFS存储在多个节点的书籍资料和我们每个节点上执行MapReduce和在我们的系统得到的结果?

“或”

难道我们存储数据的大型数据库的一些地方,每当我们要进行精简操作,我们把块,并将它们在多个节点存储进行操作的?

回答

2

要么是可能的,它真的取决于您的用例和需求,但通常Hadoop MapReduce会针对数据运行存储在HDFS中。该系统是围绕数据局部性设计的,需要HDFS中的数据。这就是Map任务在存储数据的同一块硬件上运行,以提高性能。

这就是说,如果出于某种原因,您的数据必须存储在HDFS之外,然后使用MapReduce进行处理,但它可以完成,但工作量更大,并且不像在本地处理HDFS中的数据那样高效。

因此,让我们拿两个用例。从日志文件开始。原始日志文件不是特别容易访问的。他们只需要卡在某处并存储起来以供日后分析。 HDFS对此非常完美。如果你真的需要退出登录,你可以得到它,但通常人们会寻找分析的输出。因此,将日志存储在HDFS中并正常处理它们。

但是,HDFS和Hadoop Map Reduce理想格式的数据(单个大型平面文件中的许多记录)并不是我认为可以高度访问的数据。 Hadoop Map Reduce希望具有多兆字节大小的输入文件,每个文件有许多记录。这种情况越多,你的表现就会越差。有时您的数据在任何时候都需要在线,而HDFS对此并不理想。例如,我们将使用您的书籍示例。如果这些书籍用于需要以在线方式访问内容的应用程序,I.E.编辑和注释,您可以选择将它们存储在数据库中。然后,当您需要运行批量分析时,您可以使用自定义的InputFormat从数据库检索记录并在MapReduce中处理它们。

我目前正在使用Web爬网程序来将这些网页分别存储在Amazon S3中。网页太小,无法作为MapReduce的单一高效输入,所以我有一个自定义的InputFormat,它为每个映射器提供几个文件。此MapReduce作业的输出最终会写回S3,并且由于我使用的是Amazon EMR,因此Hadoop集群将消失。

+0

所以症结所在,我们直接将数据存储到每个节点上的HDFS并对其执行MapReduce操作? – userRandom

+0

这将是典型的模式,但取决于数据,它可能不是最适合您的情况。 – AaronM