Hive
Hive的简介
hive是构建再hadoop上的数据仓库工具,可以将结构化的数据映射成一张数据表,并可以使用类sql的方式,来对这样的数据文件进行读写,以及管理(包括元数据),这套HIVE SQL 简称HQL。hive的执行引擎可以是MR、spark、tez。
hive的优点
1、hive的学习成本低
提供类sql的从查询语言HQL,避免了直接写MapReduce,减少开发人员的学习成本。
2、可扩展性好
为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统),Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
3、适合做离线分析处理(OLAP)
Hive的执行延迟比较高,因此Hive常用于数据分析,对实时性要求不高的场合。
4、延展性好
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
5、良好的容错性
某个数据节点出现问题HQL仍可完成执行。
6、统一管理
提供了统一的元数据管理
概念扩展
OLAP(On-Line Analytical Processing)联机分析处理,也称为面向交易的处理过程,其基本特征是前台接收的用户数据可以立即传送到计算中心进行处理,并在很短的时间内给出处理结果,是对用户操作快速响应的方式之一。应用在数据仓库,使用对象是决策者。OLAP系统强调的是数据分析,响应速度要求没那么高。
OLTP(On-Line Transaction Processing)联机事务处理,它使分析人员能够迅速、一致、交互地从各个方面观察信息,以达到深入理解数据的目的。它具有FASMI(Fast Analysis of Shared Multidimensional Information),即共享多维信息的快速分析的特征。主要应用是传统关系型数据库。OLTP系统强调的是内存效率,实时性比较高。
Hive的架构
1. 用户连接接口
CLI:是指Shell命令行
JDBC/ODBC:是指Hive的java实现,与传统数据库JDBC类似。
WebUI:是指可通过浏览器访问Hive。
2. thriftserver:
hive的可选组件,此组件是一个软件框架服务,允许客户端使用包括Java、C++、Ruby和其他很多种语言,通过
编程的方式远程访问Hive。
3. 元数据
Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括(表名、表所属的数据库名、表的拥有
者、列/分区字段、表的类型(是否是外部表)、表的数据所在目录等)
4. 驱动器(Driver)
- 解析器(SQLParser):
将HQL字符串转换成抽象语法树AST,这一步一般都用第三方工具库完成,比如antlr;对AST进行语法
分析,比如表是否存在、字段是否存在、SQL语义是否有误。
- 编译器(Compiler):
对hql语句进行词法、语法、语义的编译(需要跟元数据关联),编译完成后会生成一个执行计划。hive上就
是编译成mapreduce的job。
- 优化器(Optimizer):
将执行计划进行优化,减少不必要的列、使用分区、使用索引等。优化job。
- 执行器(Executer):
将优化后的执行计划提交给hadoop的yarn上执行。提交job。
5. hadoop
Jobtracker是hadoop1.x中的组件,它的功能相当于:Resourcemanager+AppMaster
TaskTracker相当于:Nodemanager + yarnchild
Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成
注意: 包含 * 的全表查询,比如select * from table 不会生成MapRedcue任务
包含 * 的limit查询,比如select * from table limit 3 不会生成MapRedcue任务
Hive的工作原理
1、用户提交查询等任务给Driver。
2、驱动程序将hql发送给编译器,检验语法和生成查询规则。
3、编译器compiler根据用户任务去metastore中获取需要的hive元数据信息。
4、编译器compiler得到元数据信息,对任务进行编译,先将hql转化为抽象语法树,然后将抽象语法树转换成查询块,将查询块转化为逻辑的查询计划,重写逻辑查询计划,将逻辑计划转化为物理计划(MapReduce),最后选择最佳的策略。
5、将最终的计划提交给Driver,到此为止,查询解析和编译完成。
6、Driver将计划Plan转交给ExecutionEngine去执行。
7、在内部,执行作业的是一个MapReduce过程,执行引擎发送作业给JobTracker,在名称节点并把它分配作业到TaskTracker,这是在数据节点,