Hadoop将输出写入txt文件

时间:2013-07-16 20:33:21

标签: java hadoop hdfs

我在想如何将Hadoop的输出写入txt文件,而不是写入HDFS。 例如,我输入以下代码:

    // Create the job specification object
    Job job1 = new Job();
    job1.setJarByClass(Main.class);
    job1.setJobName("Day Measurment");

    // Setup input and output paths
    FileInputFormat.addInputPath(job1, new Path(args[0]));
    FileOutputFormat.setOutputPath(job1, new Path(args[1]));

    // Set the Mapper and Reducer classes
    job1.setMapperClass(DayMapper.class);
    job1.setReducerClass(LogReducer.class);

    // Specify the type of output keys and values
    job1.setOutputKeyClass(Text.class);
    job1.setOutputValueClass(LongWritable.class);

    // Wait for the job to finish before terminating
    job1.waitForCompletion(true);

    PrintWriter pw = new PrintWriter("hadoop.csv");
    pw.println("abc");
    pw.close();

在测试我的程序后,Hadoop工作正常,但我只得到hadoop.csv并且没有内容。它是一个空文件,里面没有“abc”。

有人可以告诉我为什么吗?或者告诉我如何将输出打印到常规文件(.csv或.log)中,而不是打印到HDFS中?

2 个答案:

答案 0 :(得分:2)

默认情况下,创建的PrintWriter对象不使用flush()。要启用此功能,可以在创建PrintWriter时向构造函数添加第二个参数。

PrintWriter pw = new PrintWriter(fw,true); 

如果您不想这样做,您应该只需使用flush() - 方法

    PrintWriter pw = new PrintWriter("hadoop.csv");
        pw.println("abc");
        pw.flush();    
        pw.close();

使用flush()将确保任何要写入的数据不会卡在任何内部缓冲区中,而只是推送到底层输出流。

看看这个:PrintWriter - Java API

答案 1 :(得分:0)

        FileWriter fw = new FileWriter("hadoop.csv");
        PrintWriter pw = new PrintWriter(fw);

        pw.println("abc");

        pw.flush();
        pw.close();
        fw.close();