hive进阶--调优、源码、debug调试方法

hive进阶

  • hive的调优
    • explain查看执行计划
    • hive建表优化
    • hql语法优化
    • 数据倾斜(重点)优化
    • hive job优化
    • hive on spark
  • hive的源码
    • hive如何转换为mr任务(框架)
    • hive如何转换为mr任务(源码)重点 有个框架是很细的
    • hive源码debug模式调试介绍

explain查看执行计划

  • 不可能每次优化都执行一次,执行几个小时,因此需要通过explain查看执行计划,看优化是否达到目标;
  • 一般就是 expain select click_url fron bigtable
  • 里面分了stage 有fetch operator操作;

hive的建表优化

  • Hive 中的分区就是分目录,把一个大的数据集根据业务需要分割成小的数据集。 在查询时通过 WHERE 子句中的表达式选择查询所需要的指定的分区,这样的查询效率会提高很多,所以我们需要把常常用在 WHERE 语句中的字段指定为表的分区字段;

  • partitoned by (day string) row format delimited fileds terminated by '\t'

  • 分区表加载数据时,必须指定分区;

  • 增加分区 alter table t_name add partition(day='20200404');

  • 删除分区 alter table t_name drop partition(...)

  • 查看分区表有多少分区 show partitions t_name

  • 查看分区表结构 desc formatted t_name

  • 二级分区(数据量很多的时候),动态分区(insert数据的时候,自动根据分区字段的值,将数据对应插入);

  • 分桶表:分区针对的是数据的存储路径,分桶针对的是数据文件。

  • Hive 可以进一步组织成桶,也就是更为细粒度的数据范围划分。

  • clustered by into 4 bucks

  • 分桶规则:Hive 的分桶采用对分桶字段的值进行哈希,然后除以桶的个数求余的方式决定该条记录存放在哪个桶当中

  • 适合于抽样查询:有时用户需要使用的是一个具有代表性的查询结果而不是全部结果

  • 合适的文件格式:行 TEXTFILE 、SEQUENCEFILE、 列:ORC、PARQUET

  • 行存储的场景:查询满足条件的一整行数据的时候列存储则需要去每个聚集的字段找到对应的每个列的值,行存储只需要找到其中一个值,其余的值都在相邻地方,所以此时行存储查询的速度更快(select *

  • 列存储的场景:因为每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量;每个字段的数据类型一定是相同的,列式存储可以针对性的设计更好的设计压缩算法。(select 一列)

  • TextFile 格式 默认格式,数据不做压缩,磁盘开销大,数据解析开销大

  • Orc 行存储

  • Parquet 格式:Parquet 文件是以二进制方式存储的,所以是不可以直接读取的,文件中包括该文件的数据和元数据,因此 Parquet 格式文件是自解析的

  • 合适的压缩格式:主要是 LZO 和 Snappy

  • name 支持切片? 是否自带 后缀名? 算法? 原来的程序时候需要修改?
    LZO .lzo lzo 需要建索引,还需要指定输入格式
    snappy .snappy snappy 不需要

hql语法优化

  • 单表查询的优化:

  • 列裁剪与分区裁剪

    • 列裁剪就是在查询时只读取需要的列</
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值