(图片来源于网络,侵删)


一、Hive简介

【1】什么是Hive

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能(HQL)
其本质是将SQL转换为MapReduce的任务进行运算,底层由HDFS来提供数据的存储,元数据由数据库来存储(默认元数据存储在derby中,但这种方式只允许一个客户端连接数据库,所以只适合测试环境。实际开发过程中大部分都是用MySQL进行管理Hive元数据)

Hive可以理解为一个将SQL转换为MapReduce的任务的工具,减少了开发人员的学习成本

【2】Hive的特点

  • 【1】扩展性 :Hive依靠HDFS作为存储,HDFS具有可扩展性,所以Hive也可以自由的扩展集群的规模
  • 【2】延展性: Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
  • 【3】容错性:良好的容错性,节点出现问题SQL仍可完成执行(本质是转换为MR程序,MR程序运行在Yarn上,由ApplicationMaster进行监控调度,节点出现问题,自动将任务调度到其他节点继续执行)

【3】Hive的缺点

  • 【1】Hive 不支持记录级别的增删改操作,但是用户可以通过查询生成新表或者将查询结果导入到文件中(当前选择的 hive-2.3.2 的版本支持记录级别的插入操作)
  • 【2】Hive 的查询延时很严重,因为 MapReduce Job 的启动过程消耗很长时间,所以不能用在交互查询系统中
  • 【3】Hive 不支持事务(因为没有改,所以主要用来做 OLAP(联机分析处理),而 不是 OLTP(联机事务处理),这就是数据处理的两大级别)

【4.】Hive与传统数据库的对比图


总结:

Hive具有SQL数据库的外表,但应用场景完全不同,Hive只适合用来做海量离线数据统计分析,也就是数据仓库

【5】Hive架构图

1、用户接口: shell/CLI, jdbc/odbc, webui Command Line Interface

ClI,Shell 终端命令行(Command Line Interface),采用交互形式使用 Hive 命令行与 Hive 进行交互,最常用(学习,调试,生产)

JDBC/ODBC,是 Hive 的基于 JDBC 操作提供的客户端,用户(开发员,运维人员)通过 这连接至 Hive server 服务

Web UI,通过浏览器访问 Hive

2、跨语言服务 : thrift server 提供了一种能力,让用户可以使用多种不同的语言来操纵hive

Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发, Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口

3、底层的Driver: 驱动器Driver,编译器Compiler,优化器Optimizer,执行器Executor

Driver 组件完成 HQL 查询语句从词法分析,语法分析,编译,优化,以及生成逻辑执行 计划的生成。生成的逻辑执行计划存储在 HDFS 中,并随后由 MapReduce 调用执行

Hive 的核心是驱动引擎, 驱动引擎由四部分组成:

(1) 解释器:解释器的作用是将 HiveSQL 语句转换为抽象语法树(AST)

(2) 编译器:编译器是将语法树编译为逻辑执行计划

(3) 优化器:优化器是对逻辑执行计划进行优化

(4) 执行器:执行器是调用底层的运行框架执行逻辑执行计划

4、元数据存储系统 : RDBMS MySQL

元数据,通俗的讲,就是存储在 Hive 中的数据的描述信息

Hive 中的元数据通常包括:表的名字,表的列和分区及其属性,表的属性(内部表和外部表),表的数据所在目录

Metastore 默认存在自带的 Derby 数据库中吗,缺点就是不适合多用户操作,并且数据存储目录不固定,数据库跟着 Hive 走,极度不方便管理

解决方案:通常存我们自己创建的 MySQL 库(本地 或 远程)

Hive 和 MySQL 之间通过 MetaStore 服务交互

执行流程

HQL 通过命令行或者客户端提交,经过 Compiler 编译器,运用 MetaStore 中的元数据进行类型检测和语法分析,生成一个逻辑方案(Logical Plan),然后通过的优化处理,产生 一个 MapReduce 任务

【6】Hive的数据存储

  • 1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)只需要在创建表的时候告诉 Hive数据中的列分隔符行分隔符,Hive 就可以解析数据

  • 2、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket

  • 3、DB:在HDFS中表现为${hive.metastore.warehouse.dir}目录下的一个目录

  • 4、Table:在HDFS中表现为所属DB目录下一个目录

  • 5、External Table:与Table类似,不过其数据存放位置可以在任意指定路径

  • 6、partition:在HDFS中表现为Table目录下的子目录

  • 7、bucket:在HDFS中表现为一个表目录下根据hash散列之后的多个文件

【7】Hive的数据格式

当数据存储在文本文件中,必须按照一定格式区别行和列,并且在Hive中指明行、列的分割符。Hive默认使用了几个平时很少出现的字符,这些字符一般不会作为内容出现在记录中

Hive默认的行和列分隔符如下表所示

分隔符 描述
\n 对于文本文件来说,每行是一条记录,所以\n 来分割记录
^A (Ctrl+v Ctrl+A) 分割字段,也可以用\001 来表示
^B (Ctrl+v Ctrl+B) 用于分割 Arrary 或者 Struct 中的元素,或者用于 map 中键值之间的分割,也可以用\002 分割
^C (Ctrl+v Ctrl+C) 用于 map 中键和值自己分割,也可以用\003 表示

【8】Hive的数据类型

基本数据类型 长度
TINYINT 1byte有符号整数
SMALINT 2byte有符号整数
INT 4byte有符号整数
BIGINT 8byte有符号整数
BOOLEAN 布尔类型,true或者false
FLOAT 单精度浮点数
DOUBLE 字符系列,可以指定字符集。可以使用单引号或者双引号
STRING 1byte有符号整数
TIMESTAMP 时间类型
BINARY 字节数组
集合数据类型 长度
Struct 和c语言中的struct类似,都可以通过“点”符号访问元素内容。例如,如果某个列的数据类型是STRUCT{first STRING, last STRING},那么第1个元素可以通过字段.first来引用
Map MAP是一组键-值对元组集合,使用数组表示法可以访问数据。例如,如果某个列的数据类型是MAP,其中键->值对是’first’->’John’和’last’->’Doe’,那么可以通过字段名[‘last’]获取最后一个元素
Array 数组是一组具有相同类型和名称的变量的集合。这些变量称为数组的元素,每个数组元素都有一个编号,编号从零开始。例如,数组值为[‘John’, ‘Doe’],那么第2个元素可以通过数组名[1]进行引用

注意:对于什么时候使用Map和Struct,取决于字段名是否发生变化,如果变化就使用Map,否则使用结构体Struct!

【9】Hive的类型转化

Hive的原子数据类型是可以进行隐式转换的,类似于Java的类型转换,例如某表达式使用INT类型,TINYINT会自动转换为INT类型,但是Hive不会进行反向转化,例如,某表达式使用TINYINT类型,INT不会自动转换为TINYINT类型,它会返回错误,除非使用CAST操作
【1】任何数据类型都可以隐式地转换为一个范围更广的类型,如TINYINT可以转换成INT,INT可以转换成BIGINT
【2】所有整数类型、FLOAT、STRING都可以隐式地转换成DOUBLE
【3】TINYINT、SMALLINT、INT都可以转换为FLOAT
【4】BOOLEAN类型不可以转换为任何其他类型
【5】可以使用CAST操作显示进行数据类型的转化,例如:CAST("1" AS INT)把字符串 1 转化成整数 1,如果强制类型转换失败,如执行CAST("x" AS INT),表达式返回值为 NULL


都看到这里了,点赞评论一下吧!!!

点击查看

【Hive】Hive入门解析(一)相关推荐

  1. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  2. Hive从入门到放弃——HiveQL表级别DDL设计的艺术性(五)

    HiveQL数据库中的表DDL操作   博客Hive从入门到放弃--HiveQL数据库级别DDL设计的艺术性(四)聊完了数据库的基本操作,我们再来聊聊Hive内表的操作. 创建表   官方推荐建表的结 ...

  3. Hive ---- Hive入门

    Hive ---- Hive入门 1. 什么是Hive 1. Hive简介 2. Hive本质 2. Hive架构原理 1. 用户接口:Client 2. 元数据:Metastore 3. 驱动器:D ...

  4. Hive 快速入门(全面)

    转载: https://www.codercto.com/a/5110.html 前言 我写这篇文章的目的是尽可能全面地对Hive进行入门介绍,这篇文章是基于hive-1.0.0版本介绍的,这个版本的 ...

  5. 6、HIVE JDBC开发、UDF、体系结构、Thrift服务器、Driver、元数据库Metastore、数据库连接模式、单/多用户模式、远程服务模式、Hive技术原理解析、优化等(整理的笔记)

    目录: 5 HIVE开发 5.1 Hive JDBC开发 5.2 Hive UDF 6 Hive的体系结构 6.2 Thrift服务器 6.3 Driver 6.4 元数据库Metastore 6.5 ...

  6. hadoop hive hbase 入门学习 (二)

    hadoop 自学系列                hadoop hive hbase 入门学习 (一) hadoop安装.hdfs学习及mapreduce学习 hadoop 软件下载 (hadoo ...

  7. 《Hive系列》Hive详细入门教程

    目录 1 Hive基本概念 1.1 什么是Hive Hive简介 Hive:由FaceBook开源用于解决海量结构化日志的数据统计工具 Hive:基于Hadoop的一个数据仓库工具,可以将结构化的数据 ...

  8. Hive从入门到高级

    目录 一.Hive的简介 1.1 出现的原因 1.2 hive是什么 1.3 Hive的优缺点 二.hive的框架原理(重点) 二.hive的框架原理(重点) 2.1 hive的框架结构 2.2 hi ...

  9. Hive从入门到放弃——Hive表DML的艺术性(八)

    背 景   HiveQL语法和MySQL的语法很像,当然Hive本身作为大数据的数据仓库,本身对数据的修改和删除并不铭感,虽然Hive支持通过ORC为存储文件实现数据的删除和修改,但是这个功能相对比较 ...

最新文章

  1. mysql 主主同步失败_Mysql主主同步失败后的恢复
  2. 细说Redis监控和告警
  3. C# 读写ini文件 保存信息
  4. D:Ehab the Xorcist
  5. You have unstaged changes.
  6. python paramiko invoke_shell_Python,paramiko,invoke_shell和丑陋的字符
  7. 免费人脸识别工具可以跟踪社交媒体网站上的人
  8. Java学习笔记2.3.6 运算符与表达式 - 条件运算符
  9. vue 复制 长按_Vue
  10. DNS服务系列之二:DNS区域传送漏洞的安全案例
  11. 人脸对齐(二十一)--A Recurrent Encoder-Decoder Network for Sequential Face Alignment
  12. python3.7怎么用ghost.py_python ghost.py使用笔记
  13. js通过浏览器批量下载图片代码
  14. RV减速器动力学模型静力学matlab程序代码
  15. 3.8086/8088微处理器结构
  16. Excel技巧—几个快速填充公式更高效的小技巧
  17. 高级筛选英语或计算机分数大于85,WPS:如何在WPS中高级筛选分析学生成绩?
  18. ios 打包 验证应用失败原因汇总
  19. 台湾大学教授洪士灏对产业前景的讨论
  20. Spring Boot 实现定时任务

热门文章

  1. java基础学习—— 六
  2. verilog实现有符号数求绝对值
  3. 【黑金动力社区】【531体验板教程】 第三章 开发环境(三)
  4. php 赠送礼品功能开发,类似礼物说送礼提醒的功能该怎么做?
  5. 软件自动化测试订飞机票,用 Selenium 搞定自动化测试项目,途牛搜机票。
  6. vue疫情大屏数据展示+数据导出+地图图片下载
  7. 【白兔兔】TiKZ画浮动汇率制度下的财政政策图
  8. 论文检测的时间段是什么时候?
  9. 国内云计算的下半场机遇在哪里?
  10. 网络营销实战课-微博实操