目录
- Hive是建立在Hadoop之上的开源数据仓库,将存储在Hadoop文件中的结构化、半结构化的数据文件映射为一张数据表,基于表提供类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在Hadoop文件中的大型数据集。
- Hive的核心是将HQL转换为MapReduce程序,然后将程序提交到Hadoop集群执行,并YARN进行资源管理。
Q:Hive的底层存数据用HDFS存,计算用MapReduce来计算 ,可以发现Hive是基于Hadoop来使用的,那么为什么不干脆使用Hadoop呢?
A:Hive为我们提供了可以编写SQL的功能,而不是编写程序,SQL的学习成本低,使用简单,Hive将对应的SQL转换成为MapReduce程序完成对数据的分析,有了Hive的加持,我们可以在Hadoop上写SQL来进行数据的搜索。
案例:在HDFS文件系统上有一个user.txt文件,现在需求是查询来自上海且年龄大于25的用户数量
Step1:用户编写查询该文件数据的SQL语句
Step2:Hive将SQL进行语法解析,检查是否存在语法错误
Step3:元数据之前已经在数据库中存储好了,即文件和数据表已经形成映射,当写SQL查询时,去数据库中找到对应的元数据信息,Hive将SQLMapReduce程序,将元数据传入该程序,根据元数据信息找到具体的HDFS文件进行查找。
Step4:将执行计划转换成MapReduce程序来执行,将执行结果封装返回给用户
提到的几个概念
元数据-MetaData
也就是HDFS中的文件和数据库中表的映射关系,元数据记录着所存储数据的一些属性,比如表对应着哪个文件,表的列对应文件哪一个字段,文件字段之间的分隔符是什么。
元数据存在mysql或Hive自带的derby中,分析的那些文件数据在HDFS上。
元数据服务-MetaStore
元数据服务用来管理元数据,对外暴露服务地址,让各种客户通过连接metastore,由metastore再去连接MySQL数据库来存取数据,这些客户可以同时连接,且不需要知道MySQL数据库的用户名和密码,在某种程度上也保证了元数据的安全。
- 用户接口
CLI(command line interface)是shell命令行,JDBC/ODBC也就是通过编译程序来访问,Hive Web interface 是通过网页来访问
- Hive Driver驱动程序
完成HQL查询语句从语法分析,编译,优化及查询计划的生成,生成的查询计划存储在HDFS中,并在随后由执行引擎(如MapReduce,Spark,Tez)调用执行