我在Spark
中遇到了这个功能,它允许您在spark context
内安排不同的任务。
我想在一个程序中实现此功能,我将map
我的输入RDD(from a text source)
转换为键值RDD [K,V]
,然后创建一个复合键值RDD [(K1,K2),V]
和一个已过滤的{ {1}}包含一些特定值。
进一步的管道涉及在RDD
和MLlib
操作上从RDDs
调用一些统计方法,然后将结果外部化到磁盘。
我试图理解join
内部公平调度程序将如何处理这些操作。我尝试阅读作业调度文档,但对spark'
,pools
和users
的概念更加困惑。
tasks
究竟是什么,他们肯定pools
可以组合在一起,还是他们将linux用户汇集到一个组中
此'tasks'
中的users
是什么。他们是指context
吗?还是像threads
上下文查询?
我猜这与任务如何在SQL
内安排有关。但阅读文档使我们看起来正在处理具有不同客户端和用户组的多个应用程序。
有人可以澄清一下吗?
答案 0 :(得分:1)
您在第2段中描述的所有流水线程序:
map -> map -> map -> filter
将在一个阶段中处理,就像MapReduce中的map()一样,如果您熟悉的话。这是因为不需要重新分区或随机播放您的数据,因为您对记录之间的相关性没有要求,因此在创建新的记录之前,spark会尽可能多地转换到同一个阶段,因为它会很轻巧。有关舞台分离的更多信息可以在其论文中找到:Resilient Distributed Datasets第5.1节作业调度。
当阶段执行时,它将是一个任务集(在不同的线程中运行相同的任务),并以spark的角度同时进行调度。
公平的调度程序即将安排不相关的任务集,这里不适合。