数据学习(14)"/>
大数据学习(14)
&&大数据学习&&
🔥系列专栏: 👑哲学语录: 承认自己的无知,乃是开启智慧的大门
💖如果觉得博主的文章还不错的话,请点赞👍+收藏⭐️+留言📝支持一下博>主哦🤞
什么是Map Join和Common Join。
在解释这个问题之前,我们先了解一下Hive中的两种Join操作:Map Join和Common Join。
- Map Join:在Map阶段进行Join操作。它先将小表(或小表列表)读入内存,然后在Map过程中,对于每个大表的数据,如果它与内存中的小表有匹配的键值,那么就将这个大表的数据与小表的数据关联起来,输出为一个键值对。Map Join适用于小表和大数据的关联,因为它直接在Map阶段进行了关联操作,避免了在Reduce阶段进行大规模的排序和扫描。
- 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任务”。
为了搞清楚这个,整整掉了一整天头发。
更多推荐
大数据学习(14)
发布评论