Hive简介
什么是hive
hive是一个构建在Hadoop上的数据仓库工具(框架),可以将结构化的数据文件映射成一张数据表,并可以使用类sql的方式来对这样的数据文件进行读,写以及管理(包括元数据)。这套HIVE SQL简称HQL。hive的执行引擎可以是MR。spark、tez。
如果执行引擎是MapReduce的话,hive会将Hql翻译成MR进行数据的计算。用户可以使用命令行工具或JDBC驱动程序来连接到hive。
为什么要使用hive
- 人员学习成本高
- 项目周期要求太短
- MapReduce实现复杂查询逻辑开发难度大
hive优缺点
hive优点
1.学习成本低
提供了类SQL查询语言HQLC简单,容易上手),避免了直接写MopReduce(适合java语言不好的。sql熟练的人),减少开发人员的学习成本。
2.可扩展性好
为超大数据集设计了计算/扩展能力(NR作为计算引擎,HDFS作为存储系统),Hive可以自由的扩展集群的规模,一般情况下不需要重启服务。
3.适合做离线分析处理OLAP
Hive的执行延迟比较高因此Hive常用于数据分析,对实时性要求不高的场合。
4.延展性好
Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函致。
5.良好的容错性
某个数据节点出现问题HQL仍可完成执行。
6.统计管理
提供了统一的元数据管理
hive缺点
1. hive的HQL表达能力有限
迭代式算法无法表达,比如PogeRankC网页排名)
数据挖掘方面,比如kmeansKk均值聚类算法
2. hive的效率比较低
hive自动生成的mapreduce作业,通常情况下不够智能化
hive调优比较困难。粒度较粗
Hive的架构与工作原理
包含的全表查询,比如select * from table 不会生成MapRedcue任务
包含的limit查询,比如select * from table limit 3 不会生成MapRedcue任务
hive和mysql的区别
1.Hive采用了类SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。
2.数据库可以用在OLTP的应用中,但是Hive是为数据仓库而设计的,清楚这一点,有助于从应用角度理解Hive的特性。
3.Hive不适合用于联机事务处现(OLTP),也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业,Hive的特点是可伸缩(在Hodoop的集群上动态的添加设备),可扩展、容错、输入格式的松散耦合。Hive 的入口是DRTIVER,执行的SQL语句首先提交到DRTVER驱动,然后调COMPILER解释驱动,最终解释成MapReduce任务执行,最后将结果返回。
4.MapReduce开发人员可以把自己写的Mopper和Reducer作为插件支持Hive做更复杂的数据分析。它与关系型数据库的$QL略有不同,但支持了绝大多数的语句(如DDL、DML)以及常见的聚合函数、连接查询、条件查询等操作。
hive和数据库的比较如下表
Hive和mysql的比较
mysql用自己的存储存储引擎,hive使用的hdfs来存储。
mysql使用自己的执行引擎,而hive使用的是mapreduce来执行。
mysql使用环境几乎没有限制,hive是基于hadoop的。
mysql的低延迟,hive是高延迟。
mysql的handle的数据量较小,而hive的能handle数据量较大。
mysql的可扩展性较低,而hive的扩展性较高。
mysql的数据存储格式要求严格,而hive对数据格式不做严格要求。
mysql可以允许局部数据插入、更新、删除等,而hive不支持局部数据的操作。