在火花中重命名 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 上执行二进制文件是不是会将可执行文件重新加载到内存中?

如果它们位于两个 Web 应用程序中,Tomcat 是不是会将相同的库文件加载到内存中两次?

如何在 .NET 中重命名文件?

在 Athena 中重命名列

如何在Android中重命名文件只知道它的媒体内容Uri

如何在上传过程中重命名图像文件