我有一个NameNode(Hadoop-Master)和三个DataNodes(Hadoop-Master,Hadoop-Slave1,Hadoop-Slave2)。 Hadoop-Master用于NameNode和DataNode。操作系统是Ubuntu 16.04。 Hadoop的版本为2.7.6。块大小为128MB。 HDFS配置有两个复制。 我在HDFS中有十个文件(/file1,/file2,.../file10),每个文件为127MB,因此每个文件都只有一个块。这些文件分布在三个数据节点中。 但是我不知道为什么所有文件都在Hadoop-Master(作为DataNode)中具有复制。其他两个数据节点(Hadoop-Slave1和Hadoop-Slave2)具有不同的文件复制。 我编写了一个Java MapReduce程序来处理所有十个文件。使用以下代码添加作业的所有文件:
FileInputFormat.addInputPath( job , new Path("/file1"));
FileInputFormat.addInputPath( job , new Path("/file2"));
... ...
FileInputFormat.addInputPath( job , new Path("/file10"));
作业完成后,我阅读了控制台日志。似乎只有Hadoop-Master可以完成所有映射器和化简器的工作。其他两个数据节点未出现在控制台日志中。 我实际上希望所有DataNode并行处理这些文件。例如,Hadoop-Master进程文件1〜文件4,Hadoop-Slave1进程文件5〜文件7和Hadoop-Slave2进程文件8〜文件10。 我该怎么做才能使所有DataNode处理作业。