Hive(一)

Hive(一),第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的特点

        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性能。

                

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5665330.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存