我有数据科学背景,因此我使用Hadoop的目标是在HDFS
中存储大量数据并使用群集执行某些(并行化)分析(例如某些机器学习算法)这些数据集的一部分。为了更具体一点,请考虑以下情况:对于存储在HDFS
中的一些大型数据集,我想在该数据集的100个随机样本上运行一个简单的算法,并将这些结果组合起来。
正如我理解这个概念,要实现这一点,我可以编写一个Map
函数,告诉我的集群节点上的Tasktrackers
对部分数据执行分析。此外,我应该写一个Reduce
函数来“结合”结果。
现在是技术方面;据我所知,我的群集中的每台计算机都包含DataNode
和TaskTracker
。我想某个机器上的TaskTracker
可能需要数据进行计算,而这个特定机器上的DataNode
上没有。所以出现的主要问题是:TaskTracker
如何获得所需的数据?它是否将其相邻DataNode
上的数据与来自其他DataNodes
的数据相结合,还是将其邻居DataNode
与群集中的所有其他DataNodes
一样对待?是否所有必需的数据都首先转移到TaskTracker
?
请详细说明这些问题,因为它可以帮助我理解Hadoop的基本原理。我是否应该首先完全误解Hadoop工作流程,请让我知道,因为它也会对我有所帮助。
答案 0 :(得分:1)
如果DataNode上没有数据, 然后根据hadoop,它可以询问NameNode,它将获得保存数据块的节点列表,DataNode将从相应的DataNode复制该数据。
请查看可能有助于您了解HDFS和Hadoop系统流量的链接和图像。
以下链接对流程有很好的解释。 我希望它会有所帮助。