spark.driver.memory=4g
spark.executor.memory=39g
spark.yarn.executor.memoryoverhead=4
spark.dynamicAllocation.maxExecutors=10
Yarn Queue has 750gb and 150 vcores.
Overall implementation looks like
JavaRDD<Collection<InternalObject>> finalRDD = parentJavaRDD
.filter
.mapToPair(<implementation of PairFunction>)
.reduceByKey(<implemementation of Function2>)
.values();
finalRDD
.map(<Impmenetation of Function)
.saveAsTextFile(outputHDFSPath);
When i see SPARK executor logs on YARN history server, i see that 1 out of 9 executors took appx. 2 hour compared to everyone else who completed within few minutes.
What else can i optimize here ? Given only 1 executor is taking ~2hours, should i use repartition given that quite low shuffle
.map(<Impmenetation of Function)
.repartition(finalRDD.partitions().size())
.saveAsTextFile(outputHDFSPath)