Hive基本概念
1.1 Hive简介
1.1.1 什么是Hive
Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供类SQL查询功能。
1.1.2 为什么使用Hive
- 缺点
- 直接使用hadoop所面临的问题
- 人员学习成本太高
- 项目周期要求太短
- MapReduce实现复杂查询逻辑开发难度太大
- 优点
- 操作接口采用类SQL语法,提供快速开发的能力。
- 避免了去写MapReduce,减少开发人员的学习成本。
- 扩展功能很方便。
1.1.3 Hive的特点
- 可扩展
- Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
- 延展性
- Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
- 容错
- 良好的容错性,节点出现问题SQL仍可完成执行。
1.2 Hive架构
1.2.1 架构图
Jobtracker是hadoop1.x中的组件,它的功能相当于: Resourcemanager+AppMaster
TaskTracker 相当于: Nodemanager + yarnchild
1.2.2 基本组成
1.2.3 各组件的基本功能
- 用户接口:包括 CLI、JDBC/ODBC、WebGUI。
- 元数据存储:通常是存储在关系数据库如 mysql , derby中。
- 解释器、编译器、优化器、执行器。
- 用户接口主要由三个:CLI、JDBC/ODBC和WebGUI。其中,CLI为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
- 元数据存储:Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
- 解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
1.3 Hive与Hadoop的关系
1. 如何理解Hive
(1)从概念上来看
-> Hive是基于Hadoop的一个数据仓库工具;它是MapReduce的一个封装,底层就是MapReduce程序;
-> Hive可以将结构化的数据文件(eg:按照各字段分类的数据)映射成一张虚表,并提供类SQL查询功能;
-> 有了Hive后我们就不用再写麻烦的MapReduce程序了。
(2)从本质上来看
Hive就是把sql语句转化为MapReduce程序。
Hive没有服务端,它本质是Hadoop或者说是HDFS的一个客户端,对HDFS的数据和Meta store的元数据进行操作;
通常我们启动Hive是通过JDBC客户端操作的;
ps:对比hadoop中,通过命令start-dfs.sh启动HDFS服务端,然后通过hadoop fs -命令来启动HDFS客户端进行实际操作;
服务端是提供后台服务的,客户端是进行具体操作然后让服务端提供对应服务的。
2. Hive中SQL-MapReduce原理图解
(1)事先将常用的SQL操作封装成MapReduce模板存放在Hive中;
(2)client依据实际需求写SQL语句,匹配对应的MapReduce模板,然后运行对应的MapReduce程序,
(3)生成相应的分析结果,返回给client。
所以说,Hive的本质是把SQL语句转化成了MapReduce程序。
3. 为什么说Hive是基于Hadoop的呢?
(1)Hive处理的数据实际存放在HDFS中,默认路径/user/hive/warehouse;
(2)Hive分析数据的底层实现还是MapReduce程序;
(3)Hive调度资源时,用的是Yarn框架;
(4)在服务器中运行Hive之前需要群起HDFS和YARN。
总结:hive具有sql数据库的外表,但应用场景完全不同,hive只适合用来做批量数据统计分析
1.4 Hive的数据存储
1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
3、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散列之后的多个文件
1.5 HIVE的安装部署
1.6.1 安装 - 单机版:
- 元数据库mysql版:
1.6.2 使用方式
- Hive交互shell
- bin/hive
- Hive thrift服务
启动方式,(假如是在hadoop01上):
启动为前台:bin/hiveserver2
启动为后台:nohup bin/hiveserver2 1>/var/log/hiveserver.log 2>/var/log/hiveserver.err &
启动成功后,可以在别的节点上用beeline去连接
- 方式(1)
hive/bin/beeline 回车,进入beeline的命令界面
输入命令连接hiveserver2beeline> !connect jdbc:hive2//master:10000
(hadoop01是hiveserver2所启动的那台主机名,端口默认是10000) - 方式(2)
或者启动就连接:bin/beeline -u jdbc:hive2://master:10000 -n root