大数据学习(14)-Map Join和Common Join

&&大数据学习&&

系列专栏: 哲学语录: 承认自己的无知,乃是开启智慧的大门
如果觉得博主的文章还不错的话,请点赞+收藏⭐️+留言支持一下博>主哦


什么是Map Join和Common Join。

在解释这个问题之前,我们先了解一下Hive中的两种Join操作:Map Join和Common Join。

  1. Map Join:在Map阶段进行Join操作。它先将小表(或小表列表)读入内存,然后在Map过程中,对于每个大表的数据,如果它与内存中的小表有匹配的键值,那么就将这个大表的数据与小表的数据关联起来,输出为一个键值对。Map Join适用于小表和大数据的关联,因为它直接在Map阶段进行了关联操作,避免了在Reduce阶段进行大规模的排序和扫描。
  2. Common Join:又叫Reduce Join,是在Reduce阶段进行Join操作的通用方式。对于每个Map任务,它都会将带有相同键的数据发送到同一个Reduce任务中,然后在Reduce任务中进行Join操作。Common Join适用于大数据和小数据的关联,因为它在Reduce阶段进行关联操作,避免了在Map阶段进行大规模的排序和扫描。

现在我们来解释一下“生成一个条件任务(Conditional Task)”。在Hive中,条件任务是一种任务类型,它可以在编译阶段根据一些条件生成子任务列表。在这个问题中,条件任务会根据数据的大小和查询需求来生成Map Join任务和Common Join任务。也就是说,Hive会根据数据和查询的特点,选择最合适的Join策略。

对于一些适合Map Join的查询,Hive会在条件任务下生成一个计划列表,这个列表中只包含Map Join任务。而对于一些适合Common Join的查询,Hive会在条件任务下生成一个计划列表,这个列表中只包含Common Join任务。

注意:在一些情况下,Hive可能无法确定哪个Join策略更优,所以它会生成两种类型的任务,然后在执行阶段通过参数来选择最合适的任务类型。这也是为什么问题中说“其下会包含一个计划列表,计划列表中包含转换后的Map Join任务以及原有的Common Join任务”。

为了搞清楚这个,整整掉了一整天头发。

你可能感兴趣的:(大数据,学习,hive)