我有一个主节点和两个位于不同服务器的数据节点。对于两个数据节点,它们中的每一个都在其自己的HDFS中具有日志文件。现在我想运行Hadoop在主节点上执行map / reduce,输入应该是来自两个数据节点的两个日志文件。 HDFS。我可以这样做吗?如果可以的话,我该如何设置输入路径? (例如hadoop jar wordcount.jar datanode1 / input / logfile1 datanode2 / input / logfile2 output ...像这样?)来自不同datanode的HDFS的输入是否可能在不同的服务器中?
答案 0 :(得分:1)
当您说 Hadoop 时,没有像自己的HDFS 那样的内容。 HDFS是分布式 FS,并且在作为单个FS的Hadoop群集中的所有计算机上传播。
您只需将这两个文件放在一个HDFS目录中,并将此目录作为MapReduce作业的输入。
FileInputFormat.addInputPath(job, new Path("/path/to/the/input/directory"));
MapReduce作业也是如此。虽然您将作业提交给JobTracker,但作业实际上在群集的所有节点上以分布式方式运行,其中存在要处理的数据。
哦,还有一件事...... HDFS中的文件不会作为一个整体存储在任何特定的机器上。它被切割成64MB的小块(可配置),这些块在您的集群中随机存储在不同的机器上。