我偶然发现了Spark中的一个特性,它允许您在一个spark context中调度不同的任务。
我想在一个程序中实现这个特性,在这个程序中,我将输入的RDD(from a text source)转换成一个键值RDD [K,V],然后生成一个复合键值RDD [(K1,K2),V]和一个包含一些特定值的过滤RDD。
进一步的流水线涉及在RDDs和join操作上从MLlib调用一些统计方法,然后将结果外部化到磁盘。
我正在尝试理解spark'的内部公平调度程序将如何处理这些操作。我试着阅读作业调度文档,但对pools、users和tasks的概念感到更困惑。
pools到底是什么,它们是可以组合在一起的特定'tasks',还是汇集在一起的linux用户
此context中的users是什么。他们指的是threads吗?或者它类似于SQL上下文查询?
我猜它与如何在spark context中调度任务有关。但阅读文档会让人觉得我们在处理具有不同客户端和用户组的多个应用程序。
有人能澄清这一点吗?
发布于 2015-04-25 18:07:20
您在第2段中描述的所有流水线过程:
map -> map -> map -> filter将在单个阶段中处理,就像MapReduce中的map()一样(如果您熟悉的话)。这是因为在创建新的记录之前,不需要对数据进行重新分区或混洗,对记录之间的相关性没有任何要求,spark只会将尽可能多的转换链接到同一阶段,因为它非常轻量级。关于阶段分离的更多信息可以在它的论文中找到:Resilient Distributed Datasets第5.1节作业调度。
当阶段被执行时,它将是一个任务集(在不同线程中运行的相同任务),并在spark的视角下同时进行调度。
而公平调度器即将调度无关的任务集,并不适合这里。
https://stackoverflow.com/questions/29858199
复制相似问题