HIVE理解


Hive

1.Hive简介

Hive是一个基于Hadoop文件系统上的数据仓库架构。它为数据仓库的管理提供了许多功能:数据ETL(抽取、转换、加载)工具、数据存储管理、大型数据集的查询与分析能力、类SQL语言(HQL,允许自定义mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作)。

2.Hive体系结构

 说明:

1.用户接口有:CLI,JDBC/ODBC和 WebUI。

2.元数据:Hive将元数据储存在数据库中,如mysql、derby。原因是Hive的元数据可能面临着不断的更新、修改和读取,所以它不适合使用Hadoop文件系统进行存储。Hive的元数据包括:表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等。

3.Thrift:一个软件框架,用来进行可扩展且跨语言的服务的开发。

4.驱动:解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行。

3.Hive的数据存储

3.1 基本概念

1.Hive没有专门的数据存储格式

2.Hive的数据存储是建立HDFS之上的

3.存储结构主要包括:数据库、文件、表、视图

4.Hive默认可以直接加载文本文件,还支持sequence file 、RCFile

5.创建表时, Hive可以通过给定的列分隔符与行分隔符,即可解析数据

3.2 数据模型

Hive中主要包含四类数据模型:Table、External Table、Partition、Bucket。

 

Table:

在概念上与数据库中的 Table类似,每一个 Table 在 Hive 中都有一个相应的目录存储数据。例如,一个表 htable,它在 HDFS 中的路径为:/ datawarehouse/htable,其中/datawarehouse是在hive-site.xml中由 ${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的 Table 数据(不包括 External Table)都保存在这个目录中。

External Table:

指向已经在 HDFS中存在的数据,可以创建 Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。

1)内部表的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除;

2)外部表只有一个过程,加载数据和创建表同时完成,实际数据存储在创建语句LOCATION指定的HDFS路径中,并不会移动到数据仓库目录中。当删除一个外部表时,仅删除元数据,表中的数据不会被删除。

 

Partition:

对应于数据库中的 Partition 列的密集索引。在 Hive 中,表中的一个Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中。例如:htable表中包含 ds 和 city 两个 Partition,则对应于 ds = 20120801, city = Beijing 的子目录为:/datawarehouse/htable /ds=20120801/ city = Beijing;对应于ds=20120801,city=Shanghai的子目录为/datawarehouse/htable /ds=20120801/ city =Shanghai。

 

Bucket:

桶对指定列进行Hash计算时,根据哈希值切分数据,每个桶对应一个文件。例如:将属性列user列分散到32个桶中,首先要对user进行Hash计算,对应为0的桶写入HDFS的目录为/datawarehouse/htable /ds=20120801/ city = Beijing/part-00000,对应为1的写入/datawarehouse/htable /ds=20120801/ city = Beijing/part-00001。

 

4.Hive的原理

4.1 Hive执行过程

1.操作符是Hive的最小处理单元

2.每个操作符处理代表HDFS操作或MR作业

3.编译器把HQL转换成一组操作符

4. Hive通过ExecMapper和ExecReducer来执行MapReduce任务 

操作符

描述

TableScanOperator

从表中读取数据

ReduceSinkOperator

生成到reduce端的结果数据

JoinOperator

Join两份数据

SelectOperator

减少输出列

FileSinkOperator

生成结果输出数据到文件

FilterOperator

过滤输入数据

GroupByOperator

GroupBy分组操作

MapJoinOperator

MapJoin Hint或者由优化器决定采用MapJoin

LimitOperator

Limit限制行数操作

UnionOperator

Union操作

 

4.2 Hive编译过程

1.Parser:把SQL转换为抽象语法树(AST)

2.Semantic Analyzer:把抽象语法树转化为查询块(QB)

3.Logical Plan Generator:把QB转化为逻辑执行计划(Logical Plan)

4.Logical Optimizer:重写执行计划,带入更多的优化后的计划

5.Physical Plan Generator:将逻辑执行计划转化为物理执行计划(M/R jobs)

6.Physical Optimizer:适应性Join策略调整

5.HQL

数据定义操作(DDL)、数据操作(DML)、SQL操作。

5.1 DDL

1.创建表

2.删除表

3.修改表、分区语句

4.创建/删除视图

5.创建/删除函数

6.显示命令

5.2 DML

1.向数据表中加载文件

2.将查询结果插入Hive表中

3.将查询的结果写入文件系统

5.3 SQL

SELECT [ALL | DISTINCT] select_expr, select_expr, ...

FROM table_reference

[WHERE where_condition]

[GROUP BY col_list [HAVING condition]]

[   CLUSTER BY col_list

  | [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list]

]

[LIMIT number]

 

注意:

1.不支持EXIST ,NOT EXIST

2.ORDER BY与SORT BY的不同:ORDER BY 全局排序,只有一个Reduce任务,SORT BY 只在本机做排序

3. Hive不支持等值连接

4. Hive对分号字符不敏感

你可能感兴趣的:(hadoop,hive,大数据,分布式计算,并行处理)