Hive
Hive是一个基于Hadoop文件系统上的数据仓库架构。它为数据仓库的管理提供了许多功能:数据ETL(抽取、转换、加载)工具、数据存储管理、大型数据集的查询与分析能力、类SQL语言(HQL,允许自定义mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作)。
1.用户接口有:CLI,JDBC/ODBC和 WebUI。
2.元数据:Hive将元数据储存在数据库中,如mysql、derby。原因是Hive的元数据可能面临着不断的更新、修改和读取,所以它不适合使用Hadoop文件系统进行存储。Hive的元数据包括:表的名字、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等。
3.Thrift:一个软件框架,用来进行可扩展且跨语言的服务的开发。
4.驱动:解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后由 MapReduce 调用执行。
1.Hive没有专门的数据存储格式
2.Hive的数据存储是建立HDFS之上的
3.存储结构主要包括:数据库、文件、表、视图
4.Hive默认可以直接加载文本文件,还支持sequence file 、RCFile
5.创建表时, Hive可以通过给定的列分隔符与行分隔符,即可解析数据
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。
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操作 |
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策略调整
数据定义操作(DDL)、数据操作(DML)、SQL操作。
1.创建表
2.删除表
3.修改表、分区语句
4.创建/删除视图
5.创建/删除函数
6.显示命令
1.向数据表中加载文件
2.将查询结果插入Hive表中
3.将查询的结果写入文件系统
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对分号字符不敏感