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