我想在Hadoop中的MapReduce作业的工作目录中创建一个目录。
例如通过使用: File setupFolder = new File(setupFolderName); setupFolder.mkdirs();
在我的mapper类中写入一些中间文件。这是正确的方法吗?
完成作业后,如果我愿意,我将如何再次访问此目录?
请建议。
答案 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"));
}