我通过Spark ML在Pyspark中安装了大量模型(参见:How best to fit many Spark ML models),我想知道如何加速个人配合。
我的数据集是一个大约50gb的火花数据框,从libsvm格式读入,我在动态分配的YARN集群上运行,分配的执行程序内存= 10gb。拟合逻辑回归分类器,它创建约30个步骤treeAggregate at LogisticRegression.scala:1018
,其中交替的随机读取和每次约340mb的随机写入。
执行程序来来往往,但似乎典型的阶段运行时约为5秒。有什么我可以看到来提高这些适合的性能吗?
答案 0 :(得分:1)
作为Spark的一般工作,您可以做一些事情来改善您的培训时间。
spark.driver.memory 注意你的驱动程序内存,一些算法会将数据改组到你的驱动程序(为了减少计算时间),所以它可能是增强的来源或至少一点都不注意。
更改 spark.executor.memory ,以便它使用作业所需的最大值,但它也会使用尽可能少的内容,以便您可以在群集上的每个节点(计算机)中容纳更多执行程序,当你有更多的工人时,你将拥有更多的计算机能力来处理这项工作。
spark.sql.shuffle.partitions ,因为您可能使用DataFrame来操作数据,请在此参数上尝试不同的值,以便您可以为每个执行程序执行更多任务。
spark.executor.cores 在5以下使用它并且你很好,在此之上,你可能会增加执行者必须处理其中任务“shuffle”的时间。< / p>
缓存/持久:尝试在巨大转换之前保留您的数据,如果您害怕您的执行程序无法使用StorageLevel.DISK_AND_MEMORY来处理它,那么您可以同时使用它们
重要:所有这一切都是基于我自己的经验,使用Spark ML对数据集进行训练算法,使用1TB-5TB和30-50个功能,我已经研究过改善自己的工作但是我我没有资格作为你问题的真相来源。了解有关数据的更多信息,并查看执行程序的日志以进一步增强。