大数据技术之离线数仓Hive
一,Hive的背景
大数据开发的本质还是对数据进行分析,SQL操作数据库的便捷是诸如java,python等高级程序设计语言所望尘莫及的,facebook公司借鉴了SQL这一特性开发了基于hadoop数据仓库工具-————hive并贡献给了apahe公司.Hive提供类SQL查询的能力,有效避免了MapReduce复杂程序的编写,大大提高相关工作人员的开发效率。
二,Hive的定义,本质,用途
1,定义
Hive是一件基于Hadoop的离线数据仓库工具,(作用)能够将结构化数据文件映射成为表。
2,本质
hive本质是将SQL转化成为MapReduce程序。
3,用途
Hive用作离线数据分析,比直接使用MapReduce程序开发效率要高得多。
三,Hive架构
1,Hive架构图
2,Hive的组件
1,Metastore
Metastore,元数据存储。元数据指的的描述数据的数据,包括表名,表的属性,表对应的文件路径等,Hive根据元数据信息操作文件中的数据。元数据通常存储在RDBMS(关系型数据库)中,默认存在Hive自带的数据库Derby中,实际业务中通常存在MySQL中。
2,Metastore作用
客户端连接metastore服务,metastore再去连接MySQL数据库来存取元数据。有了metastore服务,就可以有多个客户端同时连接,而且这些客户端不需要知道MySQL数据库的用户名和密码,只需要连接metastore 服务即可。
3.metastore三种配置方式
metastore配置有内嵌,本地,远程三种配置方式。
内嵌模式和本地模式的Metastore服务不需要单独配置和单独启动,远程模式的Metastore服务需要单独配置和单独启动。内嵌模式Metastore服务的存储介质存在Hive自带关系型数据库Derby中,远程模式和本地模式的Metastore服务的存储介质存在单独配置关系型数据库中,一般为MySQL。企业生产环境一般部署远程模式的Hive。
1.内嵌模式
内嵌模式使用的是内嵌的Derby数据库来存储元数据,也不需要额外起Metastore服务。数据库和Metastore服务都嵌入在主Hive Server进程中。这个是默认的,配置简单,但是一次只能一个客户端连接,适用于用来实验,不适用于生产环境。
解压hive安装包 bin/hive 启动即可使用
缺点:不同路径启动hive,每一个hive拥有一套自己的元数据,无法共享。
2.本地模式
本地模式采用外部数据库来存储元数据,目前支持的数据库有:MySQL、PostgreSQL、Oracle、MS SQL Server.在这里我们使用MySQL。
本地模式不需要单独起metastore服务,用的是跟hive在同一个进程里的metastore服务。也就是说当你启动一个hive 服务,里面默认会帮我们启动一个metastore服务。
hive根据hive.metastore.uris 参数值来判断,如果为空,则为本地模式。
缺点是每启动一次hive服务,都内置启动了一个metastore。本地模式下hive的配置只要指定mysql的相关信息即可。
3.远程模式
远程模式下,需要单独起metastore服务,然后每个客户端都在配置文件里配置连接到该metastore服务。远程模式的metastore服务和hive运行在不同的进程里。
在生产环境中,建议用远程模式来配置Hive Metastore。在这种情况下,其他依赖hive的软件都可以通过Metastore访问hive。远程模式下,需要配置hive.metastore.uris参数来指定metastore服务运行的机器ip和端口,并且需要单独手动启动metastore服务。
2,Hive提供用户的操作接口
1,CLI
CLI全称Command Line Interface,shell命令行操作界面。
2,JDBC/ODBC
JDBC(Java Database Connectivity)是一种用于执行 SQL 语句的 Java API,可以为多种关系数据库提供统一访问(在java程序中写SQL语句访问数据库)。ODBC(Open Database Connectivity)是一种使得不同应用程序能够通过标准化的 API 使用 SQL 语言来访问和操作数据库的技术(在各种程序中写SQL访问数据库),在性能方面JDBC优于ODBC.
3,WebUI
WebGUI(Graphical User Interface)是一种图形用户界面,它通过网页浏览器呈现给用户,可以浏览器访问Hive.
3,Hive Thrift Server
Hive Thrift Server是Hive的一个组件,它允许通过Thrift协议来访问自身,Thrift 是一种接口描述语言和二进制通信协议,用于跨语言的服务开发。Hive Thrift Server 能够连接JDBC/ODBC,这使得Hive和数据库类似。Hive Thrift Serve使得hive可以与各种编程语言(如python,java,c++)交互,提高了Hive的灵活度.
4,解释器、编译器、优化器、执行器
完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
5,Hive与Hadoop的关系
Hive使用HDFS存储数据,Hive将SQL转化MapReduce程序查询数据。
3,Hive 和关系数据库对比
查询语言:Hive使用HQL(Hadoop on SQL),RDBMS使用SQL。
相应速度:Hive慢,RDBMS快。
延迟:Hive 高,RDBMS低。
处理数据规模:Hive大,RDBMS小。
数据存储:Hive的数据存在HDFS上,RDBMS存在Raw Device上。
索引:Hive0.8版本后加入位图索引,RDBMS有复杂的索引。
执行程序:Hive的执行程序是MapReduce,RDBMS的执行程序是Executor。