跨 Spark 集群分发 FlatMap

问题描述

我不知道这是可能的,不可能的,或者只是一个可以更好的旧设计。

我在 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 (将#修改为@)