我有一个主节点和两个数据节点,它们位于不同的服务器中。对于两个数据节点,每个节点在自己的 HDFS 中都有一个日志文件。现在我想运行 Hadoop 在主节点上进行映射/减少,输入应该是来自两个数据节点的 HDFS 的两个日志文件。我可以这样做吗?如果可以,我该如何设置输入路径?(例如hadoop jar wordcount.jar datanode1/input/logfile1 datanode2/input/logfile2 输出......像这样?)是否有可能来自不同服务器中不同datanode的HDFS的输入?
问问题
199 次
1 回答
1
当你说Hadoop时,没有什么能比得上它自己的 HDFS。HDFS 是一种分布式FS,分布在 Hadoop 集群中的所有机器上,作为单个 FS 运行。
您只需将这两个文件放在一个 HDFS 目录中,并将该目录作为 MapReduce 作业的输入。
FileInputFormat.addInputPath(job, new Path("/path/to/the/input/directory"));
MapReduce 作业也是如此。尽管您将作业提交给 JobTracker,但该作业实际上以分布式方式在集群的所有节点上运行,其中存在要处理的数据。
哦,还有一件事……HDFS 中的文件不会作为一个整体存储在任何特定机器上。它被切成64MB(可配置)的小块,这些块随机存储在集群中的不同机器上。
于 2013-07-10T03:09:49.407 回答