如何在Hadoop中创建和读取目录 - Mapreduce Job工作目录

时间:2011-08-01 02:52:01

标签: hadoop mapreduce

我想在Hadoop中的MapReduce作业的工作目录中创建一个目录。

例如通过使用:              File setupFolder = new File(setupFolderName);         setupFolder.mkdirs();

在我的mapper类中写入一些中间文件。这是正确的方法吗?

完成作业后,如果我愿意,我将如何再次访问此目录?

请建议。

2 个答案:

答案 0 :(得分:3)

如果您使用的是java,则可以覆盖setup方法并在那里打开文件处理程序(并在cleanup中关闭它)。所有映射器都可以使用此句柄。

我假设你没有在这里编写所有的地图输出,而是一些调试/统计数据。使用此处理程序,您可以按照此示例(http://wiki.apache.org/hadoop/HadoopDfsReadWriteExample

中显示的内容进行读写

如果您想阅读整个目录,请查看此示例https://sites.google.com/site/hadoopandhive/home/how-to-read-all-files-in-a-directory-in-hdfs-using-hadoop-filesystem-api

请记住,您将无法依赖写入文件的数据顺序。

答案 1 :(得分:2)

您可以在reducer类中覆盖setupReduce(),使用mkdirs()创建文件夹并使用create()为outputstream创建文件。

@Override
    protected void setupReduce(Context context) throws IOException {
        Configuration conf = context.getConfiguration();
        FileSystem fs = FileSystem.get(conf);
        fs.mkdirs(new Path("your_path_here"));
    }