我有一个数据科学背景,所以我使用Hadoop的目标是将大量数据存储在HDFS
中,并使用群集执行一些(并行)分析(例如某些机器学习算法)部分这些数据集。为了更具体些,请考虑以下情况:对于存储在HDFS
中的一些大型数据集,我想对此数据集的100个随机样本运行一个简单的算法并合并这些结果。Tasktracker如何获得必要的数据
正如我所理解的那样,为了达到这个目的,我可以编写一个Map
函数,告诉我的群集节点上的Tasktrackers
对部分数据执行分析。此外,我应该写一个Reduce
函数来“结合”结果。
现在为技术方面;据我了解,我的群集中的每台机器都包含一个DataNode
和一个TaskTracker
。我想象某台机器上的TaskTracker
可能需要数据进行计算,而这在该特定机器上的DataNode
上不存在。所以出现的主要问题是:TaskTracker
如何获得其所需的数据?它是否将其邻居DataNode
上的数据与来自其他DataNodes
的数据结合起来,还是将它的邻居DataNode
与其他所有DataNodes
一样视为在集群中?所有需要的数据首先转移到TaskTracker
?
请大家澄清一下这些问题,因为它可以帮助我理解Hadoop的基本原理。我应该完全误解了Hadoop的工作流程,请让我知道,因为它也会帮助我很多。
的确想引用'DataNode'。 答案是非常有帮助的。简而言之:如果某个'TaskTracker'需要,将所需数据移至相应的'DataNode',对吧? – BDP1
请检查链接,它会给你关于流量的想法。 –
通常,根据输入分割的数量,映射器的数量会产生,因此,映射任务被赋予tasktracker,该tasktracker将特定块作为其本地块,如果数据不存在,那么它将被传送。 –