我想知道在以下情况下为一个简单的字数统计作业创建了多少个任务。 所以首先我将以我的理解来解释这种情况
rdd=sc.textFile("/user/pathirippilly/sample_data_mr/wordCount.txt",5) # so RDD with 5 partitions
pipeRDD=rdd.map(lambda x : x.split(" ")).flatMap(lambda words : map(lambda word : (word,1),words)).reduceByKey(lambda a,b:a+b)
pipeRDD.collect()
如果您考虑上述代码的阶段DAG,我们有
stage1:
rdd.map(lambda x : x.split(" ")).flatMap(lambda words : map(lambda word : (word,1),words))
stage2:
reduceByKey(lambda a,b : a+b)
pipeRDD.collect()
现在说在执行spark提交时,我要求512mb的执行者内存和2个执行者。 还假设我有10个节点群集,每个工作程序节点至少具有32 GB的RAM
由于我只询问2个512 MB堆内存大小的JVM容器,所以Cluster Manager(YARN)肯定会分配一个工作节点。
现在我的问题是
1。根据体系结构,有多少个分区,有多少个任务。因此,如果我们看到,我可以理解 需要应用stage1(仅涉及狭窄的转换) 所以在这里整个第一阶段将形成一个单独的任务或 在stage1本身中,它将分为多个任务吗?
2。假设executor1正在处理3个分区,而executor2正在处理2个分区,这意味着在executor1上执行3个stage1任务 和执行3个stage2任务?对于executor2 simlary 2 stage1任务 和执行了2个stage2任务?
3。假设我在5个节点中有5个分区。因此,在混洗或排序阶段,请确保这些分区中的数据需要 互换。火花如何实现这一目标?有什么好处吗 说明或视频链接可用吗?