新闻资讯

    1 Hive概述

    1.1 什么是Hive

    Hive是一款建立在之上的开源数据仓库系统,可以将存储在文件中的结构化、半结构化数据文件映射为一张数据库表,基于表提供了一种类似SQL的查询模型,称为Hive查询语言(HQL),用于访问和分析存储在文件中的大型数据集。

    Hive核心是将HQL转换为程序,然后将程序提交到群集执行。Hive由实现并开源。

    1.2 为什么使用Hive

    使用 直接处理数据所面临的问题:

    人员学习成本太高 需要掌握java语言

    实现复杂查询逻辑开发难度太大

    使用Hive处理数据的好处:

    操作接口采用类SQL语法,提供快速开发的能力(简单、容易上手)

    避免直接写,减少开发人员的学习成本

    支持自定义函数,功能扩展很方便

    背靠,擅长存储分析海量数据集

    1.3 Hive与的关系

    从功能来说,数据仓库软件,至少需要具备下述两种能力:

    Hive作为一款大数据时代的数据仓库软件,当然也具备上述两种能力。只不过Hive并不是自己实现了上述两种能力,而是借助。

    Hive利用HDFS存储数据,利用查询分析数据。

    这样突然发现Hive没啥用,不过是套壳罢了。其实不然,Hive的最大的魅力在于用户专注于编写HQLhive元数据是管理,Hive帮您转换成为程序完成对数据的分析。

    2 场景设计:如何模拟实现Hive的功能

    2.1 场景需求

    在HDFS文件系统上有一个文件,路径为/data/.txthive元数据是管理,其内容如下:

    1,zhangsan,18,beijing
    2,lisi,25,shanghai
    3,allen,30,shanghai
    4,wangwu,15,nanjing
    5,james,45,hangzhou
    6,tony,26,beijing

    需求:统计来自于上海年龄大于25岁的用户有多少个?

    如果让您设计Hive这款软件,要求能够实现用户编写sql语句,Hive自动将sql转换程序,处理位于HDFS上的结构化数据。如何实现?

    2.2 场景目的

    重点理解下面两点:

    Hive能将数据文件映射成为一张表,这个映射是指什么?

    Hive软件本身到底承担了什么功能职责?

    2.3 功能实现关键

    映射信息记录

    映射在数学上称之为一种对应关系,比如y=x+1,对于每一个x的值都有与之对应的y的值。在hive中能够写sql处理的前提是针对表,而不是针对文件,因此需要将文件和表之间的对应关系描述记录清楚。映射信息专业的叫法称之为元数据信息(元数据是指用来描述数据的数据 )。

    具体来看,要记录的元数据信息包括:

    Sql语法解析、编译

    用户写完sql之后,hive需要针对sql进行语法校验,并且根据记录的元数据信息解读sql背后的含义,制定执行计划。并且把执行计划转换成程序来执行,把执行的结果封装返回给用户。

    2.4 最终效果

    基于上述分析,最终要想模拟实现的Hive的功能,大致需要下图所示组件参与其中,从中可以感受一下Hive承担了什么职责。

    当然,也可以把这个理解为hive的架构图。

    3 Hive架构、组件

    3.1 Hive架构图

    3.2 Hive组件

    用户接口:包括 CLI、JDBC/ODBC、。其中,CLI( line )为shell命令行;Hive中的服务器允许外部客户端通过网络与Hive进行交互,类似于JDBC或ODBC协议。是通过浏览器访问Hive。

    元数据存储:通常是存储在关系数据库如 mysql/derby中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

    驱动程序,包括语法解析器、计划编译器、优化器、执行器:完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有执行引擎调用执行。

    执行引擎:Hive本身并不直接处理数据文件。而是通过执行引擎处理。当下Hive支持、Tez、种执行引擎。

    4 Hive数据模型(Data Model)

    数据模型:用来描述数据、组织数据和对数据进行操作,是对现实世界数据特征的描述。Hive的数据模型类似于RDBMS库表结构,此外还有自己特有模型。

    Hive中的数据可以在粒度级别上分为三类:

    4.1

    Hive作为一个数据仓库,在结构上积极向传统数据库看齐,也分数据库(),每个数据库下面有各自的表组成。默认数据库。

    Hive的数据都是存储在HDFS上的,默认有一个根目录,在hive-site.xml中,由参数hive...dir指定。默认值为/user/hive/。

    因此,Hive中的数据库在HDFS上的存储路径为:

    ${hive.metastore.warehouse.dir}/databasename.db

    比如,名为的数据库存储路径为:

    /user/hive/warehouse/handsome.db

    4.2

    Hive表与关系数据库中的表相同。Hive中的表所对应的数据是存储在的文件系统中,而表相关的元数据是存储在RDBMS中。

    在中,数据通常驻留在HDFS中,尽管它可以驻留在任何文件系统中,包括本地文件系统或S3。Hive有两种类型的表:

    创建表时,默是内部表。关于内部表和外部表的区别,我们后续知识点再做展开探讨。Hive中的表的数据在HDFS上的存储路径为:

    ${hive.metastore.warehouse.dir}/databasename.db/tablename

    比如,的数据库下表存储路径为:

    /user/hive/warehouse/handsome.db/t_user

    4.3

    分区是hive的一种优化手段表。分区是指根据分区列(例如“日期day”)的值将表划分为不同分区。这样可以更快地对指定分区数据进行查询。

    分区在存储层面上的表现是:table表目录下以子文件夹形式存在。

    一个文件夹表示一个分区。子文件命名标准:分区列=分区值

    Hive还支持分区下继续创建分区,所谓的多重分区。关于分区表的使用和详细介绍,后面模块会单独展开详细讲解。

    4.4

    分桶表是hive的一种优化手段表。分桶是指根据表中字段(例如“编号ID”)的值,经过hash计算规则将数据文件划分成指定的若干个小文件。

    分桶规则:(ID) % 桶个数,余数相同的分到同一个文件。

    分桶的好处是可以优化join查询和方便抽样查询。分桶表在hdfs中表现为同一个表目录下数据根据hash散列之后变成多个文件。关于桶表以及分桶操作,后面模块会单独展开详细讲解。

    5 Hive是要取代Mysql吗?

    Hive虽然具有RDBMS数据库的外表,包括数据模型、SQL语法都十分相似,但应用场景却完全不同。Hive只适合用来做海量数据的离线分析。Hive的定位是数据仓库,面向分析的OLAP系统。

    因此时刻告诉自己,Hive不是大型数据库,也不是要取代Mysql承担业务数据处理。

    更直观的对比请看下面这幅图:

网站首页   |    关于我们   |    公司新闻   |    产品方案   |    用户案例   |    售后服务   |    合作伙伴   |    人才招聘   |   

地址:北京市海淀区    电话:010-     邮箱:@126.com

备案号:冀ICP备2024067069号-3 北京科技有限公司版权所有