[英]Why the RDD is not persisted in memory for every iteration in spark?
我将火花用于机器学习应用程序。 spark和hadoop共享相同的计算机集群,而没有任何资源管理器,例如yarn。 我们可以在运行spark任务时运行hadoop作业。
但是机器学习应用程序运行得如此缓慢。 我发现对于每次交互,有些工作人员需要向内存中添加一些rdd。 像这样:
243413 14/07/23 13:30:07 INFO BlockManagerMasterActor$BlockManagerInfo: Added rdd_2_17 in memory on XXX:48238 (size: 118.3 MB, free: 16.2 GB)
243414 14/07/23 13:30:07 INFO BlockManagerMasterActor$BlockManagerInfo: Added rdd_2_17 in memory on XXX:48238 (size: 118.3 MB, free: 16.2 GB)
243415 14/07/23 13:30:08 INFO BlockManagerMasterActor$BlockManagerInfo: Added rdd_2_19 in memory on TS-XXX:48238 (size: 119.0 MB, free: 16.1 GB)
因此,我认为重新加载rdd的重新计算会使应用程序运行得如此缓慢。
然后,我的问题是,当有足够的可用内存时,为什么rdd不能保留在内存中? 因为Hadoop的工作?
我添加了以下jvm参数:-Xmx10g -Xms10g
我发现rdd add操作比以前少了,任务运行时间也比以前短。 但是一个阶段的总时间也太大。 从webUI,我发现:
在每个阶段,并非所有工人都同时开始。 例如,当worker_1完成10个任务时,worker_2出现在webUI上并启动任务。 这导致了漫长的阶段。
我们的Spark集群可以独立运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.