大数据开发工程师-面试题-Hive(Hive如何进行优化)[通俗易懂]

大数据开发工程师-面试题-Hive(Hive如何进行优化)[通俗易懂]1数据存储及压缩优化针对hive中表的存储格式通常有textfile和orc,压缩格式一般使用snappy。相比于 textfile格式存储,o

大家好,欢迎来到IT知识分享网。

1数据存储及压缩优化

针对hive中表的存储格式通常有textfile和orc,压缩格式一般使用snappy。相比于 textfile格式存储,orc占有更少的存储。因为hive底层使用MR计算架构,数据流是hdfs到磁盘再到hdfs,而且会有很多次IO读写操作,所以使用orc数据格式和snappy压缩策略可以降低IO读写,还能降低网络传输量,这样在一定程度上可以节省存储空间,还能提升hql的执行效率;

2 Hive Job优化

① 调节Jvm参数,重用Jvm;

② 合理设置Map个数;

③ 合理设置Reduce个数;

3 Sql语法优化

建表优化

1) Hive创建表的时候,可以建分区表,分桶表;

2) Hive创建表的时候,可以指定数据存储格式:TextFile、SequenceFile、RCfile 、ORCfile;

查询时优化

1) 列裁剪,在查询时只读取需要的列,避免全列扫描,不要使用select * from table;

2) 分区裁剪:在查询时只读取需要分区的数据,避免全表扫描;

3) 开启谓词下推:set hive.optimize.ppd = true,默认是true:

a. 将Sql语句中的where谓词逻辑都尽可能提前执行,减少下游处理的数据量;

4) 大表join小表:

a. 开启MapJoin:set hive.auto.convert.join=true:

b. MapJoin是将Join双方比较小的那个表直接分发到各个Map进程的内存中,在 Map进程中进行Join操作,这样就不用进行Reduce步骤,从而提高了速度(大表left join小表才有效,小表left join大表会失效);

5) 大表join大表:

a. SMB Join :Sort Merge Bucket Join(数据不仅分桶了,而且每个桶数据是排好序了);

b. 开启SMB Join之后,底层是根据两个表join字段进行分桶存储,这样的话,两张表就变为了基于桶之间join关联查询,而不是基于整张表的join,减少了笛卡尔积;

6) 少用in,用left semi join替代in:

a. 原始写法:select a.id, a.name from a where a.id in (select b.id from b);

b. 用join改写:select a.id, a.name from a join b on a.id = b.id;

c. left semi join改写:select a.id, a.name from a left semi join b on a.id = b.id;

7) 用union all代替union,因为union all不需要去重,也不需要排序,效率高于union;

(每天1小题,进步1点点)

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/6224.html

(0)
上一篇 2022-12-17 12:00
下一篇 2022-12-17 12:20

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信