01Hive概述

157 阅读4分钟

Hive概述

Hive简介

Apache Hive数据仓库软件方便了使用SQL读取、写入和管理驻留在分布式存储中的大型数据集。结构可以投影到已经存储的数据上。提供命令行工具和JDBC驱动程序将用户连接到Hive。Hive的官网地址:hive.apache.org/,Hive产生后方便了…

hive产生的原因

  • 方便对文件及数据的元数据进行管理,提供统一的元数据管理方式
  • 提供更加简单的方式来访问大规模的数据集,使用SQL语言进行数据分析
对比项Hive关系型数据库
查询语音HQLSQL
数据存储HDFSLocal FS or RawDevice
执行器MapReducerExecutor
数据insert支持批量导入和单条插入支持批量导入和单条插入
数据update和delete支持追加,不支持删除行级别更新和删除
数据规模
执行延迟
分区支持支持
索引v0.8后支持支持
数据加载模式读时模式(快)写时模式(慢)age int
扩展性
应用场景海量数据查询实时查询

Hive架构

image.png

  • 用户接口主要有三个:CLI,JDBC/ODBC和 WebUI。其中最常用的是CLI,CLI启动的时候,会同时启动一个Hive副本。Client是Hive的客户端,用户连接至Hive Server。在启动 Client模式的时候,需要指出Hive Server所在节点,并且在该节点启动Hive Server。WebUI是通过浏览器访问Hive
  • Hive将元数据存储在数据库中,如mysql、derby(hive自带的内存数据库)。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等
  • 解释器(SQL Parser)、编译器(Compiler)、优化器(Optimizer)完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后由执行器(Executor)调用MapReduce执行
  • Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select * from tbl不会生成MapRedcue任务)

Hive经常被大数据企业用作企业级数据仓库。Hive在使用过程中是使用SQL语句来进行数据分析,由SQL语句到具体的任务执行还需要经过解释器,编译器,优化器,执行器四部分才能完成

  • 解释器,调用语法解释器和语义分析器将SQL语句转换成对应的可执行的java代码或者业务代码

  • 编译器,将对应的java代码转换成字节码文件或者jar包

  • 优化器,从SQL语句到java代码的解析转化过程中需要调用优化器,进行相关策略的优化,实现最优的查询性能

  • 执行器,当业务代码转换完成之后,需要上传到MapReduce的集群中执行

Hive的服务(角色)

  1. 用户访问接口 CLI(Command Line Interface): 用户可以使用Hive自带的命令行接口执行Hive SQL、设置参数等功能 JDBC/ODBC: 用户可以使用JDBC或者ODBC的方式在代码中操作Hive Web GUI: 浏览器接口,用户可以在浏览器中对Hive进行操作(2.2之后淘汰)
  2. Thrift Server: Thrift服务运行客户端,使用Java、C++、Ruby等多种语言,通过编程的方式远程访问Hive
  3. Hive Driver: Driver是Hive的核心,其中包含解释器、编译器、优化器等各个组件,完成从SQL语句到MapReduce任务的解析优化执行过程
  4. metastore: Hive的元数据存储服务,一般将数据存储在关系型数据库中,为了实现Hive元数据的持久化操作,Hive的安装包中自带了Derby内存数据库,但是在实际的生产环境中一般使用mysql来存储元数据

Hive 底层原理

image.png

每次执行SQL都叫做一个操作Operator,这些操作底层会转换成各种操作,例如扫描、查询、范围查询、格式输出等。Compiler编译器将一个Hive SQL转换成操作符,操作符是Hive的最小的处理单元,每个操作符代表HDFS的一个操作或者一道MapReduce作业。Hive通过ANTLR词法语法分析工具解析hql,将HQL转换成一个个的MR job执行

image.png