一、产生背景
Hive 由 Facebook 实现并开源,是基于 Hadoop 的一个数据仓库工具,可以将结构化的数据 映射为一张数据库表,并提供 HQL(Hive SQL)查询功能,底层数据是存储在 HDFS 上。Hive 的本质是将 SQL 语句转换为 MapReduce 任务运行,使不熟悉 MapReduce 的用户很方便地利用 HQL 处理和计算 HDFS 上的结构化的数据,适用于离线的批量数据计算。
Hive 依赖于 HDFS 存储数据,Hive 将 HQL 转换成 MapReduce 执行。所以说 Hive 是基于 Hadoop 的一个数据仓库工具,实质就是一款基于 HDFS 的 MapReduce 计算框架,对存储在HDFS上的数据进行分析和管理。
二、Hive的特点
1. Hive是基于Hadoop的一个数据仓库工具。与数据库不同,数据仓库是读模式,采用分布式存储,主要用于数据的读取与管理。
2. Hive可以将结构化数据映射为一张数据库表。Hive仅仅相当于HDFS上结构化数据的管理工具,将HDFS上的结构化数据映射为一张二维表。Hive只能处理结构化数据,不能完全取代MR。
3. Hive管理的原始数据存储在HDFS上,Hive只相当于HDFS上数据的管理者(二维表形式)。同时,Hive也有元数据的概念,Hive的元数据是描述Hive表信息的数据,表中存储着HDFS数据路径、表结构、表字段等信息。Hive的元数据使用关系型数据库存储,默认采用derby,可修改为mysql。
4. Hive的本质是将SQL语句转化为MR任务运行。Hive的底层保存很多map和reduce模板,当执行SQL语句时就会将SQL解析为MR。
三、Hive的架构
1. 用户接口层
包括CLI、JDBC等方式连接Hive服务。
2. 元数据存储
Hive中的元数据记录着Hive表中的详细信息,存储在关系型数据库中。
3. 核心驱动层
1)驱动器。驱动整个SQL的运行过程
2)编译器。将SQL语句翻译成MR程序
3)优化器。编译器编译的时候仅仅是将SQL转化为MR程序,没有从性能上考虑,优化
器进行优化,将重复的mr程序合并。
4)执行器。将最终的优化结果进行提交
4. Thrift Driver
Thrift 是 Facebook 开发的一个软件框架,可以用来进行可扩展且跨语言的服务的开发,
Hive 集成了该服务,能让不同的编程语言调用 Hive 的接口。
四、Hive的数据存储
1. Hive的存储结构包括数据库、表、视图、分区和表数据等。数据库,表,分区等都对应HDFS上的一个目录。表数据对应HDFS对应目录下的文件。
2. Hive中所有的数据都存储在HDFS中,没有专门的数据存储格式,因为Hive是读模式,可支持TextFile、SequenceFile、RCFile以及自定义格式等。
3. Hive在创建表时只需要指定行和列分隔符,Hive就可以自动解析数据。
五、Hive中的数据模型
1. database。在HDFS中表现为${hive.metastore.warehouse.dir}目录下的一个目录
默认目录: /user/hive/warehouse/数据库名/表名/数据文件
2. table。在HDFS中表现为database目录下的一个目录
3. external table。与table类似,不过其数据存放位置可以指定任意HDFS目录路径
4. partition。在HDFS中表现为table目录下的一个目录
5. bucket。在HDFS中表现为同一表目录或者分区目录下,根据某个字段的值进行Hash之后
的多个文件
6. view。逻辑视图,代表的是一条SQL语句,只有查询视图的时候才真正执行
六、Hive中的表
Hive中的表分为内部表、外部表、分区表、分桶表。
1. 内部表、外部表
内部表和外部表是相互对立的概念。Hive中的数据包含两个部分:原始数据 + 元数据
内部表和外部表的区别:
1)删除内部表,删除元数据和原始数据
2)删除外部表,只删除元数据,不会删除HDFS上的原始数据
2. 分区表
将不同类别的数据存放在不同目录下,便于数据查询,减少查询的扫描范围。
3. 分桶表
与MR中的分区类似,将数据存储在不同的文件中。表和分区都可以进一步划分桶,根据
表中的某(几)个字段进行Hash散列形成多个文件。用于提升抽样性能、提升join性能。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)