Hive的产生背景
数据库擅长事务性的工作,但不擅长分析型的工作,所以应要求就产生了数据仓库。
数据仓库相当于集成化数据管理的平台,从多个数据源抽取有价值的数据,在仓库内转换和流动,并且提供给BI等分析工具
简而言之,数据仓库是一个面向主题的、集成的、相对稳定的、反应历史变化的数据集合,用于支持管理的决策
而传统的数据仓库是基于关系数据库的,无法满足快速增长的海量数据存储的需求,只能支持结构化数据的存储,没有办法有效处理不同类型的非结构化数据,比如日志,也没有办法水平扩展,导致计算和处理的能力不足。
而Hive就是一个构建于Hadoop顶层的数据仓库工具,由Facebook在2008年将该项目贡献于Apache,在一定程度上可以看作是用户的编程接口,本身并不存储和处理数据。
那么Hive中的数据要用什么存储和处理呢?那就是HDFS和MapReduce了。HDFS,即分布式文件系统,MapReduce,即分布式并行计算模型。
Hive中有使用简单的类SQL查询语言,也就是HiveQL,用户可以通过编写的HiveQL语句运行MapReduce任务。Hive也支持类似SQL的接口,容易进行移植。简单地说,Hive是一个可以提供有效、合理、直观组织和使用数据的分析工具。
为什么说Hive非常适合数据仓库呢?
首先,Hive采用批处理方式来处理海量的数据,
其次,Hive提供适合数据仓库操作的工具
(提示:1、Pig可以作为Hive的替代工具 2、提供数据的实时访问的是HBase,Hive不能提供这个功能)
Hive对比传统数据库有什么区别呢?
1、在数据的插入处理方面,Hive常见操作时全表扫描,所以单条插入对Hive是不实用的
2、在数据的更新方面,Hive也不支持数据的更新。Hive是一个数据仓库工具,而数据仓库中存放的是静态的数据,所以Hive不支持对数据的更新。
3、Hive在hive0.7后可支持索引,但是Hive不像传统的关系型数据库那样有键,它只提供有限的索引功能,Hive中给一个表创建的索引数据被保存在另外的图中。
4、Hive也支持分区功能,根据分区列的值对表进行粗略的划分,使用分区可以加快数据的查询速度。
5、Hive的执行延迟比较高,因为构建于HDFS和MapReduce上
6、Hive的开发环境是基于集群的,所以有比较好的扩展性
Hive的数据单元
1、元数据(MetaData)是指数据的各项属性的信息,如数据类型,结构,表视图的信息等
2、数据库,Hive的数据库相当于一个命名空间
3、表(外部表、内部表),
内部表就是通常的表,也叫管理表,内部表被存储在数据仓库的目录中,当删除内部表时,表数据和元数据将被一同删掉
外部表就是创建时数据存储于指定的HDFS目录中,也可以存储于数据仓库中,还可以与指定的HDFS目录中的数据相关联。外部表被删除时,只有元数据被删除,实际的数据不会被删除。
4、分区,Hive中的一个表可以有一个或者多个的分区,这些分区决定了数据的存储方式,使得查询操作只查询扫描相关性高的那部分数据,从而大大提高Hive的工作效率。
5、桶,每个分区会根据表的某列数据的哈希值划分为若干个桶,每个桶对应分区下的一个数据文件。
(注意:对表进行分区和分桶不是必须的,但是这样可以减少对不必要数据的访问,从而提高查询的速度)
Hive的部署和应用
构建于Hadoop上的数据仓库,除了依赖于Hadoop的基本组件HDFS和MapReduce外,还结合使用的Hive、Pig、HBase和Mahout
Hive和Pig主要时用在报表中心上,Hive用于分析,Pig则用于报表中的数据转换。
HBase主要用于在线的业务,因为HDFS缺乏随机读写的操作,而HBase支持实时数据的访问。
Mahout常常用于BI(商务智能),提供了一些可扩展的机器学习领域的经典算法,旨在帮助开发人员更加方便快捷地创建智能应用程序。
Facebook是怎么部署Hive的呢?或者说,Facebook是怎么把数据仓库构建在Hadoop集群上的呢?
步骤如下:
1、Web服务器及内部的服务产生日志
2、Scribe服务器把成百上千个日志数据集存放在几个/几十个Filers(网络文件服务器)上
3、网络文件服务器上的大部分日志文件被复制存放在HDFS系统中。并且维度数据也会每天从内部的MySQL数据库上复制到这个HDFS系统中
4、Hive为HDFS收集的数据创建一个数据仓库,用户可以通过编写HiveQL语言创建各种概要学习和报表以及数据执行的历史分析,同时内部的MyQL数据库也可以从中获得处理后的数据
5、把需要实时联机访问的数据存放在Oracle RAC上
猜你喜欢
网友评论
- 搜索
- 最新文章
- 热门文章