gpt4 book ai didi

java - BufferedOutputStream的替代方法?

转载 作者:行者123 更新时间:2023-12-02 22:03:53 26 4
gpt4 key购买 nike

这是我的代码片段

@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派生的类OutputFormat,并且我覆盖了上述方法。

在群集上,它将损坏的记录写入输出文件中。
我认为是因为 BufferedOutputStream
FSDataOutputStream fileOut = new FSDataOutputStream(
new BufferedOutputStream(new FileOutputStream(path, true),104857600)), null);

我们可以为 bufferedOutputStream保留任何替代方法吗,因为一旦缓冲区装满,它就会立即写入。

注意:更新了代码。抱歉给你带来不便。

最佳答案

我得到了一个问题..在群集上,每个工作人员都将尝试在同一(共享)文件中进行写入,因为这两个工作人员在不同的机器上都意味着不同的JVM,因此同步文件写入在这里将无法工作。那就是为什么损坏的记录。我也使用了NFS,这是重要的因素。

关于java - BufferedOutputStream的替代方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40148555/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com