BufferedOutputStream 的替代方案?

Alternative for BufferedOutputStream?

这是我的代码片段

@Override
    protected RecordWriter<String, String> getBaseRecordWriter(
            FileSystem fs, JobConf job, String name, Progressable arg3)
                    throws IOException {
        Path file2 = FileOutputFormat.getOutputPath(job);
        String path = file2.toUri().getPath()+File.separator+ name;
        FSDataOutputStream fileOut = new FSDataOutputStream( new BufferedOutputStream(new FileOutputStream(path, true),104857600)), null);
        return new LineRecordWriter<String, String>(fileOut, "\t");
    }

我正在使用 Spark 1.6.1,在我的代码中我使用了 saveAsHadoopFile() 方法,为此我编写了一个从 org.apache.hadoop.mapred.lib.MultipleTextOutputFormat 派生的 class OutputFormat 并覆盖了上述方法。

在集群上,它在输出文件中写入损坏的记录。 我认为这是因为 BufferedOutputStream

FSDataOutputStream fileOut = new FSDataOutputStream(
                 new BufferedOutputStream(new FileOutputStream(path, true),104857600)), null);

我们能否为 bufferedOutputStream 提供任何替代方案,因为它会在缓冲区满时立即写入。

注意:更新了代码。带来不便敬请谅解。

我遇到了问题 .. 在集群上,每个工作人员都将尝试写入相同的(共享)文件,因为不同机器上的两个工作人员意味着不同的 JVM,因此同步文件写入在这里不起作用。这就是腐败记录的原因。我还使用了 NFS,这是重要因素。