在火花中重命名 S3 文件是不是会将文件加载到内存中
Posted
技术标签:
【中文标题】在火花中重命名 S3 文件是不是会将文件加载到内存中【英文标题】:Does renaming S3 files in spark load the files into memory在火花中重命名 S3 文件是否会将文件加载到内存中 【发布时间】:2018-10-04 08:29:26 【问题描述】:我问这个问题是因为我重命名使用spark
生成的S3
文件比较慢。
我将输出文件保存在spark
中,如下所示
val dfMainOutputFinalWithoutNull = dfMainOutputFinal.withColumnRenamed("concatenated", headerFinal)
dfMainOutputFinalWithoutNull.repartition(1).write.partitionBy("DataPartition")
.format("csv")
.option("timestampFormat", "yyyy/MM/dd HH:mm:ss ZZ")
.option("nullValue", "")
.option("delimiter", "\t")
.option("quote", "\u0000")
.option("header", "true")
.save(outputFileURL)
保存后,我需要重命名保存在 S3
中的文件。
我就是这样做的。
val file = fs.globStatus(new Path(outputFileURL + "/*/*"))
val finalPrefix = "Fundamental.Fundamental.Fundamental."
val fileVersion = "1."
val formatDate = new SimpleDateFormat("yyyy-MM-dd-hhmm")
val now = Calendar.getInstance().getTime
val finalFormat = formatDate.format(now)
val currentTime = finalFormat + "."
val fileExtention = "Full.txt"
for (urlStatus <- file)
val DataPartitionName = urlStatus.getPath.toString.split("=")(1).split("\\/")(0).toString
val finalFileName = finalPrefix + DataPartitionName + "." + fileVersion + currentTime + fileExtention
val dest = new Path(mainFileURL + "/" + finalFileName)
fs.rename(urlStatus.getPath, dest)
println("File renamed and moved to dir now delete output folder")
myUtil.Utility.DeleteOuptuFolder(fs, outputFileURL)
文件重命名需要 15 分钟以上。 我有大约 2k 个总大小为 200GB 的文件。 我在这里做错了吗?
有没有更好的办法?
【问题讨论】:
【参考方案1】:是AWS S3存储中的副本,一般测6-10MB/s。
【讨论】:
【参考方案2】:在 S3 中没有过度命名的概念。我建议坚持使用 hdfs,然后执行更胖的 s3-distcp。
【讨论】:
以上是关于在火花中重命名 S3 文件是不是会将文件加载到内存中的主要内容,如果未能解决你的问题,请参考以下文章
在 RAMDisk 上执行二进制文件是不是会将可执行文件重新加载到内存中?