0
点赞
收藏
分享

微信扫一扫

网络常识一:常用工具

窗外路过了谁 2024-05-14 阅读 19

Hive相关函数(部分):

  • if函数:

  • select if(a=a,’bbbb’,111) fromlxw_dual;
    bbbb
    select if(1<2,100,200) fromlxw_dual;
    200
    
  • nvl函数:

  • select nvl(principal,1)  from mydb.aaaaa;
    1
    
  • COALESCE函数

  • select COALESCE(null,’aaa’,50) from lxw_dual;
    aaa
    
  • CASE WHEN THEN 函数:

  • select case 100
        when 50 then 'tom'
        when 100 then 'mary'
        else 'tim' end
    from lxw_dual;
    mary
    select case 200 when 50 then 'tom'when 100 then 'mary' else 'tim' end from lxw_dual;
    tim
    
  • isnull() | isnotnull() 函数

hive的并行优化:

并行编译:

说明:

 并行执行:

说明:

关于并行优化, 必须要求服务器有资源, 如果没有资源, 及时满足并行的条件, 也不会执行

 Hive小文件合并:

HDFS中namenode中存储的元数据是什么?

小文件有什么影响呢?

从hive角度如何解决小文件过多的问题呢?

矢量化查询:

hive的默认查询执行引擎一次处理一行,而矢量化查询执行是一种hive特性,目的是按照每批1024行读取数据,并且一次性对整个记录整合(而不是对单条记录)应用操作,注意:要使用矢量化查询执行,就必须以ORC格式存储数据

set hive.vectorized.execution.enabled=true;

读取零拷贝:

ORC可以使用新的HDFS缓存API和ZeroCopy读取器来避免在扫描文件时将额外的数据复制到内存中。

set hive.exec.orc.zerocopy=true;

数据倾斜的优化:

什么是数据倾斜呢?

 数据倾斜会导致问题?

在执行什么SQL的时候, 会出现多个reduce的情况呢?

 如何解决数据倾斜的问题呢?

group by 数据倾斜

join的数据倾斜

解决方案一 : 
解决方案二:

建议:
    如果提前知道表中有那些key有倾斜, 直接使用编译期即可
    如果仅知道一部分, 对于其他key无法保证, 建议编译期和运行期同时开启

union all相关优化点:

如何感知有数据倾斜?

方案一: 通过查看 job history历史日志(19888)   适用于MR已经执行完成了。

 

 

 方案二: 在运行过程中借助HUE查看:

关联优化器

在Hive的一些复杂关联查询中,可能同时还包含有group by等能够触发shuffle的操作,有些时候shuffle操作是可以共享的,通过关联优化器选项,可以尽量减少复杂查询中的shuffle,从而提升性能。 

 总结:

常开项: 
set hive.exec.parallel=true;  是否开启并行执行
set hive.exec.parallel.thread.number=16;  最大允许并行执行的数量
set hive.vectorized.execution.enabled=true; 矢量化查询
set hive.exec.orc.zerocopy=true; 读取零拷贝
set hive.optimize.correlation=true; 关联优化器

针对性开启:
set hive.map.aggr=true; 开启 group by combiner数据倾斜方案
set hive.groupby.skewindata=true;开启groupby 负载均衡优化

set hive.optimize.skewjoin.compiletime=true; join的编译期优化

set hive.optimize.skewjoin=true; 是否开启运行期倾斜解决join
set hive.skewjoin.key=100000; 当key出现多少个的时候, 认为有倾斜

set hive.optimize.union.remove=true; union all优化

举报

相关推荐

0 条评论