spark streaming 例子 每3s 产生7000条数据。数据量小,但是要求1s左右处理完
如果是10个excutor 每个excutor1个核,并发度设成10:
kafka topie 3个partition 对应 spark 的rdd的3个partition,对应3个task,对应3个excutor,
此时数据是在其中3个excutor上,task会以数据本地优先的原则,还回被分配到这三个excutor上。
即使repartition,也不会变。这样就造成了,task执行的排队情况。以为每个excutor只有一个核,只能一个一个的执行。并行度提高不上去。
解决方案:spark.locality.wait=0,默认是3s 。此时,排队的task会去其他excutor上去执行,不会排队。local级别,变成了跨网络去数据。
如果是默认值3s,task会等3s,超时后再分配到其他的excutor上执行。
如果是1 个excutor 10个核,并发度设成10:
kafka topie 3个partition 对应 spark 的rdd的3个partition,对应3个task,对应1个excutor,
测试excutor被创建在数据本地,repartition会出10个task并行跑起来。
mapWithState 的使用方法
网友评论