2013-12-16 33 views
0

我们是Hadoop的新手,我们认识到hadoop是用于处理大数据,以及笛卡尔产品如何非常昂贵。然而,我们正在进行一些实验,我们正在运行类似于MapReduce设计模式书中的笛卡尔产品工作,除了计算所有中间结果的平均值的简化器(仅包括A * B的上半部分,所以总和为A * B/2)。 我们的设置:3节点簇,块大小= 64M,我们测试了从 5000点(130KB)到10000点(260KB)范围内的不同数据集大小。混乱的hadoop如何分裂工作

观察:

1-所有地图任务在一个奴隶的一个节点上运行,有时主计算机上,其他时间,但它从来没有超过一个machine.Is有没有办法处理迫使hadoop分配分割因此映射任务在机器之间?基于什么因素决定了hadoop决定哪台机器将要处理地图任务(在我们的例子中,一旦它决定了主人,在另一种情况下,它决定了一个奴隶)。 2-在所有我们测试同一作业的不同数据大小的情况下,我们得到4个地图任务。由于我们的数据大小小于块大小,为什么我们有4个分块不是1.

3-有没有办法查看有关正在运行的作业的精确分割的更多信息。

在此先感谢

回答

1

您使用的是哪个版本的Hadoop?我将假设使用YARN的更高版本。

1)Hadoop应该自动将映射任务分配到群集中,而不是支持任何特定的节点。它将尽可能接近数据放置一个map任务,即它将在同一个主机上选择一个NodeManager作为承载一个块的DataNode。如果这样的NodeManager不可用,那么它只会选择一个节点来运行你的任务。这意味着您应该在启动作业时看到所有从属节点正在运行任务。阻止Hadoop使用节点的其他因素(如NodeManager关闭)或没有足够内存来启动特定节点上的JVM。

2)您的文件大小是否略高于64MB?即使一个字节超过67,108,864个字节也会产生两个分割。 CartesianInputFormat首先计算数据集中所有块的叉积。有两个块的文件将创建四个拆分 - A1xB1,A1xB2,A2xB1,A2xB2。尝试一个较小的文件,看看你是否仍然得到四个分裂。

3)您可以在ResourceManager的UI中看到正在运行的作业。 https://:8088将打开主页面(MRv1的jobtracker-host:50030),您可以从那里导航到正在运行的作业,这将使您看到正在运行的单个任务。如果您想要了解输入格式的更多细节,请在CartesianInputFormat的getSplits方法中添加一些日志语句,然后重新运行您的代码以查看发生了什么。

+0

感谢您的澄清,是的,我们正在使用hadoop 2.0。 关于第二点,尽管我们的数据大小小于块大小,但我们总是得到四个拆分, – user17476

+0

机器是否具有大量内存? YARN实际上会监视群集上的资源,除非有足够的空间来启动JVM,否则它不会启动任务。可以解释一些你在#1中看到的问题。 将一些日志语句添加到CartesianInputFormat代码可能有助于解释正在从作业生成什么输入分割。它只能创建一个小于块大小的输入映射任务。 –