从多个rabbitmq队列并行处理Spark Streaming

时间:2016-10-17 08:14:37

标签: apache-spark spark-streaming datastax

我试图为多个RabbitMQ队列设置Spark流。如下所述,我设置了2个工作人员,每个工作人员获得一个核心和2GB内存。所以,问题是当我将此参数保持为[HttpPost] [ValidateAntiForgeryToken] public ActionResult Delete(int id, Leerling ll) { var login = (from l in db.myLogin where id == l.leerlingId select l).FirstOrDefault(); if(login != null) { db.myLogin.Remove(login); db.Entry(ll).State = System.Data.Entity.EntityState.Deleted; db.SaveChanges(); } return RedirectToAction("Index");// het record verwijderen en redirecten als het gelukt is } 时,流不会处理任何数据,它只会继续添加作业。但是一旦我将它设置为conf.set("spark.cores.max","2"),流媒体就开始处理它。所以,我无法理解这个的原因。此外,如果我想从队列中并行处理数据我应该怎么做。我在下面提到了我的代码和配置设置。

Spark-env.sh:

conf.set("spark.cores.max","3")

Scala代码:

SPARK_WORKER_MEMORY=2g 
SPARK_WORKER_INSTANCES=1
SPARK_WORKER_CORES=1

1 个答案:

答案 0 :(得分:1)

Streaming Guide中解释了此行为。每个接收器都是一个长时间运行的进程,占用一个线程。

如果可用线程的数量小于或等于接收器的数量,则没有剩余资源用于任务处理:

  

分配给Spark Streaming应用程序的核心数必须大于接收者数量。否则系统将接收数据,但无法处理数据。