Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark SparkRunner上的光束覆盖其自身的输出_Apache Spark_Apache Beam_Parquet - Fatal编程技术网

Apache spark SparkRunner上的光束覆盖其自身的输出

Apache spark SparkRunner上的光束覆盖其自身的输出,apache-spark,apache-beam,parquet,Apache Spark,Apache Beam,Parquet,我正在SparkRunner上运行一个带有拼花文件输出的梁管道(尽管如果我在执行其他IO输出,问题就在这里)。我遇到的问题是,在输出时,文件副本会覆盖它自己的输出。以下是日志输出: 19/10/22 18:26:35 INFO FileBasedSink: Will copy temporary file FileResult{tempFilename=/home/hadoop/just1hour/.temp-beam-357d6916-5d8e-4519-a7a4-3852249011b5/7

我正在SparkRunner上运行一个带有拼花文件输出的梁管道(尽管如果我在执行其他IO输出,问题就在这里)。我遇到的问题是,在输出时,文件副本会覆盖它自己的输出。以下是日志输出:

19/10/22 18:26:35 INFO FileBasedSink: Will copy temporary file FileResult{tempFilename=/home/hadoop/just1hour/.temp-beam-357d6916-5d8e-4519-a7a4-3852249011b5/77100cd1-04ae-441c-848f-e0d0067feeb8, shard=0, window=org.apache.beam.sdk.transforms.windowing.GlobalWindow@5316e95f,
 paneInfo=PaneInfo.NO_FIRING} to final location /home/hadoop/just1hour/output-00000-of-00001
19/10/22 18:26:35 INFO FileBasedSink: Will copy temporary file FileResult{tempFilename=/home/hadoop/just1hour/.temp-beam-357d6916-5d8e-4519-a7a4-3852249011b5/f19819df-e006-431a-8ccd-6e67af692c3e, shard=0, window=org.apache.beam.sdk.transforms.windowing.GlobalWindow@5316e95f,
 paneInfo=PaneInfo.NO_FIRING} to final location /home/hadoop/just1hour/output-00000-of-00001
19/10/22 18:26:35 INFO FileBasedSink: Will copy temporary file FileResult{tempFilename=/home/hadoop/just1hour/.temp-beam-357d6916-5d8e-4519-a7a4-3852249011b5/cb2abe0c-8cc2-4a94-ae54-97b67c5e7d20, shard=0, window=org.apache.beam.sdk.transforms.windowing.GlobalWindow@5316e95f,
 paneInfo=PaneInfo.NO_FIRING} to final location /home/hadoop/just1hour/output-00000-of-00002
19/10/22 18:26:35 INFO FileBasedSink: Will copy temporary file FileResult{tempFilename=/home/hadoop/just1hour/.temp-beam-357d6916-5d8e-4519-a7a4-3852249011b5/611d194a-4e8f-44bc-8776-4bc2c55a8f34, shard=1, window=org.apache.beam.sdk.transforms.windowing.GlobalWindow@5316e95f,
 paneInfo=PaneInfo.NO_FIRING} to final location /home/hadoop/just1hour/output-00001-of-00002
如您所见,第一个文件正在被覆盖

我可以通过手动指定碎片的数量等于输入文件的数量来解决这个问题,但是我想知道是否有其他配置可以解释或避免这种行为

编辑:

这是一个批处理作业,下面是生成输出的代码:

p.apply(TextIO.read().from(input).withDelimiter("{".getBytes()))
                .apply(Filter.by((String record) -> !record.isEmpty()))
                .apply(ParDo.of(new ParseNotificationJSON())).setCoder(AvroCoder.of(SCHEMA))
                .apply("Write Parquet files",
                        FileIO.<GenericRecord>write().via(ParquetIO.sink(SCHEMA)).to(output));

        p.run().waitUntilFinish();
p.apply(TextIO.read().from(input).withDelimiter(“{.getBytes()))
.apply(Filter.by((字符串记录)->!record.isEmpty())
.apply(ParDo.of(new ParseNotificationJSON()).setCoder(AvroCoder.of(SCHEMA))
.apply(“写入拼花文件”,
FileIO.write().via(ParquetIO.sink(SCHEMA)).to(output));
p、 run().waitUntilFinish();

如果目标目录中的任何文件具有相同的名称,则Beam中基于文件IO的接收器将覆盖文件。绑定源的默认文件命名也会在文件名中使用碎片索引和碎片编号,因此使用
。withNumShards(0)
将使用运行程序确定的碎片。如果使用
,withNumShards(0)
在接收器中应该可以正常工作。

如果目标目录中的任何文件具有相同的名称,则Beam中基于文件IO的接收器将覆盖文件。有界源的默认文件命名还使用文件名中的碎片索引和碎片编号,因此使用
。withNumShards(0)
将使用runner确定的分片。如果使用
,则使用Numshards(0)
在您的接收器中,它应该可以正常工作。

是批处理还是流处理作业?此外,如果您可以提供最小的代码块以便重新生成问题,这将是一件好事。添加了上述信息。这是批处理还是流处理作业?此外,如果您可以提供最小的代码块以便重新生成问题,这将是一件好事。Ad删除上面的信息。不,这不起作用——相同的行为仍然存在。问题似乎是每组碎片似乎不知道其他碎片。在示例日志输出中,第一个碎片输出为-00000-of-00001,然后下一个碎片覆盖第一个碎片。第二组碎片没有问题,因为它们正在向ou写入tput-00000-of-00002和output-00001-of-00002。不,这不起作用——相同的行为仍然存在。问题似乎是每组碎片似乎不知道其他碎片。在示例日志输出中,第一个碎片输出到output-00000-of-00001,然后下一个碎片覆盖第一个碎片。第二组碎片正常因为他们正在写入输出-00000-of-00002和输出-00001-of-00002。