一、Hive 简介
1.1、什么是 Hive?
Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive 的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行,所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS分布式存储系统的封装了 MapReduce 计算框架的工具,对存储在 HDFS 中的数据进行分析和管理。
Hive中最终的数据仍然存储在hdfs上,hive上建的表仅仅相当于对hdfs上的结构化数据进行映射管理,hive仅仅是一个管理数据的作用而不会存储数据。hive想要管理hdfs上的数据就必须要建立一个关联hive上的表和hdfs上的数据路径的关联关系,hive的元数据表中记录的就是hive中的表和hdfs的映射关系,以及hive表属性(内部表、外部表、视图)和字段信息(字段的类型和字段的顺序)等元数据,这些元数据必须依赖某个数据库进行存储,一般情况下这个元数据库采用的是关系型数据库,真实生产中一般使用mysql作为hive的元数据库,hive中内置的默认的元数据库是derby。在hive中元数据非常重要,元数据一旦丢失,整个hive中的库和表都会丢失!
1.2 为什么需要使用 Hive?
直接使用 MapReduce 所面临的问题:人员学习成本太高,项目周期要求太短,MapReduce 实现复杂查询逻辑开发难度太大,为什么要使用 Hive?因为hive有更友好的接口,操作接口采用类 SQL 的语法,提供快速开发的能力和更低的学习成本,避免了写 MapReduce,减少开发人员的学习成本,具有更好的扩展性:可自由扩展集群规模而无需重启服务,还支持用户自定义函数(实际上还是hdfs的特点)。