spark如何分布式写入s3或azure blob

deikduxw  于 2021-05-17  发布在  Spark
关注(0)|答案(1)|浏览(497)

当我们使用spark在aws s3或azure blob存储上写出文件时,我们只需编写:
df.write.parquet(“/online/path/folder”)
然后内容将写入指定文件夹下的数百个文件,如下所示:

/online/path/folder/f-1
/online/path/folder/f-2
...
/online/path/folder/f-100

我的问题是,既然写入是同时在数十个或数百个sparks执行器上执行的,那么它们如何避免写入同一个文件?另一个重要的问题是什么是某个执行器失败并重新启动?重新启动的执行器会在失败之前写入同一个文件吗?

mum43rcc

mum43rcc1#

spark将uuid、分区号和其他与任务相关的信息添加到文件名中,因此它保证了文件名在所有执行器和任务中的唯一性。

part-00000-a4ec413d-cb30-4103-afe1-410c11a164e8-c000.snappy.parquet

类似的问题:有人能解释一下c000在c000.snappy.parquet或c000.snappy.orc中是什么意思吗??
默认情况下,spark将文件写入临时文件夹并等待所有缩减器完成,然后执行提交作业操作,将所有文件移动到目标文件夹。因此,在失败的情况下,spark可以安全地启动一个新的执行器来完成失败的任务并重写结果。

相关问题