大数据之Hive
一.Hive基本概念
1.什么是Hive
- Hive是Facebook开源用于处理 海量 结构化 日志的数据统计
- Hive是基于Hadoop的一个数据仓库工具,将结构化数据文件映射成一张表,并提供类SQL语句
- 本质是HQL转换为MapReduce程序
- 【1】数据存储在HDFS
- 【2】分析数据底层的默认实现是MapReduce
- 【3】执行程序在Yarn上
- Hive区别于大数据中其他计算框架最大的不同是,它是单机的,其他的是分布式的,因为它的存储,运算都是基于Hadoop,相当于一个客户端
2.Hive优缺点
- 优点
- 【1】实现采用类SQL语句,开发速度快,学习成本低
- 【2】Hive用于 大数据量 离线 分析,适合实时性要求不高的场合
- 【3】支持用户自定义函数
- 缺点
- 【1】HQL表达能力有限(迭代运算无法表达;数据挖掘方面不擅长)
- 【2】执行效率低(基于MapReduce,执行延迟高;调优粒度粗)
3.Hive架构原理
- 用户接口:Client CLI(hive shell)、JDBC/ODBC(java 访问 hive)、WEBUI(浏览器访问 hive)
- 元数据(Meta store):数据表信息及数据实际存储信息(默认存储在自带的 derby 数据库中,推荐使用 MySQL 存储 Metastore )
- 驱动器:Driver
- 【1】SQL解析器:将 SQL 字符串转换成抽象语法树 AST,这一步一般都用第三方工具库完成,比如 antlr;对 AST 进行语法分析,比如表是否存在、字段是否存在、SQL 语义是否有误
- 【2】编译器:将 AST 编译生成逻辑执行计划
- 【3】优化器:对逻辑执行计划进行优化
- 【4】执行器:把逻辑执行计划转换成可以运行的物理计划(如 MR/Spark)
4.Hive与数据库比较
- 查询语言(HQL SQL)
- 数据存储位置(Hive存储在HDFS上 ,数据库一般在块设备或本地系统)
- 数据更新(Hive不适合数据修改,数据库更注重与用户的交互)
- 可扩展性(Hive可扩展性是和 Hadoop 的可扩展性是一致的 ,数据库扩展能力有限)
- 执行延迟(Hive适合大数据量的分析,执行延迟高,对于数据量较少的场景,数据库的优势更高)