问题描述
我不知道这是可能的,不可能的,或者只是一个可以更好的旧设计。
我在 databricks spark 集群上运行 sparkler 作为 spark-submit 作业,它在代码中到达 this point
val fetchedRdd = rdd.map(r => (r.getGroup,r))
.groupByKey()
.flatMap({ case (grp,rs) => new FairFetcher(job,rs.iterator,localFetchDelay,FetchFunction,ParseFunction,OutLinkFilterFunction,StatusUpdateSolrTransformer) })
.persist()
这基本上是获取 RDD,然后在每个 RDD 上运行基于 Web 的爬网并返回结果。但是当Spark执行它时,它会在驱动程序节点上运行所有的爬取,并且不分发它们。
这些测试中的关键是非常静态的,所以我也尝试过强制分区计数(每个节点集群 16 核上 50 个)并重新分区,但每次所有作业都被安排在一个节点上运行。
如何更好地分配任务?因为RDD中数据的处理不是瓶颈,爬取数据的获取是瓶颈,但在代码分配到节点后发生。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)