Hive 输入任务划分

Hive 通过 MapReduce 来实现任务的输入划分,MapReduce 将用户提交的任务分解成多个 Map 和 Reduce 任务,每个 Map 任务负责一个文件的数据读取和转换,每个 Reduce 任务负责多个 Map 任务的输出结果的合并。在 Map 任务中,Hive 会根据文件的物理位置和大小,将文件划分成多个分片,每个分片会被一个 Map 任务处理,每个 Map 任务会读取分片中的数据,并将数据转换成 key-value 对的形式,然后将 key-value 对输出到 Reduce 任务中。

Spark SQL 输入任务划分

Spark SQL 也是通过 MapReduce 来实现任务的输入划分,但是 Spark SQL 的 MapReduce 框架与 Hive 的有所不同,Spark SQL 采用的是全局分区的方式,也就是说,Spark SQL 会将文件划分成多个分区,每个分区会被一个 Map 任务处理,每个 Map 任务会读取分区中的数据,并将数据转换成 key-value 对的形式,然后将 key-value 对输出到 Reduce 任务中。

比较

从上面的描述可以看出,Hive 和 Spark SQL 在输入任务划分上的实现方式有所不同,Hive 采用的是分片的方式,将文件划分成多个分片,每个分片会被一个 Map 任务处理;而 Spark SQL 采用的是全局分区的方式,也就是说,Spark SQL 会将文件划分成多个分区,每个分区会被一个 Map 任务处理。