在2014年的火花峰会上,Aaron发表了更深入了解Spark内件的演讲,在他的幻灯片中,第17页显示一个舞台已被分为4个任务,如下所示:
在这里,我想知道三个关于舞台如何被分割成任务的事情?
在上面的例子中,似乎任务的编号是根据文件编号创建的,对不对?
如果我在第1点是正确的,那么如果目录名下只有3个文件,它会创建3个任务吗?
如果我在第2点是正确的,如果只有一个但非常大的文件怎么办?它只是将这个阶段分为1个任务吗?如果数据来自流数据源怎么办?
非常感谢,我对舞台如何被分割成任务感到困惑。
答案 0 :(得分:1)
您可以将整个流程的分区数(拆分)配置为作业的第二个参数,例如:如果我们想要3个分区,则进行并行化:
a = sc.parallelize(myCollection, 3)
Spark会将工作划分为相对均匀的尺寸(*)。大文件将相应地细分 - 您可以通过以下方式查看实际大小:
rdd.partitions.size
所以不,你不会因为单个工作人员长时间在一个文件上扯下来而结束。
(*)如果您的文件非常小,则可能会更改此处理。但无论如何,大型文件将遵循这种模式。
答案 1 :(得分:0)
分裂分两个阶段进行:
首先,HDSF在加载文件时将逻辑文件拆分为64MB或128MB物理文件。
其次,SPARK将安排MAP任务来处理每个物理文件。 存在相当复杂的内部调度过程,因为存储在三个不同服务器上的每个物理文件有三个副本,并且对于大型逻辑文件,可能无法一次运行所有任务。处理它的方式是hadoop分布之间的主要差异之一。
当所有MAP任务都运行了收集器时,可以运行随机播放和减少任务。
答案 2 :(得分:0)
答案 3 :(得分:0)
问题1:在上面的示例中,看来任务号是基于文件号创建的,对吗? 答:它不是基于文件号,而是基于您的hadoop块(0.gz,1.gz是保存或存储在hdfs中的数据块。)
问题2: 如果我的观点是正确的,那么如果目录名下只有3个文件,那么它将创建3个任务吗? 答:默认情况下,hadoop中的块大小为64MB,该数据块将被视为spark中的分区。 注意:没有分区=没有任务,因为这些分区创建了3个任务。
问题3: 如果只有一个但很大的文件怎么办?它将这个阶段分为1个任务吗?如果数据来自流数据源怎么办? 答案:否,非常大的文件将被分区,正如我根据分区数对您的问题2回答的那样,不会创建任何任务