Hive基本概念

一、Hive中排序的种类和适用场景

1.1、order by 全局排序

  • 会对输入做全局排序,因此只有一个reducer(多个reducer无法保证全局有序),所以当输入的数据规模较大时,会导致计算的时间较长
  • 与数据库中 order by的区别在于在 hive 的严格模式下(hive.mapred.mode = strict)下,必须指定 limit ,否则执行会报错!

1.2、sort by 每个MapReduce排序

  • 不是全局排序,其在数据进入reducer前完成排序,单个有序。
  • sort by 的数据只能保证在同一reduce中的数据可以按指定字段排序
  • 不受 hive.mapred.mode 是否为strict ,nostrict 的影响,使用sort by 你可以指定执行的reduce 个数 (set mapred.reduce.tasks=

1.3、distribute by 每个分区排序

  • 按照指定的字段对数据进行划分输出到不同的reduce中
  • distribute by类似 MR 中 partition(自定义分区),进行分区,某个特定行应该到哪个 reducer ,通常是为了进行后续的聚集操作
  • distribute by + sort by
    • 分桶,保证同一字段值只存在一个结果文件当中,结合 sort by 保证 每个 reduceTask 结果有序
    • distribute by 和 sort by 的常见使用场景有:
      1. Map输出的文件大小不均
      2. Reduce输出文件不均
      3. 小文件过多
      4. 文件超大

1.4 、cluster by

  • 同一字段分桶并排序,不能和 sort by 连用,除了具有 distribute by 的功能外还兼具 sort by 的功能
  • 但是排序只能是 升序 排序,不能像distribute by 一样去指定排序的规则为 ASC 或者 DESC 。

二、Hive的几种存储方式

  • 行式存储:TextFile、SequenceFile
  • 列式存储:ORC、Parquet

Text File format : 默认格式,数据不做压缩,磁盘开销大,数据解析开销大。压缩后的文件不支持split,Hive不会对数据进行切分

Sequence File format

  • SequenceFile 是 Hadoop API 提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点
  • SequenceFile 支持三种压缩选择:NONE, RECORD, BLOCK。 Record 压缩率低,一般建议使用 BLOCK 压缩。

Parquet :

  • 列式数据存储。 查询比较快
  • Parquet支持嵌套的数据模型,每一个数据模型的schema包含多个字段,每一个字段有三个属性:重复次数、数据类型和字段名
  • 二进制方式存储的,是不可以直接读取和修改的。

ORC : 

  • ORC 将行的集合存储在一个文件中,并且集合内的行数据将以列式存储。采用列式格式,压缩非常容易,从而降低了大量的存储成本。
  • 当查询时,会查询特定列而不是查询整行,因为记录是以列式存储的。
  • ORC 会基于列创建索引,当查询的时候会很快。
  • ORC文件也是以二进制方式存储的,所以是不可以直接读

三、Hive调优问题(包括数据倾斜和小文件等问题)

参考:

Hive调优及优化(包含数据倾斜和小文件问题)_李大寶的博客-CSDN博客

四、数仓常见问题

参考:

数据仓库中基本概念_李大寶的博客-CSDN博客

五、Hive表的概念

参考:hive中内部表、外部表、分区表、桶表、拉链表_李大寶的博客-CSDN博客_hive 查看表类型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值