无法弄清楚从哪里开始排除故障为什么通过分区从spark / scala到hdfs的简单写入是几秒钟而不是几分钟写入s3时。
def saveDF(df: org.apache.spark.sql.DataFrame) : Unit = {
df.write
.mode("overwrite")
.option("compression", "snappy")
.partitionBy("col")
// .parquet(s"hdfs://localhost:9000/${fileout}") // this is a few seconds
.parquet(s"s3a://${s3bucket}/${s3folder}/${fileout}") // this is a few minutes
}
答案 0 :(得分:1)
尝试以下配置以提高性能
--conf "spark.sql.parquet.enable.summary-metadata=false"\
--conf "spark.hadooop.mapreduce.fileoutputcommitter.algorithm.version=2"\
但是,您将无法获得与hdfs相同的性能。问题在于s3中的提交算法和提交实现(从s3中的_temporary文件夹移动不是像hdfs中的O(1),而是O(n))
答案 1 :(得分:1)
这是因为您的HDFS群集共同习惯您的AWS EMR群集,而您的s3访问需要在数据中心内移动数据。