lw-lin / CoolplaySpark

酷玩 Spark: Spark 源代码解析、Spark 类库等
3.46k stars 1.41k forks source link

可插拔的 ReceiverSchedulingPolicy 里面 解释问题 #13

Closed ouyangshourui closed 7 years ago

ouyangshourui commented 8 years ago

3.1 Receiver 分发详解. (1) 可插拔的 ReceiverSchedulingPolicy 里面 其中,在 Receiver y 失效时,以前的 Spark Streaming 有可能会在 executor 1 上重启 Recever y ,而 1.5.0 以来,将在executor 2 上重启 Receiver y 。 应该是executor 3吧

lw-lin commented 8 years ago

@ouyangshourui 谢谢指出,能麻烦重发以上信息到 《3.1 Receiver分发详解.md》讨论区 这里吗?再次感谢

tsface commented 8 years ago

@lw-lin Receiver:

两个node, 10 Executor 10个Receiver 的时候,启动不正常,有两个Receiver一直重启,Driver拒绝其注册;而且5个Receiver全部启动到一个node1的Executor 2上,另外3个启动到node2的Executor 8上,两个重启的Receiver一直尝试在Executor8上启动。

按照调度策略,Receiver不应该均分到Executor上吗?

lw-lin commented 8 years ago

@tsface 版本应该是 1.5.x 以后吧?

另外,Spark 在启动时是最先启动 driver,然后陆续申请比如 10 个 Executor。如果 10 个 Receiver,最后等 10 个 Executor 全部到齐后再执行 Receiver 分配,这样会比较均衡。如果只有 2 个 Executor 到位就开始执行 Receiver 分配了,就有可能出现你提到的情况。

与此相关的配置项和默认值分别是:

spark.scheduler.maxRegisteredResourcesWaitingTime = 30s
spark.scheduler.minRegisteredResourcesRatio = 0.8

把两者分别改为 1800s 和 1.0 试试