Hive
👉为什么学习Hive
Hadoop中的MapReduce有缺点:
Mapper端的输出,是把键相同的合并起来。(sql语句中groupby的效果)
Reduce端针对一个键相同的多个值,进行处理。(sql语句中的聚合函数,如sum、order by)
需要设计MapReduce的代码
Hive
可以通过类似SQL的语句 HiveQL 操作存储在HDFS中的数据
可以通过 HiveQL 自动编译成 MapReduce 代码执行Job
👉Hive的三种模式
可以作为metastore的数据库有:access,virtutal fox,sqlserver,mysql,sqlite,postgresql,oracl
Local(本地模式):此模式连接到一个 in-memory 的数据库 Derby,一般用于 UnitTest。
单用户模式:通过网络连接到一个数据库中,是最常使用到的模式
多用户模式:远程服务器模式,用于非 Java 客户端访问元数据库(metastore),在服务器端启动 metaStoreServer,客户端利用 thrift 协议通过 metaStoreServer 访问元数据库。
👉Hive的架构图
数据库、表、记录(记录即数据)。
数据库和表是为了描述记录。(即元数据)
元数据是存储在关系型数据库(mysql,derby)上的。
记录是存储到 HDFS(磁盘空间无上限)。
hive的组成部分
Metastore:元数据(数据库和表结构)的存储,存储在mysql(关系型数据库)中。
Cli:Client,客户端;使用 bin/hive 登录的黑窗口。
Jdbc:连接
WebGui
hive 的架构
用户在hive中输入了一个 HiveQL 语句,要么转成 MapReduce 执行,要么直接查询文件。
编译器:将一个 Hive QL 转换操作符(在Hive中写的SQL语句)
操作符是hive的最小处理单元(sql语句中的一个语法:from,left join)
每个操作符代表HDFS 一个操作或一道 MapReduce 作业。
用户接口主要分为:Cli(常用),Client和WebGUI。
Cli启动的时候会同时启动一个hive副本
Client 是 hive 的客户端,用户连接到 hiveServer。在启动 Client 模式的时候,需要指出 hiveServer所在的节点,并且在该节点启动 hiveServer。WebGUI 是通过浏览器也能访问 Hive(未试过)
Hive将元数据(数据库,表)存储在数据库表(mysql)中。数据库不存储 Hive 的记录。
元数据包含:表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在的目录(HDFS)等
解释器,编译器,优化器完成sql查询语句从词法分析,语法分析,编译,优化以及查询计划的生成。查询计划存储在HDFS中,并在随后由 MapReduce 调用执行。
Hive 的数据存储在 HDFS 中,大部分数据查询,计算由 MapReduce 完成。
元数据(hive中的database,table)存储到真实的数据库(MySQL);记录存储在HDFS上,经常使用的 mysql:表,记录,库都存储在文件系统中 NTFS(本地)。
Hive 的客户端连接服务器走的是 thrift 协议;===>http===>https;传输的内容大小比较小。
👉Hive的数据类型
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Types
名字 | MySQL | Hive |
---|---|---|
整数 | tinyint,int,bigint,mediumint,numeric | numeric,tinyint |
浮点 | double,decimal | decimal |
字符串 | varchar,text,char | string |
布尔 | 无 | |
时间 |