例如,我有 2 个数据节点和 2 个复制。当我执行“hadoop dfs -put test.log input”将文件存储到 HDFS 中时,该文件如何存储在 Hadoop 集群中?它是否遍布整个集群并存储在两个数据节点服务器上?
当您执行 hadoop dfs -put test.log input时,文件test.log将存储在名为input的目录中。流量就到这里,
根据文件的大小和您的块大小,文件将首先被分成n 个小块,称为blocks。默认块大小为64MB,但它是可配置的。现在,在 NameNode 的帮助下,客户端将知道哪些 DataNode 有空闲空间来容纳数据。完成此操作后,客户端将开始将数据逐块推送到最近的 DataNode,然后根据您的复制因子将其推送到其他 DataNode。
是的,该文件将分布在两台机器上。请记住 Hadoop 是一个分布式系统,其中n 个单独的机器作为一个系统共同工作。请参阅下图以获得更好的理解:
另外,当我做一些诸如字数统计“hadoop -jar word count.jar input output”之类的操作时,整个过程是什么样的?jobtracker 会要求 2 个 task tracker 并行执行,然后将输出存储到 HDFS 中?
MapReduce 执行的流程是这样的,
您将作业提交给 JobTracker。JobTracker 指示在存在要处理的数据的机器上运行的 TaskTracker(连续运行)在该机器上自行开始处理,而无需将数据移动到任何地方。如果您要处理的文件分布在 n 个节点上,那么在所有这些 n 个节点上运行的 TaskTracker 将并行启动处理。在你的情况下,n 是 2。看到这个了解完整的过程。
我可以认为第一种情况与名称节点/数据节点有关,第二种情况与作业跟踪器/任务跟踪器有关吗?
没有什么可考虑的。这就是真正发生的事情:)
高温高压