目录
百战程序员,全站22050+开发课程+文档 ,学习精选优质好课快人一步!观看视频 快捷键ALT+N

大数据全系列 教程

1869个小节阅读:464.8k

收藏
全部开发者教程

JAVA全系列 教程

面向对象的程序设计语言

Python全系列 教程

Python3.x版本,未来主流的版本

人工智能 教程

顺势而为,AI创新未来

大厂算法 教程

算法,程序员自我提升必经之路

C++ 教程

一门通用计算机编程语言

微服务 教程

目前业界流行的框架组合

web前端全系列 教程

通向WEB技术世界的钥匙

大数据全系列 教程

站在云端操控万千数据

AIGC全能工具班

A

A A

White Night

阅读(260)
赞(0)

10.9 表优化

10.9.1 小表与大表join

Hive Join

官网搜索:join->LanguageManual Joins

https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Joins

reduce side join

reduce side join是一种最简单的join方式,其主要思想如下: 在map阶段,map函数同时读取两个文件File1和File2,为了区分两种来源的key/value数据对,对每条数据打一个标签> (tag),比如:tag=1表示来自文件File1,tag=2表示来自文件File2。即:map阶段的主要任务是对不同文件中的数据打标签。> 在reduce阶段,reduce函数获取key相同的来自File1和File2文件的value list, 然后对于同一个key,对File1和File2中的数据进行join(笛卡尔乘积)。即:reduce阶段进行实际的连接操作。

map side join

之所以存在reduce side join,是因为在map阶段不能获取所有需要的join字段,即:同一个key对应的字段可能位于不同map中。Reduce side join是非常低效的,因为shuffle阶段要进行大量的数据传输。 Map side join是针对以下场景进行的优化:两个待连接表中,有一个表非常大,而另一个表非常小,以至于小表可以直接存放到内存中。这样,我们可以将小表复制多 份,让每个map task内存中存在一份(比如存放到hash table中),然后只扫描大表:对于大表中的每一条记录key/value,在hash table中查找是否有相同的key的记录,如果有,则连接后输出即可。

Join计算时,将小表(驱动表)放在join的左边

Map Join:在Map端完成Join

两种实现方式:

1、SQL方式,在SQL语句中添加MapJoin标记(mapjoin hint)

语法:

2、开启自动的MapJoin

大小判断标准,表数据的大小而不是行数。(通常行少的数据一般是小表)

hive.ignore.mapjoin.hint;默认为true,如果自动和手动冲突了,手动的配置失效,以自动配置为准。

将key相对分散,并数据量小的表放在join的左边,这样可以有效减少内存溢出发生的几率;还可以使用map join让小的维度表(1000条一下的记录数据)先进内存,在map端完成join。

测试发现新版的hive已经对小表join大表和大表join小表进行了优化,小表放在左边和右边已经没有明显的区别。

map join原理分析:

在Map端完成Join。如果不指定 MapJoin或者不符合MapJoin的条件,那么Hive解析器会将Join操作转换成CommonJoin,在reduce阶段完成join。容易发生倾斜。可以用MapJoin将小表全部加装到内存,在map端完成join,避免reducer处理。

相关配置参数:

  1. hive.mapjoin.smalltable.filesize; #默认25M

(大表小表判断的阈值,如果表的大小小于该值则会被加载到内存中运行)

  1. hive.ignore.mapjoin.hint;

(默认值:true;是否忽略mapjoin hint 即mapjoin标记)

  1. hive.auto.convert.join.noconditionaltask;

(默认值:true;将普通的join转化为普通的mapjoin时,是否将多个mapjoin转化为一个mapjoin)

  1. hive.auto.convert.join.noconditionaltask.size;

(将多个mapjoin转化为一个mapjoin时,其表的最大值)

扩展:hive.groupby.skewindata 避免数据倾斜,一个MR变2个:MR->MR,先做一次数据合并,有时候一个MR都即将100%的时候卡着不动了,分两个完成。

北京市昌平区回龙观镇南店村综合商业楼2楼226室

©2014-2023 百战卓越(北京)科技有限公司 All Rights Reserved.

京ICP备14032124号-2