在大数据离线批处理中,需求【大表(事实表)与小表(维度表)】关联字段,进行分析
Hive 默认开启Map端Join
-
将小表数据加载到 Hash table file中 分布式缓存,每个task 都有一份
-
将小表数据放到文件中
-
过程:
- 先加载小表数据 存储到Hash table文件中
2.将文件中的数据 存放到分布式缓存中
3.大表中的每个task从分布式缓存中拉取数据
MapJoin只有maptask 没有reduceTask 没有shuffle 提高了性能
Spark Broadcast Join
-
spark采用 广播join 将小表数据放到hash集合中, 广播到executor内存中,被该executor中的task共享,该小表只能读不能写
-
将小表数据放到 变量中
-
开启
image.png
spark.sql.autoBroadcastJoinThreshold 值为-1
- 那么该小表是多大呢, 默认是10M 实际开发中要修改
Performance Tuning - Spark 3.3.0 Documentation (apache.org) - 那么怎样查看一个表的大小
ANALYZE TABLE <tableName> COMPUTE STATISTICS noscan
分析表 表名 计算 统计信息 不开启全局扫描
Flink
两种方式 广播变量 和 分布式缓存
- 广播变量 :==将数据(封装到DataSet)广播到TaskManager==上就可以==供TaskManager中的SubTask/task==去使用,数据在内存中
- 分布式缓存:缓存数据文件数据,数据放在文件中;
网友评论