I have this 2-node cluster setup, where each node has 4-cores. MASTER (Worker-on-master) (Worker-on-node1)
(slaves(master,node1)) SPARK_WORKER_INSTANCES=1 I am trying to understand Spark's parallelize behavior. The sparkPi example has this code: val slices = 8 val n = 100000 * slices val count = spark.parallelize(1 to n, slices).map { i => val x = random * 2 - 1 val y = random * 2 - 1 if (x*x + y*y < 1) 1 else 0 }.reduce(_ + _) As per documentation: "Spark will run one task for each slice of the cluster. Typically you want 2-4 slices for each CPU in your cluster". I set slices to be 8 which means the workingset will be divided among 8 tasks on the cluster, in turn each worker node gets 4 tasks (1:1 per core) Questions: i) Where can I see task level details? Inside executors I dont see task breakdown so I can see the effect of slices on the UI. ii) How to programmatically find the working set size for the map function above? I assume it is n/slices (100000 above) iii) Are the multiple tasks run by an executor run sequentially or paralelly in multiple threads? iv) Reasoning behind 2-4 slices per CPU. v) I assume ideally we should tune SPARK_WORKER_INSTANCES to correspond to number of Bests, -Monir