我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Hive入门到剖析(四)

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Hive入门到剖析(四)

10 Hive体系架构

10.1  概念

用户接口:用户访问Hive的入口

元数据:Hive的用户信息与表的MetaData

解释器:分析翻译HQL的组件

编译器:编译HQL的组件

优化器:优化HQL的组件

 

10.2  Hive架构与基本组成

1、架构图

Hive入门到剖析(四)

2、基本组成

用户接口,包括 CLI,JDBC/ODBC,WebUI

元数据存储,通常是存储在关系数据库如 mysql, derby 中

解释器、编译器、优化器、执行器

Hadoop:用HDFS 进行存储,利用 MapReduce 进行计算


 3、各组件的基本功能

用户接口主要有三个:CLI,JDBC/ODBC和 WebUI

CLI,即Shell命令行

JDBC/ODBC 是Hive 的JAVA,与使用传统数据库JDBC的方式类似

WebGUI是通过浏览器访问 Hive

Hive 将元数据存储在数据库中,目前只支持 mysql、derby,下一版本会支持更多的数据库。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等

解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行

Hive 的数据存储在HDFS 中,大部分的查询由 MapReduce 完成(包含* 的查询,比如 select * from table 不会生成 MapRedcue 任务)

4、Metastore

Metastore是系统目录(catalog)用于保存Hive中所存储的表的元数据(metadata)信息

Metastore是Hive被用作传统数据库解决方案(如oracle和db2)时区别其它类似系统的一个特征

Metastore包含如下的部分:

Database 是表(table)的名字空间。默认的数据库(database)名为‘default’

Table 表(table)的原数据包含信息有:列(list of columns)和它们的类型(types),拥有者(owner),存储空间(storage)和SerDei信息

Partition 每个分区(partition)都有自己的列(columns),SerDe和存储空间(storage)。这一特征将被用来支持Hive中的模式演变(schema evolution)

 

5、Compiler

Driver调用编译器(compiler)处理HiveQL字串,这些字串可能是一条DDL、DML或查询语句

编译器将字符串转化为策略(plan)

策略仅由元数据操作和HDFS操作组成,元数据操作只包含DDL语句,HDFS操作只包含LOAD语句

对插入和查询而言,策略由map-reduce任务中的具有方向的非循环图(directedacyclic graph,DAG)组成

10.3  Hive运行模式

Hive的运行模式即任务的执行环境

分为本地与集群两种

我们可以通过mapred.job.tracker 来指明

设置方式:hive > SET  mapred.job.tracker=local

 

10.4  数据类型

1、原始数据类型

Integers:TINYINT - 1 byte、SMALLINT - 2 byte、INT - 4 byte、BIGINT - 8 byte

Boolean type:BOOLEAN - TRUE/FALSE

Floating point numbers:FLOAT –单精度、DOUBLE – 双精度

String type:STRING - sequence of charactersin a specified character set

 

2、复杂数据类型

Structs: 例子 {c INT; d INT}

Maps (key-value tuples):. 例子'group' ->gid  M['group']

Arrays (indexable lists):  例子[‘1', ‘2', ‘3']

TIMESTAMP  0.8版本新加属性

10.5  Hive的元数据存储

1、存储方式与模式

Hive将元数据存储在数据库中

连接到数据库模式有三种

单用户模式

多用户模式

远程服务器模式

 

2、单用户模式

此模式连接到一个 In-memory 的数据库 Derby ,一般用于 Unit Test

Hive入门到剖析(四)

 

3、多用户模式

通过网络连接到一个数据库中,是最经常使用到的模式

Hive入门到剖析(四)

4、远程服务器模式

Hive入门到剖析(四)用于非 Java 客户端访问元数据库,在服务器端启动MetaStoreServer,客户端利用 Thrift 协议通过MetaStoreServer 访问元数据库。


10.6  Hive的数据存储

1、Hive数据存储的基本概念

Hive的数据存储是建立在Hadoop HDFS之上的

Hive没有专门的数据存储格式

存储结构主要包括:数据库、文件、表、视图

Hive默认可以直接加载文本文件,还支持sequence file 、RCFile

创建表时,我们直接告诉Hive数据的列分隔符与行分隔符,Hive即可解析数据

 

2、Hive的数据模型-数据库

类似传统数据库的DataBase

在第三方数据库里实际是一张表

简单示例:命令行hive > create database test_database;

 

3、内部表

与数据库中的 Table 在概念上是类似

每一个 Table 在 Hive 中都有一个相应的目录存储数据

例如,一个表 test,它在 HDFS 中的路径为:/warehouse /test

warehouse是在 hive-site.xml 中由

   ${hive.metastore.warehouse.dir}指定的数据仓库的目录

所有的 Table 数据(不包括 External Table)都保存在这个目录中。

删除表时,元数据与数据都会被删除


4、内部表简单示例

创建数据文件test_inner_table.txt

创建表

create table test_inner_table (key string)

加载数据

LOAD DATA LOCAL INPATH ‘filepath’ INTO TABLE test_inner_table

查看数据

select * from test_inner_table
select count(*) from test_inner_table

删除表 

drop table test_inner_table

 

5、分区表

Partition 对应于数据库中的 Partition 列的密集索引

在 Hive 中,表中的一个 Partition 对应于表下的一个目录,所有的 Partition 的数据都存储在对应的目录中

例如:test表中包含 date 和position 两个 Partition,则对应于 date= 20120801, position = zh 的 HDFS 子目录为:/ warehouse /test/date=20120801/ position =zh

对应于  = 20100801, position = US 的HDFS 子目录为;/ warehouse/xiaojun/date=20120801/ position =US


6、分区表简单示例

创建数据文件test_partition_table.txt

创建表

create table test_partition_table (key string) partitioned by (dtstring)

加载数据

LOAD DATA INPATH ‘filepath’ INTO TABLE test_partition_tablepartition (dt=‘2006’)

查看数据

select * from test_partition_table
select count(*) from test_partition_table

删除表

 drop table test_partition_table

 

7、外部表

指向已经在 HDFS 中存在的数据,可以创建 Partition

它和 内部表 在元数据的组织上是相同的,而实际数据的存储则有较大的差异

内部表 的创建过程和数据加载过程(这两个过程可以在同一个语句中完成),在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除

外部表 只有一个过程,加载数据和创建表同时完成,并不会移动到数据仓库目录中,只是与外部数据建立一个链接。当删除一个外部表 时,仅删除该链接


8、外部表简单示例

创建数据文件test_external_table.txt

创建表

create external table test_external_table (key string)

加载数据

LOAD DATA INPATH ‘filepath’ INTO TABLE test_inner_table

查看数据

select * from test_external_table
select count(*) from test_external_table

删除表

drop table test_external_table

 

9、Bucket Table(桶表)

可以将表的列通过Hash算法进一步分解成不同的文件存储

例如:将age列分散成20个文件,首先要对AGE进行Hash计算,对应为0的写入/warehouse/test/date=20120801/postion=zh/part-00000,对应为1的写入/warehouse/test/date=20120801/postion=zh/part-00001

如果想应用很多的Map任务这样是不错的选择


10、Bucket Table简单示例

创建数据文件test_bucket_table.txt

创建表

create table test_bucket_table (key string)
     clustered by (key)into 20 buckets

加载数据

LOAD DATA INPATH ‘filepath’ INTO TABLE test_bucket_table

查看数据

select * from test_bucket_table
set hive.enforce.bucketing = true;

 

11、Hive的数据模型-视图

视图与传统数据库的视图类似

视图是只读的

视图基于的基本表,如果改变,指增加不会影响视图的呈现;如果删除,会出现问题

如果不指定视图的列,会根据select语句后的生成

示例

create view test_view as select * from test

 

10.7  Hive的数据存储

配置步骤:

hive-site.xml 添加

<property>
       <name>hive.hwi.war.file</name>
       <value>lib/hive-hwi-0.8.1.war</value>
  </property>

启动Hive的UI sh $HIVE_HOME/bin/hive --service hwi

11 Hive原理

11.1  Hive原理

1、什么要学习Hive的原理

一条Hive HQL将转换为多少道MR作业

怎么样加快Hive的执行速度

编写Hive HQL的时候我们可以做什么

Hive 怎么将HQL转换为MR作业

Hive会采用什么样的优化方式

 

2、Hive架构&执行流程图 

Hive入门到剖析(四)

3、Hive执行流程

编译器将一个Hive QL转换操作符

操作符是Hive的最小的处理单元

每个操作符代表HDFS的一个操作或者一道MapReduce作业

 

4、Operator

Operator都是hive定义的一个处理过程

Operator都定义有:

protected List <Operator<? extends Serializable >> childOperators;

protected List <Operator<? extends Serializable >> parentOperators;

protected boolean done; // 初始化值为false

所有的操作构成了 Operator图,hive正是基于这些图关系来处理诸如limit, group by, join等操作。

Hive入门到剖析(四)

5、Hive执行流程

操作符

描述

TableScanOperator

扫描hive表数据

ReduceSinkOperator

创建将发送到Reducer端的<Key,Value>对

JoinOperator

Join两份数据

SelectOperator

选择输出列

FileSinkOperator

建立结果数据,输出至文件

FilterOperator

过滤输入数据

GroupByOperator

GroupBy语句

MapJoinOperator

LimitOperator

Limit语句

UnionOperator

Union语句

Hive通过ExecMapper和ExecReducer执行MapReduce任务

在执行MapReduce时有两种模式

本地模式

分布式模式

   

   6、ANTLR词法语法分析工具

ANTLR—Another Tool for Language Recognition

ANTLR 是开源的

为包括Java,C++,C#在内的语言提供了一个通过语法描述来自动构造自定义语言的识别器(recognizer),编译器(parser)和解释器(translator)的框架

Hibernate就是使用了该分析工具


11.2  一条HQL引发的思考

1、案例HQL

select key from test_limit limit 1

Stage-1

TableScan Operator>Select Operator-> Limit->File OutputOperator

Stage-0

Fetch Operator

读取文件

 

2、Mapper与InputFormat

该hive MR作业中指定的mapper是:

mapred.mapper.class = org.apache.hadoop.hive.ql.exec.ExecMapper

input format是:

hive.input.format  =

   org.apache.hadoop.hive.ql.io.CombineHiveInputFormat

该hive MR作业中指定的mapper是:

mapred.mapper.class = org.apache.hadoop.hive.ql.exec.ExecMapper

input format是:

hive.input.format  =

   org.apache.hadoop.hive.ql.io.CombineHiveInputFormat


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Hive入门到剖析(四)

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

剖析 JavaScript BOM:从入门到精通

剖析 JavaScript BOM:从入门到精取精华
剖析 JavaScript BOM:从入门到精通
2024-03-05

Flask入门到放弃(四)—— 数据库

转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10979970.htmlORMORM 全拼Object-Relation Mapping,中文意为 对象-关系映射。主要实现模型对象到关系数
2023-01-31

深入剖析从输入URL到页面显示过程原理

这篇文章主要为大家深入剖析了从输入URL到页面显示这中间发生的过程原理,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-05-15

【MySQL新手入门系列四】:手把手教你MySQL数据查询由入门到学徒

SQL语言是与数据库交互的机制,是关系型数据库的标准语言。SQL语言可以用于创建、修改和查询关系数据库。SQL的SELECT语句是最重要的命令之一,用于从指定表中查询数据。在此博客中,我们将进一步了解SELECT语句以及WHERE子句以及它
2023-08-17

nodejs入门教程四:URL相关模块用法分析

本文实例讲述了nodejs入门教程之URL相关模块用法。分享给大家供大家参考,具体如下: 1.URL 模块:用于 URL 处理与解析 1)URI 与 URL : URI,是uniform resource identifier,统一资源标识
2022-06-04

iptables从入门到应用的实例分析

iptables从入门到应用的实例分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。iptables从入门到应用 一、简介 1.1、是什么? iptabl
2023-06-06

JavaScript 原型模式的深入剖析:从原理到应用

JavaScript原型模式是一种强大的机制,允许您创建和扩展对象。通过理解原型链的概念和原型方法的使用,您可以编写出更强大、更灵活的代码。
JavaScript 原型模式的深入剖析:从原理到应用
2024-02-06

深入剖析vite到底是快还是慢原理详解

这篇文章主要为大家介绍了深入剖析vite到底是快还是慢原理详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2022-11-13

python爬虫入门教程--HTML文本的解析库BeautifulSoup(四)

前言 python爬虫系列文章的第3篇介绍了网络请求库神器 Requests ,请求把数据返回来之后就要提取目标数据,不同的网站返回的内容通常有多种不同的格式,一种是 json 格式,这类数据对开发者来说最友好。另一种 XML 格式的,还有
2022-06-04

深入剖析Python数据类型:从基础类型到复杂类型

Python数据类型全解析:从基本类型到复合类型,需要具体代码示例概述:在Python编程中,数据类型是非常重要的概念。Python提供了丰富的数据类型,包括基本类型和复合类型。本文将对Python的数据类型进行全面解析,讲解它们的特点、
深入剖析Python数据类型:从基础类型到复杂类型
2024-01-20

全面解析pip换源方法:从入门到精通

pip换源方法全面解析pip作为Python包管理器,是Python开发中常用的工具之一。但是在使用pip时,可能会遇到安装速度缓慢或无法连接到pip官方源等问题。这时候就需要切换pip源来加速下载和安装。本文将介绍从入门到精通pip换源
全面解析pip换源方法:从入门到精通
2024-01-16

编程热搜

目录