1、在介绍Hive和Hbase之前需要先介绍下Hadoop,Hadoop于2006年1月28日诞生,成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce。HDFS运行在通用硬件(指的是不需要价格昂贵的服务器)上的分布式文件系统,是大数据存储的组件;MapReduce是Hadoop的计算引擎。发展到现在,“Hadoop”这个单词代表的是“核心”(即Core Hadoop项目)以及与之相关的一个不断成长的生态系统。
2、Hive官网上摘录的介绍:The Apache Hive ™ data warehouse software facilitates(促进; 促使; 使便利) reading, writing, and managing large datasets residing(居住在; 定居于) in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.
Hive:通俗的说是一个数据仓库,严格来说,不是数据库,仓库中的数据是被HDFS管理的数据文件,它支持类似sql语句的功能,你可以通过该语句完成分布式环境下的计算功能,Hive会把语句转换成MapReduce,然后交给Hadoop执行。这里的计算,仅限于查找和分析,而不是更新、增加和删除。它的优势是对历史数据进行处理,用时下流行的说法是离线计算,因为它的底层是MapReduce,MapReduce在实时计算上性能很差。它的做法是把数据文件加载进来作为一个Hive表(或者外部表),让你觉得你的sql操作的是传统的表。
Hive中的表为纯逻辑表,仅仅对表的元数据进行定义。Hive没有物理存储的功能,它完全依赖HDFS和MapReduce。
Hive是在MapReduce的基础上对数据进行处理,而MapReduce的数据处理依照行模式
Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,所以数据处理存在延时的问题
Hive没有row-level的更新,它适用于大量append-only数据集(如日志)的批任务处理。
Hive全面支持SQL,一般可以用来进行基于历史数据的挖掘、分析。
Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统
想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop
举个例子,假如HDFS上有大量的数据需要统计分析,编写MapReduce程序来实现这个目的当然可以,但是MapReduce的操作和编程是比较复杂的,于是Hive的存在就让复杂的编程过程简化成了用SQL语言对海量数据的统计分析。这大大减轻了程序员的工作量。可以说,Hive的存在让海量数据的分析更加方便。其实从Hive的logo就可以看出Hive让大象变成了小蜜蜂,化繁为简是它最本质的亮点。
3、HBase:Hadoop database 的简称,也就是基于Hadoop数据库,是一种NoSQL数据库,主要适用于海量明细数据(十亿、百亿)的随机实时查询,如日志明细、交易清单、轨迹行为等。HBase以Google BigTable为蓝本,以键值对的形式存储。项目的目标就是快速在主机内数十亿行数据中定位所需的数据并访问它。
通俗的说,HBase的作用类似于数据库,传统数据库管理的是集中的本地数据文件,而HBase基于HDFS实现对分布式数据文件的管理,比如增删改查。也就是说,HBase只是利用Hadoop的HDFS帮助其管理数据的持久化文件(HFile),它跟MapReduce没任何关系。HBase的优势在于实时计算,所有实时数据都直接存入HBase中,客户端通过API直接访问HBase,实现实时计算。由于它使用的是nosql,或者说是列式结构,从而提高了查找性能,使其能运用于大数据场景,这是它跟MapReduce的区别。
HBase表则是物理表,适合存放非结构化的数据。
HBase为列模式,这样使得对海量数据的随机访问变得可行。
HBase是准实时系统,可以实现数据的实时查询。
基于HBase的查询,支持和row-level的更新。
HBase不适用于有join,多级索引,表关系复杂的应用场景。
HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
想象你在操作RMDB数据库,如果是索引访问,就用HBase+Hadoop 。
总结:
Hadoop是Hive和HBase的基础,Hive依赖Hadoop,而HBase仅依赖Hadoop的HDFS模块。
Hive适用于离线数据的分析,操作的是通用格式的(如通用的日志文件)、被Hadoop管理的数据文件,它支持类sql,比编写MapReduce的java代码来的更加方便,它的定位是数据仓库,存储和分析历史数据
HBase适用于实时计算,采用列式结构的nosql,操作的是自己生成的特殊格式的HFile、被Hadoop管理的数据文件,它的定位是数据库,或者叫DBMS
两者使用场景的区别:
HBase的应用场景通常是采集网页数据的存储,因为它是key-value型数据库,从而可以到各种key-value应用场景,例如存储日志信息,对于内容信息不需要完全结构化出来的类CMS应用等。注意hbase针对的仍然是OLTP应用为主。
hive主要针对的是OLAP应用,其底层是hdfs分布式文件系统,重点是基于一个统一的查询分析层,支撑OLAP应用中的各种关联,分组,聚合类SQL语句。hive一般只用于查询分析统计,而不能是常见的CUD操作,要知道HIVE是需要从已有的数据库或日志进行同步最终入到hdfs文件系统中,当前要做到增量实时同步都相当困难。
最后补充一下:Hive可以直接操作HDFS中的文件作为它的表的数据,也可以使用HBase数据库作为它的表
在大数据架构中,Hive和HBase是协作关系,数据流一般如下图:
共同点:
1.hbase与hive都是架构在hadoop之上的。都是用hadoop作为底层存储。
他们的底层是要通过mapreduce分布式计算的,hbase、hive、pig底层都是这样的。但整体来说hadoop还是比较快的,因为它是进行海量数据存储和分布式计算,这个速度已经很不错了。
区别:
2.Hive是建立在Hadoop之上为了减少MapReduce jobs编写工作的批处理系统,HBase是为了支持弥补Hadoop对实时操作的缺陷的项目 。
3.想象你在操作RMDB数据库,如果是全表扫描,就用Hive+Hadoop,如果是索引访问,就用HBase+Hadoop 。
4.Hive query就是MapReduce jobs可以从5分钟到数小时不止,HBase是非常高效的,肯定比Hive高效的多。
5.Hive本身不存储和计算数据,它完全依赖于HDFS和MapReduce,Hive中的表纯逻辑。hive需要用到hdfs存储文件,需要用到MapReduce计算框架。
6.hive借用hadoop的MapReduce来完成一些hive中的命令的执行
7.hbase是物理表,不是逻辑表,提供一个超大的内存hash表,搜索引擎通过它来存储索引,方便查询操作。
8.hbase是列存储。
9.hdfs作为底层存储,hdfs是存放文件的系统,而Hbase负责组织文件。
hive
1、可以理解为一种SQL执行引擎,对SQL的支持最终转换为map/reduce任务
2、不支持更新、删除操作,但可以插入
3、任务不是实时执行,用时一般为数分钟到数小时
4、本身可以不存储数据,只存储关于数据的元数据,偏重于逻辑结构,是一种数据仓库
5、适合于静态大数据量的查询、分析、汇总,不适合联机实时数据处理
6、操作一般以全表数据为基础,但也有分区等概念
Hbase
1、不支持SQL
2、支持增删改查操作
3、任务实时执行
4、本身存储数据,有复杂的物理存储结构,是一种真正的数据库
5、适合联机实时数据处理
6、操作以列为基础