微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

跨 Spark 集群分发 FlatMap

如何解决跨 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 举报,一经查实,本站将立刻删除。