如何让你的映射器在hadoop的本地文件系统上写



我希望通过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之外,似乎没有问题,但是没有创建任何文件。

在集群上运行之前,它应该在单个节点上运行,所以现在整个事情都在单个计算机上完成。

相关内容

  • 没有找到相关文章

最新更新