我在HDFS (非分区)上有ORC数据,大约80亿行,大小为250 in。Iam读取DF中的数据,使用partitionBy ex: df.write.mode("overwrite").partitionBy("some_column").orc("hdfs partitionBy写入不带ay转换的DF“)
当我在spark UI中监控作业状态时,作业和阶段将在20分钟内完成。但spark UI中的"SQL“选项卡显示为40分钟。
在调试模式下运行作业并查看spark日志后,我意识到写入"_temporary“的任务将在20分钟内完成。
之后,将"_temporary“合并到实际输出路径需要20分钟。
所以我的问题是,驱动进程是否将数据从"_temporary“顺序合并到输出路径?或者它是由执行者任务完成的?
我能做些什么来提高性能吗?
发布于 2020-05-28 20:44:18
你可能想在你的应用程序配置中检查spark.hadoop.mapreduce.fileoutputcommitter.algorithm.version
选项。在版本1中,驱动程序会提交临时文件。文件的顺序,这已被认为是一个瓶颈。但是franky,人们通常只在比你的案例中更多的文件上观察到这个问题。根据Spark的版本,您可以将提交版本设置为2,有关详细信息,请参阅SPARK-20107。
另外,不建议每个executor拥有8个内核,因为当所有8个任务同时写入输出时,这可能会使磁盘IO饱和。
https://stackoverflow.com/questions/62060859
复制相似问题