如何使映射器在hadoop中的本地文件系统上写入

时间:2011-08-01 13:01:55

标签: hadoop mapreduce

我希望编写一个文件,并通过MapReduce代码在我的本地文件系统中创建一个目录。另外,如果我在作业执行期间在工作目录中创建一个目录,如何在清理之前将其移动到我的本地文件系统。

2 个答案:

答案 0 :(得分:1)

由于您的映射器在群集中的某些/任何计算机上运行,​​当然您可以使用基本的Java文件操作来编写文件。您可以使用org.apache.hadoop.hdfs.DFSClient访问HDFS上的任何文件以复制到本地文件(我建议您在HDFS内部复制并在作业完成后从中获取任何文件)。

当然,您的本地文件将是客户端机器的本地文件(我假设是单独的机器),因此需要使用NFS之类的东西让您在任何客户端上使用所写的文件。注意concurreny问题。

答案 1 :(得分:-1)

我也对在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执行的,那没关系。在日食之外,它看起来很好但是没有创建任何文件。

在集群上执行之前,它应该在单个节点上运行,所以现在整个计算机只需要在一台计算机上进行操作。

相关问题