1、产生背景 sql
1.MapReudce编程繁琐,须要编写大量的代码数据库
2.HDFS中存放的都是文件,在HDFS中没有Scheme的概念,没法用SQL进行快速的查询。编程
2、Hive的概念 服务器
Hive是基于Hadoop的一个数据仓库工具,能够将结构化的数据文件映射为一张数据库表,并提供简单的SQL查询功能,能够将SQL语句转换为MapReduce任务进行运行。它使用一种使用相似于SQL的查询语句直接做用在分布式存储文件系统之上的数据仓库工具,用于解决海量结构化的日志数据统计问题。架构
Hive的数据存储在HDFS中,Hive的底层的计算是经过MR、Spark(Hive On Spark)或Tez来实现的。HQL语句经过Hive引擎被转化成map做业并提交到集群去运行,所以Hive的查询具备高延时性。分布式
特别指出,Hive和SQL语言同样支持删查增改,但对于分布式文件系统中的大规模数据来讲,Hive主要用于查询。那么Hive和关系型数据库有什么关联呢?没有任何关联,只是HQL和SQL类似而已。工具
Hive和关系型数据库比较:oop
3、Hive的架构 post
1.用户接口spa
命令行Cli接口、Web接口(WUI)、远程服务接口(Client)
2.元数据(Meta)存储
Hive的元数据能够存放在Derby、MySQL、Oracle、postgres等关系型数据库库中,在实际开发中一般使用MySQL。Derby是一种单Session数据库,不支持两台机器同时对一个数据仓库进行访问,不适用于生产环境。
Hive的元数据存放在关系型数据库中,如MySQL中,下图就是存储在Hive安装目录的与元数据相关的sql文件:
Meta ==> HA Database : MySQL主备 vip 。Hive、Spark SQL、impala等SQL on Hadoop使用同一套元数据。
为何须要元数据?由于HDFS里的数据是以文件的形式存在的,没法使用SQL进行快速查询,而元数据的做用就是给HDFS中的文件做用上Scheme信息。
3、外部表和内部表的区别
内部表:存储目录默认是/user/hive/warehouse,其存储目录能够经过修改hive-site.xml文件的hive.metastore.dir参数进行配置。