转载外部

技术背景

  • 因为mapreduce继承类和重写方法的固定化,导致编程代码模板化而且非常繁琐,
  • 学习成本比较高,而且不适合复杂的分析场景
  • 适合程序开发人员却不适合数据分析人员的使用

设计目的

  • 帮助开发者解决使用类sql语句来操作hadoop
  • hive是为了解决使用相对简单的sql语句替代复杂的mapreduce编程的实现
  • 用来做离线分析,比直接用mapreduce开发效率更高

设计思想

  • 通过将hdfs上的文件映射成表来实现hadoop的存储功能
    • 解释:
      • hive的存储实际上还是使用的hdfs存储,只是hive管理了逻辑表与实体文件的映射关系
      • sql操作的对象是逻辑表
  • 通过将sql语句转换成mapreduce的代码来实现hadoop的计算功能

技术本质

  • 将hdfs上的结构化数据文件映射成一张数据库表来实现存储;
  • 将类sql语句底层转换成mapreduce语句来实现计算
  • hive其实就是一个可以使用sql来操作hadoop的客户端

核心特性

  • 存储:hive可以将hdfs上的文件映射成表的数据,就是可以构建数据仓库,这个特性是目前使用的主要功能
  • 计算:hive的计算是将底层转换成mapreduce程序进行的,mapreduce因为太死板,性能太差,所以计算这部分功能逐渐被presto,impala,sparkSql,flink等替代

角色概念

Client

意义: 通过hive提供的用户接口来链接hive服务,例如cli,JDBC/ODBC,webGUI

种类:

  • Hive Client:需要先启动metastore服务,然后直接使用bin/hive链接

    1. hive会去链接metastore服务,metastore服务再直接链接mysql
    2. 不推荐使用Hive Client,数据显示不美观
    3. 可以执行sql文件,非交互式客户端
  • Beeline Client : 需要先启动metastore服务,然后再启动hiveServer2服务,再使用bin/beeline链接

    1. beeline会去链接hiveserver2服务,hiveserver2服务然后会去链接metastore服务,metastore服务 再直接链接mysql
    2. 推荐使用此种方式,数据美观,还可以远程访问
    3. 不可以执行sql文件,交互式客户端

数据模型

  1. 目录结构:${hive.metastore.warehouse.dir}/xxx.db/table/partition/bucket_0
  2. db: 一个以.db后缀名结尾的文件夹,类似于数据库
  3. table: 所属db文件夹下的一个文件夹,类似于表
  4. external table: 类似于表,但是区别于admin table,它的数据存放位置可以通过location 任意指定位置
  5. partition: 分区,hdfs表现为table文件下的一个子目录,每个分区一个同级目录
  6. bucket: 分桶(分簇),表现为将同一个表目录根据hash散列之后的多个文件

元数据及管理

  1. 概念: 一种记录数仓中模型的定义,各层级的映射关系,监控数据状态,etl任务运行的状态的一种数据

  2. 意义: 用来设计,部署,操作和管理 数据仓库;元数据把数据仓库中的各个松散的组件联系起来,组成一个有机的整体

  3. 特点:

  4. 分类:
    1.技术元数据:给it人员服务;描述了数据仓库的开发,管理和维护相关的数据;

    例如:数据源,数据转换,数仓模型,数据清洗和更新规则

    2.业务元数据:给业务分析或管理层服务;描述数仓中具体有哪些数据,数据的位置及可用性等

    例如:业务对象是文件,业务元数据就是描述文件的数据,比如这个文件多大,名称,类型等

元数据服务

三种配置方式:

内嵌的:使用derby文本数据库来管理,不需要单独启动metastore服务

缺点:

  1. 只支持单用户,
  2. 每个启动hive的客户端都拥有自己的一套元数据,无法共享,
  3. 使用hive进程中的metastore服务,每次启动一个hive进程,内置启动一个metastore服务

本地的:使用mysql数据库,不需要单独启动metastore服务

缺点:

  1. 只支持单一客户端
  2. 每次连接都需要发送用户名和密码,不安全
  3. 使用hive进程中的metastore服务,每次启动一个hive进程,就会启动一个metastore服务

远程的:使用mysql数据库,需要单独启动metastore服务,该模式下hive和metastore运行在不同的进程里

缺点:

  1. 需要单独启动metasotre服务

意义:

  • 通过单独启动的metastore来达到客户端连接hive的解耦合功能,各种客户端只需要连接metastore服务,再由metastore服务连接mysql数据库来存取元数据,同时解决了方式1和方式2的缺点,
    • 解耦
    • 统一访问入口