Hive学习3:综合梳理
什么是Hive
Hive是建立在 Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类 SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。
Hive是SQL解析引擎,它将SQL语句转译成M/R Job然后在Hadoop执行。
Hive的表其实就是HDFS的目录/文件,按表名把文件夹分开。如果是分区表,则分区值是子文件夹,可以直接在M/R Job里使用这些数据。
Hive的系统架构
在Hive系统架构中,有三个最外层的接口,分别是CLI(命令行接口)、JDBC/ODBC、WebUI(浏览器访问Hive)。
Driver组件:该组件包括Complier、Optimizer和Executor,它的作用是将我们写的HiveQL(类SQL)语句进行解析、编译优化,生成执行计划,然后调用底层的mapreduce计算框架。
Metastore组件:元数据服务组件,这个组件存储hive的元数据,hive的元数据存储在关系数据库里,hive支持的关系数据库有derby、mysql。元数据对于hive十分重要,因此hive支持把metastore服务独立出来,安装到远程的服务器集群里,从而解耦hive服务和metastore服务,保证hive运行的健壮性,这个方面的知识,我会在后面的metastore小节里做详细的讲解。
Thrift服务:thrift是facebook开发的一个软件框架,它用来进行可扩展且跨语言的服务的开发,hive集成了该服务,能让不同的编程语言调用hive的接口。
CLI:command line interface,命令行接口。
Thrift客户端:上面的架构图里没有写上Thrift客户端,但是hive架构的许多客户端接口是建立在thrift客户端之上,包括JDBC和ODBC接口。
WEBGUI:hive客户端提供了一种通过网页的方式访问hive所提供的服务。这个接口对应hive的hwi组件(hive web interface),使用前要启动hwi服务。
Hive将元数据存储在数据库中,支持mysql、derby等。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性、表的数据所在目录。
解释器、编译器、优化器完成HQL查询语句从词法分析,语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后又MapReduce调用执。
Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含的查询,比如select from table不会生成MapReduce任务)。
Hive的特点
- 可扩展
Hive可以自由的扩展集群的规模,一般情况下不需要重启服务 - 延展性
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数 - 容错
良好的容错性,节点出现问题SQL仍可完成执行Hive与Hadoop的关系