我试图为多个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
答案 0 :(得分:1)
Streaming Guide中解释了此行为。每个接收器都是一个长时间运行的进程,占用一个线程。
如果可用线程的数量小于或等于接收器的数量,则没有剩余资源用于任务处理:
分配给Spark Streaming应用程序的核心数必须大于接收者数量。否则系统将接收数据,但无法处理数据。