我们已经在带有scala的spark中实现了Oracle程序,该程序可以满足游标功能。
我们用于 POC的群集配置为:
2个节点群集,每个节点8 GB RAM,每个节点4 CPU内核
POC : 我们正在具有4g驱动程序内存的Spark Standalone集群上运行spark作业。
为了优化代码,我们设置了以下配置:
spark.sql("set hive.vectorized.execution.enabled = true");
spark.sql("set hive.vectorized.execution.reduce.enabled = true");
spark.sql("set spark.scheduler.mode=FAIR");
/* Join queries on hive tables that are stored in ORC format having partitioning and bucketing.At HIVE end we have execution engine as spark ***/
df1= spark.sql("select * from hive_tables");
/* Persisted the Dataframe */
val df=df1.repartition(6).persist(MEMORY_AND_DISK_SER);
df.take(500).par.foreach{
/* Using Scala functions(agg,filter,take,first,na.fill,...) performed
opeartions on persisted or cached Dataframes and finally inserted into
hive table*/
df_2.write.insertInto(hivetable);
}
对于500次迭代,它花费了8分钟,而当我们尝试进行600000次迭代时,时间与迭代次数成正比。
所以,请向我们建议如何改善代码的性能。
先谢谢了。