df.write.option("header", "false").
option("quote", null).
option("delimiter", Delimiter).
csv(tempPath)
当我保存 2 KB 文件时,保存到 S3 需要不到 5 秒的时间,但是当我尝试保存大约 20GB 的大文件时,需要 1 个多小时。
有什么建议可以加快写作过程吗?
我正在使用“s3a//”进行保存。
更新:当我操作大小为 5 KB 的数据并生成 20 KB 文件以存储到 S3 时,需要 8 秒。
当我尝试操作大小为 250MB 的数据并生成 20KB 文件以存储到 S3 时,需要 45 分钟。
我在保存之前进行计数,因此在保存之前通过 spark 对其进行评估。
当我使用“aws S3 cp”命令将相同的 20KBB 文件复制到 S3 时,只需不到一秒钟的时间。
那么,Spark 正在做什么以减慢保存过程?
最佳答案
这不是写,而是输出是通过重命名提交的,这在 s3a 中通过列表、副本和删除进行模拟。您拥有的文件越多,您拥有的数据就越多,所需的时间也就越长。 “使用算法 2”技术使事情稍微快一些,但使用起来并不安全,因为:
这里真正的问题是不可见的,但提交算法假定 rename() 是原子的和可靠的,而事实并非如此。数据可能会悄悄丢失
除非为您提供 s3 客户端的人另有说明,否则针对 HDFS 工作,然后复制到 S3。 (EMR S3的连接器直接使用是安全的)
关于scala - 使用 spark 和 scala 将文件写入 S3 非常慢。有什么更好的方法来优化它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47803007/