Hive简介
Hive最初是Facebook为了满足对海量社交网络数据的管理和机器学习的需求而产生和发展的。互联网现在进入了大数据时代,大数据是现在互联网的趋势,而hadoop就是大数据时代里的核心技术,但是hadoop的mapreduce操作专业性太强,所以facebook在这些基础上开发了hive框架,毕竟世界上会sql的人比会java的人多的多,hive可以说是学习hadoop相关技术的一个突破口。那么,hive是什么呢?
一、概述
Hive是建立在 Hadoop 上的数据仓库基础构架。
它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。
Hive 定义了简单的类 SQL 查询语言,称为 HQL,它允许熟悉 SQL 的用户查询数据。同时,这个语言也允许熟悉 MapReduce 开发者的开发自定义的 mapper 和 reducer 来处理内建的 mapper 和 reducer 无法完成的复杂的分析工作。可以将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。
简单的说:hive是基于hadoop的数据仓库。那么为什么说hive是基于Hadoop的呢?
之所以说hive是构建在Hadoop之上的数据仓库,简单的说是因为:
- 数据存储在hdfs上
- 数据计算用mapreduce
二、Hive常见的应用场景
1、日志分析:大部分互联网公司使用hive进行日志分析,包括百度、淘宝等。
- 统计网站一个时间段内的pv、uv
- 多维度数据分析
2、海量结构化数据离线分析
三、Hive的特点(优缺点)
1、hive的优点
1)、简单容易上手:提供了类SQL查询语言HQL
2)、可扩展:为超大数据集设计了计算/扩展能力(MR作为计算引擎,HDFS作为存储系统)
一般情况下不需要重启服务Hive可以自由的扩展集群的规模。
3)、提供统一的元数据管理
4)、延展性:Hive支持用户自定义函数,用户可以根据自己的需求来实现自己的函数
5)、容错:良好的容错性,节点出现问题SQL仍可完成执行
2、hive的缺点(局限性)
1)、hive的HQL表达能力有限
- 迭代式算法无法表达,比如pagerank
- 数据挖掘方面,比如kmeans
2)、hive的效率比较低
- hive自动生成的mapreduce作业,通常情况下不够智能化
- hive调优比较困难,粒度较粗
- hive可控性差
四、Hive和数据库的异同
由于Hive采用了SQL的查询语言HQL,因此很容易将Hive理解为数据库。其实从结构上来看,Hive和数据库除了拥有类似的查询语言,再无类似之处。数据库可以用在Online的应用中,但是Hive是为数据仓库而设计的,清楚这一点,有助于从应用角度理解Hive的特性。
Hive和数据库的比较如下表:
MapReduce 开发人员可以把自己写的 Mapper 和 Reducer 作为插件支持 Hive 做更复杂的数据分析。 它与关系型数据库的 SQL 略有不同,但支持了绝大多数的语句(如 DDL、DML)以及常见的聚合函数、连接查询、条件查询等操作。
Hive 不适合用于联机(online) 事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。Hive的特点是可
伸缩(在Hadoop 的集群上动态的添加设备),可扩展、容错、输入格式的松散耦合。Hive 的入口是DRIVER ,执行的SQL
语句首先提交到 DRIVER 驱动,然后调用 COMPILER 解释驱动, 最终解释成 MapReduce 任务执行,最后将结果返回。