Hive-原理解析

一、Hive 架构

下面是Hive的架构图。
在这里插入图片描述

Hive的体系结构可以分为以下几部分

1、用户接口:CLI(hive shell);JDBC(java访问Hive);WEBUI(浏览器访问Hive)
2、元数据:MetaStore
元数据包括:表名、表所属的数据库(默认是default)、表的拥有者、列/分区字段,标的类型(表是否为外部表)、表的数据所在目录。这是数据默认存储在Hive自带的derby数据库中,推荐使用MySQL数据库存储MetaStore。
3、Hadoop集群:
使用HDFS进行存储数据,使用MapReduce进行计算。
4、Driver:驱动器:

  • 解析器(SQL Parser):将SQL字符串换成抽象语法树AST,对AST进行语法分析,像是表是否存在、字段是否存在、SQL语义是否有误。
  • 编译器(Physical Plan):将AST编译成逻辑执行计划。
  • 优化器(Query Optimizer):将逻辑计划进行优化。
  • 执行器(Execution):把执行计划转换成可以运行的物理计划。对于Hive来说默认就是Mapreduce任务。

二、Hive 工作原理

​ Hive 工作原理如下图所示。

img

1、ExecuteQuery:操作Hive接口,如命令行或Web UI发送查询驱动程序(任何数据库驱动程序,如JDBC,ODBC等)来执行。

2、Get Plan:在驱动程序帮助下查询编译器,分析查询检查语法和查询计划或查询的要求。

3、Get Metadata:编译器发送元数据请求到Metastore(任何数据库)。

4、Send Metadata:Metastore发送元数据,以编译器的响应。

5、Send Plan:编译器检查要求,并重新发送计划给驱动程序。到此为止,查询解析和编译完成。

6、Execute Plan:驱动程序发送的执行计划到执行引擎。

  • Execute Job:在内部,执行作业的过程是一个MapReduce工作。执行引擎发送作业给JobTracker,在名称节点并把它分配作业到TaskTracker,这是在数据节点。在这里,查询执行MapReduce工作。

  • Metadata Ops:与此同时,在执行时,执行引擎可以通过Metastore执行元数据操作。

7、Fetch Result:执行引擎接收来自数据节点的结果。

8、Send Results:执行引擎发送这些结果值给驱动程序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/535741.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

linux命令之history命令

在Linux系统上输入命令并按下Enter后,这个命令就会存放在命令记录表 ( ~/.bash_history )中,预定的记录为1000条,这些都定义在环境变量中。列出所有的历史记录:#history 只列出最近10条记录:#history 10 (注,history和…

Hive-配置安装

一、HDFS安装 1、解压到指定位置tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /usr/local/apps/ 2、改名mv apache-hive-3.1.2-bin/ hive-3.1.2 3、在conf目录下添加Hadoop安装路径mv hive-env.sh.template hive-env.sh # 配置HADOOP_HOME路径 export HADOOP_HOME/opt/module/…

linux文件系统概念目录结构

文件系统概念一. 文件与目录的定义1. 文件系统:它是磁盘上有特定格式的一片区域,操作系统通过文件系统可以方便地查寻和访问其中所包含的磁盘块;2. 文件:文件系统中存储数据的一个命名的对象。3. 目录:其中包含许多文件…

JDK源码解析之 java.lang.Class

Java程序在运行时,Java运行时系统一直对所有的对象进行所谓的运行时类型标识。 这项信息纪录了每个对象所属的类。虚拟机通常使用运行时类型信息选准正确方法去执行,用来保存这些类型信息的类是Class类。Class类封装一个对象和接口运行时的状态&#xff…

Linux Vi常用技巧

VI常用技巧VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种方…

JDK源码解析之 java.lang.ClassLoader

Class代表它的作用对象是类&#xff0c;Loader代表它的功能是加载&#xff0c;那么ClassLoader就是把一个以.class结尾的文件以JVM能识别的存储形式加载到内存中。 一、核心方法 1、loadClass方法 protected Class<?> loadClass(String name, boolean resolve) throws…

Linux Vi的使用

一、插入文本┌──┬────────────┐│命令│描述 │├──┼────────────┤│i │在当前字符前插入文本 │├──┼────────────┤│I │在行首插入文本 │├──┼────────────┤│a │在当前字符后添加文本 │├──┼──…

Hive-beeline服务

Hive客户端工具后续使用了Beeline 替代HiveCLI &#xff0c;并且后续版本也会废弃掉HiveCLI 客户端工具,Beeline是 Hive 0.11版本引入的新命令行客户端工具,它是基于SQLLine CLI的JDBC客户端。 Beeline支持嵌入模式(embedded mode)和远程模式(remote mode)。在嵌入式模式下&am…

用户账号管理基本概念

什么是用户账号管理用户账号一般包括普通用户账号、管理账号和系统账号。为了鉴别用户身份以及加强系统安全&#xff0c;系统为每个使用它的人分配了一个账号&#xff0c;这就是普通用户账号。每个人拥有一个独立的普通用户账号&#xff0c;每个账号有不同的用户名和密码。用户…

JDK源码解析之 Java.lang.Compiler

Compiler类提供支持Java到本机代码编译器和相关服务。在设计上&#xff0c;它作为一个占位符在JIT编译器实现。 一、源码部分 public final class Compiler {private Compiler() {} // dont make instancesprivate static native void initialize();private st…

shell的基本概念

Shell就像一个壳层&#xff0c;这个壳层介于用户和操作系统之间&#xff0c;负责将用户的命令解释为操作系统可以接收的低级语言&#xff0c;并将操作系统响应的信息以用户可以了解的方式来显示。 从用户登陆到注销期间&#xff0c;用户输入的每个命令都会经过解译及…

JDK源码解析之 java.lang.System

一个和系统环境进行交互的类. System不允许被实例化, 而且是一个final类 一、不能实例化 private System() { }二、成员变量 public final static InputStream in null; //这是“标准”输入流。 public final static PrintStream out null; //这是“标准”输出流。 public …

详解MySQL中DROP,TRUNCATE 和DELETE的区别

注意:这里说的delete是指不带where子句的delete语句 相同点: truncate和不带where子句的delete, 以及drop都会删除表内的数据 不同点: 1. truncate和 delete只删除数据不删除表的结构(定义) drop语句将删除表的结构被依赖的约束(constrain),触发器(trigger),索引(index…

JDK源码解析之 Java.lang.Package

如果我们在Class对象上调用getPackage方法&#xff0c;就可以得到描述该类所在包的Package对象(Package类是在java.lang中定义的)。我们也可以用包名通过调用静态方法getPackage或者调用静态方法getPackages(该方法返回由系统中所有已知包构成的数组)来获得Package对象。getNam…

Mysql中limit的用法详解

在我们使用查询语句的时候&#xff0c;经常要返回前几条或者中间某几行数据&#xff0c;这个时候怎么办呢&#xff1f;不用担心&#xff0c;mysql已经为我们提供了这样一个功能。SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset LIMIT 子句可以被用于强制 SE…

Docker入门-简介

独具魅力的Docker作为一门新技术&#xff0c;它的出现有可能引起其所在领域大范围的波动甚至是重新洗牌。根据业内专业人士的看法&#xff0c;不论如何&#xff0c;Docker的出现&#xff0c;已经成为云服务市场中一枚极具意义的战略性棋子。从2013年开始在国内发力&#xff0c;…

Mysql中limit的优化

在一些情况中&#xff0c;当你使用LIMIT row_count而不使用HAVING时&#xff0c;MySQL将以不同方式处理查询。 如果你用LIMIT只选择一些行&#xff0c;当MySQL选择做完整的表扫描时&#xff0c;它将在一些情况下使用索引。 如果你使用LIMIT row_count与ORD…

Docker入门-架构

Docker 包括三个基本概念: 镜像&#xff08;Image&#xff09;&#xff1a;Docker 镜像&#xff08;Image&#xff09;&#xff0c;就相当于是一个 root 文件系统。比如官方镜像 ubuntu:16.04 就包含了完整的一套 Ubuntu16.04 最小系统的 root 文件系统。容器&#xff08;Cont…

MYSQL出错代码列表大全(中文)

mysql出错了,以前往往靠猜.现在有了这张表,一查就出来了. 1005&#xff1a;创建表失败1006&#xff1a;创建数据库失败1007&#xff1a;数据库已存在&#xff0c;创建数据库失败1008&#xff1a;数据库不存在&#xff0c;删除数据库失败1009&#xff1a;不能删除数据库文件导致…

Docker入门-安装

Centos7下安装Docker docker官方说至少Linux 内核3.8 以上&#xff0c;建议3.10以上&#xff08;ubuntu下要linux内核3.8以上&#xff0c; RHEL/Centos 的内核修补过&#xff0c; centos6.5的版本就可以&#xff09; 1、把yum包更新到最新&#xff1a;yum update 2、安装需要的…