1,什么是 Hive

Hive:由 Facebook 开源用于解决海量结构化日志的数据统计。
Hive 是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并 提供类 SQL 查询功能。
本质是:将 HQL 转化成 MapReduce 程序

1)Hive 处理的数据存储在 HDFS 
2)Hive 分析数据底层的实现是 MapReduce
3)执行程序运行在 Yarn 上

2,Hive 的优缺点

优点

  1. 操作接口采用类 SQL 语法,提供快速开发的能力(简单、容易上手)。 2) 避免了去写 MapReduce,减少开发人员的学习成本。
  2. Hive 的执行延迟比较高,因此 Hive 常用于数据分析,对实时性要求不高的场合。
  3. Hive 优势在于处理大数据,对于处理小数据没有优势,因为 Hive 的执行延迟比较
    –大数据 –前端 –python 人工智能资料下载,可百度访问:尚硅谷官网 高。 5) Hive 支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
    缺点
    1.Hive 的 HQL 表达能力有限
    (1)迭代式算法无法表达
    (2)数据挖掘方面不擅长
    2.Hive 的效率比较低
    (1)Hive 自动生成的 MapReduce 作业,通常情况下不够智能化
    (2)Hive 调优比较困难,粒度较粗

3,Hive架构

hive job的划分 hive详解_数据格式


1.用户接口:Client CLI(hive shell)、JDBC/ODBC(java 访问 hive)、WEBUI(浏览器访问 hive)

2.元数据:Metastore 元数据包括:表名、表所属的数据库(默认是 default)、表的拥有者、列/分区字段、表 的类型(是否是外部表)、表的数据所在目录等; 默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore

3.Hadoop 使用 HDFS 进行存储,使用 MapReduce 进行计算。

4.驱动器:Driver

(1)解析器(SQL Parser):将 SQL 字符串转换成抽象语法树 AST,这一步一般都用 第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存 在、SQL 语义是否有误。

(2)编译器(Physical Plan):将 AST 编译生成逻辑执行计划。

(3)优化器(Query Optimizer):对逻辑执行计划进行优化。

(4)执行器(Execution):把逻辑执行计划转换成可以运行的物理计划。对于 Hive 来 说,就是 MR/Spark

4,Hive与Hadoop的关系

Hive利用HDFS存储数据,利用MapReduce查询分析数据

hive job的划分 hive详解_hive job的划分_02

5,Hive与传统数据库对比

hive用于海量数据的离线数据分析

hive job的划分 hive详解_hive job的划分_03


1.数据格式。Hive中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive 中默认有三个文件格式 TextFile,SequenceFile 以及 RCFile)。

2.Hive在加载数据的过程中,不需要从用户数据格式到 Hive 定义的数据格式的转换。 3.Hive 在加载的过程中不会对数据本身进行任何修改,甚至不会对数据进行扫描。而只是将数据内容复制或者移动到相应的 HDFS 目录中。

4.Hive 中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。

5.Hive 在加载数据的过程中不会对数据中的某些 Key 建立索引。Hive 要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于数据的访问延迟较高,决定了Hive 不适合在线数据查询

6.Hive 是建立在 Hadoop 之上的,因此 Hive 的可扩展性是和 Hadoop 的可扩展性是一致的。

6,Hive的数据存储

1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,ORC格式RCFILE等)

2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹
table:在hdfs中表现所属db目录下一个文件夹
external table:与table类似,不过其数据存放位置可以在任意指定路径
partition:在hdfs中表现为table目录下的子目录
bucket:在hdfs中表现为同一个表目录下根据hash散列之后的多个文件