Please briefly explain the relationship between jobs and tasks in Spark.
In Spark, a job is made up of a group of interrelated tasks. It is a complete computing task submitted to Spark by a user, typically consisting of multiple stages, each of which includes multiple tasks. Tasks are the smallest execution units of a job, running in parallel on different nodes in the cluster to achieve parallel computation. Spark breaks down jobs into multiple stages based on their dependencies and data partitioning, dividing each stage into multiple tasks for efficient parallel computing. Therefore, there is a hierarchical relationship between jobs and tasks, with tasks being the basic execution units of a job, which is composed of multiple tasks to form a larger computing task.