2015-12-15 14 views
1

我有一个数据科学背景,所以我使用Hadoop的目标是将大量数据存储在HDFS中,并使用群集执行一些(并行)分析(例如某些机器学习算法)部分这些数据集。为了更具体些,请考虑以下情况:对于存储在HDFS中的一些大型数据集,我想对此数据集的100个随机样本运行一个简单的算法并合并这些结果。Tasktracker如何获得必要的数据

正如我所理解的那样,为了达到这个目的,我可以编写一个Map函数,告诉我的群集节点上的Tasktrackers对部分数据执行分析。此外,我应该写一个Reduce函数来“结合”结果。

现在为技术方面;据我了解,我的群集中的每台机器都包含一个DataNode和一个TaskTracker。我想象某台机器上的TaskTracker可能需要数据进行计算,而这在该特定机器上的DataNode上不存在。所以出现的主要问题是:TaskTracker如何获得其所需的数据?它是否将其邻居DataNode上的数据与来自其他DataNodes的数据结合起来,还是将它的邻居DataNode与其他所有DataNodes一样视为在集群中?所有需要的数据首先转移到TaskTracker

请大家澄清一下这些问题,因为它可以帮助我理解Hadoop的基本原理。我应该完全误解了Hadoop的工作流程,请让我知道,因为它也会帮助我很多。

回答

1

如果DataNode上不存在数据,那么按照hadoop它可以询问NameNode,它将获得保存数据块的节点列表,并且DataNode将从各个DataNode复制该数据。

请查看链接和图像,以帮助您理解HDFS和Hadoop系统中的流程。

hadoop-flow

下面的链接是有流量的很好的解释。 我希望这会有所帮助。

https://drive.google.com/file/d/0B-zw6KHOtbT4MmRkZWJjYzEtYjI3Ni00NTFjLWE0OGItYTU5OGMxYjc0N2M1/view?pli=1

+0

的确想引用'DataNode'。 答案是非常有帮助的。简而言之:如果某个'TaskTracker'需要,将所需数据移至相应的'DataNode',对吧? – BDP1

+0

请检查链接,它会给你关于流量的想法。 –

+0

通常,根据输入分割的数量,映射器的数量会产生,因此,映射任务被赋予tasktracker,该tasktracker将特定块作为其本地块,如果数据不存在,那么它将被传送。 –