spark saveastextfile花了很多时间-1.6.3

watbbzwu  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(535)

我从mongo提取数据。处理数据,然后将数据存储在hdfs中。
提取和处理1m条记录的时间不到1.1分钟。
提取代码

JavaRDD<Document> rdd = MongoSpark.load(jsc);

处理代码

JavaRDD<String> fullFile = rdd.map(new Function<Document, String>() {

                           public String call(Document s) {
//                         System.out.println(" About to Transform Json ----- " + s.toJson());
                            return JsonParsing.returnKeyJson(JsonParsing.returnFlattenMapJson(s.toJson()),args[3].split(","),extractionDetails);
                }
         });
System.out.println("Records Downloaded - " + fullFile.count());

完成时间不到1.1分钟。当我在那一点得到rdd的计数时。
之后我保存命令如下,

fullFile
   .coalesce(1)
   .saveAsTextFile(args[4], GzipCodec.class);

这至少需要15到20分钟才能将其保存到hdfs中。
不知道为什么要花很多时间。如果有什么办法可以加快进程,请告诉我。
我使用以下选项来运行它,-num executors 4--executor memory 4g--executor cores 4
如果我增加执行者或记忆的#,仍然没有任何区别。我已经将分区的#设置为70,不确定是否提高了这个值,是否有性能?
任何减少储蓄时间的建议都是有用的。
提前谢谢

zynd9foi

zynd9foi1#

fullFile
   .coalesce(1)
   .saveAsTextFile(args[4], GzipCodec.class);

这是你用的 coalesce(1) 意味着你要把分区数减少到1,这就是为什么它需要更多的时间。由于它们在写入时只有一个分区,因此只有一个任务/执行器将整个数据写入所需的位置。如果您想写得比coalesce中增加分区值快。只需删除 coalesce 或增值 coalesce . 在spark ui中写入数据时,不能进行分区。

相关问题