-
Hive简介
hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将类sql语句转换为MapReduce任务进行运行。
-
Hive的本质
将HQL转化为MapReduce程序。
-
SQL——>MapReduce原理
-
Hive的优点
- 简单容易上手:提供了类SQL查询语言HQL ;
- 可扩展性:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统)一般情况下不需要重启服务Hive可以自由的扩展集群的规模;
- 提供统一的元数据管理;
- 延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数;
- 容错性:良好的容错性,节点出现问题SQL仍可完成执行;
- Hive的优势在于处理大数据,对于处理小数据没有优势;
- Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数。
-
Hive的缺点
- hive的HQL表达能力有限:
(1)迭代式算法无法表达,比如pagerank;
(2)数据挖掘方面不擅长,比如kmeans;
2. hive的效率比较低:
(1)hive自动生成的mapreduce作业,通常情况下不够智能化
(2)hive调优比较困难,粒度较粗
(3)hive可控性差
-
Hive架构
用户接口:Client CLI(hive shell 命令行),JDBC/ODBC(java访问hive),WEBUI(浏览器访问hive);
元数据(Meta store):元数据包括:表名,表所属数据库(默认是default) ,表的拥有者,列/分区字段,表的类型(是否是外部表),表的数据所在目录等,默认存储在自带的derby数据库中,推荐使用MySQL存储Metastore
Hadoop 使用HDFS进行存储,使用MapReduce进行计算;
驱动器(Driver)
(1) 解析器(SQL Parser):将SQL字符转换成抽象语法树AST,这一步一般使用都是第三方工具库完成,比如antlr,对AST进行语法分析,比如表是否存在,字段是否存在,SQL语句是否有误;
(2) 编译器(Physical Plan):将AST编译生成逻辑执行计划;
(3) 优化器(Query Optimizer):对逻辑执行计划进行优化;
(4) 执行器(Execution):把逻辑执行计划转换成可以运行的物理计划,对于Hive来说,就是MR/Spark。
-
Hive和SQL数据库比较
查询语言 |
HQL |
SQL |
数据存储位置 |
HDFS |
Local FS |
数据格式 |
用户自定 |
系统决定 |
数据更新 |
hive(0.14) 后支持 |
支持 |
索引 |
无 |
有 |
执行 |
MapReduce |
Executor |
执行延迟 |
高 |
低 |
可扩展性 |
高 |
低 |
数据规模 |
大 |
小 |