概述
1.什么是Hive
Hive是建立在Hadoop上的数据仓库基础架构。可以将结构化的数据映射为一张数据库表,并提供类SQL查询功能。
详解
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。
它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
架构
Hive提供了一个SQL命令的操作接口,允许用户可以使用类似SQL的Hive的Query Language执行一些离线的SQL分析。但是Hive和传统的数据库不同,Hive只是构建在Hadoop的MapReduce之上的SQL解析工具,并不参与数据的管理和存储,Hive中所有的数据都是在运行任务的时候才会真正的加载。
具体流程为:
1.Hive读取用户的SQL脚本。
2.到数据库中(Mysql)中查询所映射的元数据信息。(Mysql主要负责存储Hive逻辑表到HDFS物理文件的映射信息,因此,Hive在做计算之前,需要查询Mysql生成逻辑计划,然后生成MapReduce可以执行的物理计划)
3.生成SQL的逻辑执行计划。
4.由MapReduce执行物理计划。
5.读取MapReduce的结构。
6.将结构返回用户。
第2到4步就体现了Hive的本质,用来将SQL语句转换为MapReduce执行。
2.为什么使用Hive
-
直接使用hadoop所面临的问题
人员学习成本太高、项目周期要求太短、MapReduce实现复杂查询逻辑开发难度太大。 -
为什么要使用Hive
操作接口采用类SQL语法,提供快速开发的能力。
避免了去写MapReduce,减少开发人员的学习成本。
扩展功能很方便。
3.Hive和关系型数据库的区别
- Hive和关系数据库存储文件的系统不同,Hive使用的是Hadoop的HDFS,关系数据库则是服务器本地的文件系统。
- Hive使用的计算模型是MapReduce,而关系数据库则是自己设计的计算模型。
- 关系数据库都是为OLTP进行设计的,而Hive则是为海量数据做数据挖掘设计的,实时性很差,实时性的区别导致Hive的应用场景和关系数据库有很大的不同。
- Hive很容易扩展自己的存储能力和计算能力,这个是继承Hadoop的特性,而关系数据库在这个方面要比Hive差很多。
4.Hive的特点
-
可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。 -
延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。 -
容错
良好的容错性,节点出现问题SQL仍可完成执行。
5.Hive与Hadoop的关系
Hive利用HDFS存储数据,利用MapReduce查询数据
6.Hive的数据存储
- Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
- 只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
- Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
table:在hdfs中表现所属db目录下一个文件夹
external table:与table类似,不过其数据存放位置可以在任意指定路径
partition:在hdfs中表现为table目录下的子目录
bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件
7.Hive表的数据类型
Hive支持原始数据类型和复杂类型,原始类型包括数值型,Boolean,字符串,时间戳。复杂类型包括数组,map,struct。下面是Hive数据类型的一个总结:
原始类型
复杂类型
来源:CSDN
作者:丿沐染烟忱丶
链接:https://blog.csdn.net/weixin_45607513/article/details/103915912