当前位置: 首页 > news >正文

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 查看表类型

相关文章:

  • 有向图的强连通分量
  • 新建SpringBoot Maven项目中pom常用依赖配置及常用的依赖的介绍
  • 想搞清楚API网关到底是什么?请看这篇
  • 【STM32F4系列】【HAL库】电机控制(转速和角度)(PID实战1)
  • 设定目标(1)- 为什么你每天感觉很忙却没什么拿得出手的业绩?
  • Java 进阶集合Set、Map(二)
  • 2022-Docker常用命令
  • Spring中事务传播特性(Propagation)
  • Matlab:Matlab编程语言应用之数学统计(柱状图、曲线分析等)的使用方法简介、案例实现之详细攻略
  • YOLOv7改进之二十五:引入Swin Transformer
  • 03 nginx 是如何自动推导文件的 content-type 的
  • Java 8 Stream 从入门到进阶——像SQL一样玩转集合
  • C++STL详解(五)mapset的使用及其模拟实现
  • 串口通信-USART和UART的区别
  • Docker常见操作
  • 【347天】每日项目总结系列085(2018.01.18)
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • Android交互
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • javascript从右向左截取指定位数字符的3种方法
  • Less 日常用法
  • python docx文档转html页面
  • Sass 快速入门教程
  • SpiderData 2019年2月16日 DApp数据排行榜
  • win10下安装mysql5.7
  • 第十八天-企业应用架构模式-基本模式
  • 服务器之间,相同帐号,实现免密钥登录
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 机器学习中为什么要做归一化normalization
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 猫头鹰的深夜翻译:JDK9 NotNullOrElse方法
  • 让你的分享飞起来——极光推出社会化分享组件
  • 学习ES6 变量的解构赋值
  • 中文输入法与React文本输入框的问题与解决方案
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • ionic入门之数据绑定显示-1
  • 积累各种好的链接
  • # Panda3d 碰撞检测系统介绍
  • #ifdef 的技巧用法
  • #Ubuntu(修改root信息)
  • (007)XHTML文档之标题——h1~h6
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (vue)页面文件上传获取:action地址
  • (附源码)计算机毕业设计SSM基于健身房管理系统
  • (力扣)1314.矩阵区域和
  • (算法)前K大的和
  • (一)kafka实战——kafka源码编译启动
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (转)拼包函数及网络封包的异常处理(含代码)
  • (转载)hibernate缓存
  • ******之网络***——物理***
  • .net知识和学习方法系列(二十一)CLR-枚举
  • .so文件(linux系统)
  • @JsonFormat与@DateTimeFormat注解的使用
  • [20190416]完善shared latch测试脚本2.txt