1、Hive 产生的背景:
a.MapReduce编程不方便:开发、测试、需求变更;
b.传统关系型数据库人员的需要,DBA:我就像使用sql一样的方式来处理分析大数据,不需要用mapreduce,那就好了。
所以基于以上两点,Hive就出来了。
另:文件存放在HDFS之上的,那么如果你想使用SQL去处理它,需要一个什么前提?
需要的前提就是结构化、文件映射成表格 ==> Schema 元数据信息(metastore) 。
什么叫Schema?可以理解为是库名、表名、字段名等信息,即元数据信息(metastore)。
2、Hive是什么
a.去官网看看:hive.apache.org
Hive其实就是:使用sql对分布式文件系统里的大的数据集进行读、写管理的数据仓库。
data warehouse ---数据仓库
分布式存储有:HDFS、S3、OSS
b.hive是构建在Hadoop之上的数据仓库
Hive通常用于离线处理,就是写sql,流程:SQL =====Hive=====MapReduce/Spark/Tez===>YARN
另:Hive诞生之初的流程,SQL =====Hive=====MapReduce===>YARN ,随着后续的发展,就会很慢,为什么执行性能慢呢,是mapreduce执行的模型导致的,因为所有的map task和reduce task都是以进程的方式进行的,要启动进程、销毁进程,所以就非常慢。即使开启gvm,用完还要关闭,成本很高。
c.Hive定义了SQL语言:HQL (类SQL)
d.Hive所支持的执行引擎:MapReduce、Spark、Tez
Hive on MapReduce
Hive on Spark
Hive on Tez
3、为什么要使用Hive
1) 从SQL角度,简单、容易上手、使用方便。
2) 从Hadoop角度,可以操作大规模的数据集,可以作为大数据的引擎。
3) 从MetaStore角度:有了这个之后,这些框架Pig/Impala/Presto/SparkSQL跟Hive可以共享元数据信息,
共享元数据即他们之间的元数据可以互通访问的,比如在Hive创建一张表,可以在SparkSQL能用,也可以在 Presto,Impala,Pig用。相反,在SparkSQL创建的表,在HIVE,Pig,Impala,Presto也能用。因为他们底层都是共享MetaStore。
4、Hive部署架构
Hive其实是一个客户端,没有集群概念。比如有10个hadoop节点,可以在任意节点上布置Hive,但是多个Hive并不是集群的概念,是客户端而已。Metastore可以理解为数据库。其实在生产中,元数据信息就是使用MySQL的。
下图为Hive部署架构图
在hive里面有内置的数据库derby,但基本不会用,因为存在致命的问题:只支持单用户,只能连一个。所以生产上一定使用RDBMS作为Metastore的,通常用mysql,oracle理论上也是可以的。
另外要注意,如果只部署一个mysql的话,会有单点故障,即如果该mysql挂掉了,整个架构都不能运行了,所以生产上要部署两个mysql。
5、Hive与RDBMS的关系
SQL: Hive QL和SQL的关系,HQL是类SQL,两者没有关系的,只是按照SQL的标准做的,相似而已。
实时性
事务
分布式:mysql支持分布式。
数据量
6、Hive部署 (参考本人的另一篇博客 “【大数据学习】之Hive部署 ”)
7、Hive快速入门
启动Hive(注意要先启动hdfs、yarn服务),用语句查询测试一下
a.创建一张表ruoze_helloworld
create table ruoze_helloworld(id int,name string)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
show tables; #已经成功了
b.创建表成功后,就可以加载数据进去。
local是指linux机器,并不是hdfs,如果没有local,就表示hdfs
load data local inpath '/home/hadoop/data/helloworld.txt' overwrite into table ruoze_helloworld;
c.查询一下该表是否有数据
select count(*) from ruoze_helloworld; # 查一下,这时就跑mapreduce作业了
看看web页面,http://192.168.163.128:8088/cluster ,看看作业是否提交,见下图,已经提交到web上了。