Hive的优化手段

原创
小哥 3年前 (2022-11-02) 阅读数 40 #大杂烩

1、join连接时的优化:更多2个表进行join关联操作时,如果 on 后面 JOIN 的 key 同样,无论有多少个表,它们都将被合并为一个表。 Map-Reduce。

INSERT OVERWRITE TABLE test_users 
SELECT 
    t.pageid,
    u.age 
FROM test_view t 
JOIN user u ON (t.userid = u.userid) 
JOIN newuser x ON (t.userid = x.userid);
--只生成一个MapReduce

2、join连接时优化:当查询多个表时,从左到右的表的大小顺序应从小到大。原因:hive当记录每一行时,其他表将被缓存,直到扫描最后一个表进行计算。如果所有表中的一个表足够小,则可以将其放入内存中,以便在连接其他表时完成匹配并省略匹配。reduce流程。可以实现属性的设置,set hive.auto.covert.join=true; 用户可以配置他们想要优化的小表的大小。 set hive.mapjoin.smalltable.size=2500000; 如果您需要使用这两种配置,可以放置。$HOME/.hiverc文件中。
3、在where向子句添加分区筛选器。
4,当您可以使用LEFT SEMI JOIN 不要使用语法INNER JOIN语法方面,前者效率更高。原因:对于左表中指定的记录,一旦在右表中找到该记录,立即停止扫描。使用LEFT SEMI JOIN 当A表中的记录,在B表会在满足条件后返回,不会继续查找。B表记录了,所以如果。B表有重复,不产生重复的多条记录;JOIN ON的时候,A,B该表与两条记录相关联,这两条记录应该是ON条件是。
5同一数据的多个处理:从一个数据源生成的多个数据聚合不需要为每个聚合重新扫描。
例如:insert overwrite table student select  from employee; insert overwrite table person select from employee;
可以优化:from employee insert overwrite table student select insert overwrite table person select
6、limit调优:limit语句通常在执行完整个语句后返回部分结果。set hive.limit.optimize.enable=true;
7,打开并发执行。一些job该任务可能包含多个阶段,其中一些阶段可以在没有依赖项的情况下并发执行。job可以更快地完成任务。设置属性:set hive.exec.parallel=true;
8、hive提供严格的模式,禁止3在本例中为查询模式。
a:当表是分区表时,where当句子后面没有分区字段和限制时,不允许执行。
b:当使用order by语句,则必须使用limit菲尔德,因为order by 只会产生一个reduce任务。
c:限制笛卡尔乘积的查询。
9,合理的设置map和reduce数量。
10、jvm再利用。可用hadoop的mapred-site.xml中设置jvm它被重复使用的次数。

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门