我希望通过m MapReduce代码在本地文件系统中编写一个文件并创建一个目录。此外,如果我在作业执行期间在工作目录中创建了一个目录,那么如何在清理之前将其移动到本地文件系统中呢?
当您的映射器在集群中的某些/任何机器上运行时,您当然可以使用基本的Java文件操作来编写文件。您可以使用org.apache.hadoop.hdfs.DFSClient访问HDFS上的任何文件以复制到本地文件(我建议您在HDFS内复制并在作业完成后从中获取任何文件)。
当然,您的本地文件对于客户机-机器来说是本地的(我假设是单独的机器),因此需要NFS之类的东西来让您在任何客户机上都可以使用写入的文件。注意并发问题。
我对在datanode上本地写入文件也很感兴趣。为此,我使用java.io.FileWriter和java.io.BufferedWriter:
FileWriter fstream = new FileWriter("log.out",true);
BufferedWriter bout = new BufferedWriter(fstream);
bout.append(build.toString());
bout.close();
它只在通过eclipse执行时创建文件。当以.jar形式运行时,使用下一个命令:
hadoop jar jarFile.jar Mainclass
它不会创建任何东西。我不知道这是一个错误的执行,错误的配置,还是只是缺少了什么
实际上这只是为了创建一个用于调试的日志文件。我希望datanode在本地写入的实际文件是通过Runtime.getRuntime()
创建的。然而,同样的事情发生了。如果执行是通过eclipse执行的,那是可以的。在eclipse之外,似乎没有问题,但是没有创建任何文件。
在集群上运行之前,它应该在单个节点上运行,所以现在整个事情都在单个计算机上完成。