百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

hive架构详解

bigegpt 2024-08-26 11:15 3 浏览

一.hive的架构:

hive架构分为四层,如下图所示:

1.用户接口层(最外层)

对外提供的有三种类型

1)cli 命令行客户端 最常用的方式

2)jdbc/odbc 用java api 连接hive数据库

3)web ui 基本上不用,因为太丑,并且用着比较麻烦

2.元数据库:保存元数据 一般情况下会选用传统的关系型数据库 用的最多的是mysql,默认为derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。

3.thrift服务:用来提供一个跨语言的服务,hive数据仓库,能够解析的语言是sql,hive集成了该服务,能让不同的编程语言调用hive的接口。正因为有这个服务,我们才可以用java ,ruby,c语言来操作hive数据库

4.驱动层:

1)驱动器:驱动整个sql语句的运行 包含sql语句解析Mr程序,最终将mr程序提交到hadoop

2)编译器:将sql语句通过hive自带的map reduce 模板,编译成mr程序,首先生成一个

逻辑执行计划,再生成一个物理执行计划

3)优化器:在编译的过程中肯定会有很多sql转化的mr程序存在包含关系或者是重复的操作

在优化器中就可以将重复的操作过滤掉,最终程序提交的应该是最优的mr程序

二.hive的数据组织格式:

1.库:database

2.表:

1)内部表/管理表(managed table)【默认为内部表】

Hive的内部表与数据库中的Table在概念上是类似。每一个Table在Hive中都有一个相应的目录存储数据。例如一个表stu,它在HDFS中的路径为/user/hive/warehouse/stu,其中stu是在hive-site.xml中由${hive.metastore.warehouse.dir} 指定的数据仓库的目录,所有的Table数据(不包括External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除。

2)外部表(external table)

外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据对访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE ……LOCATION),实际数据是存储在LOCATION后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该链接。

内部表和外部表是两个相对的概念,不可能有一个表同时既是内部表又是外部表

内部表与外部表的区别:删除表的时候是否删除hdfs上文件中的数据****

1)内部表数据由Hive自身管理,外部表数据由HDFS管理;

2)内部表数据存储的位置是hive.metastore.warehouse.dir(默认:/user/hive/warehouse),外部表数据的存储位置由自己制定;

3)删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;

4)对内部表的修改会将修改直接同步给元数据,而对外部表的表结构和分区进行修改,则需要修复(MSCK REPAIR TABLE table_name;)

一般情况下存储公共数据的表要存放成外部表

3)分区表:不同于hadoop中分区,分区是人为划分的

hive最终存储海量数据,海量数据查询一定要避免全表扫描 select * from stu;

查询的时候为了提升查询性能,就出现了分区表

分区表是将数据按照用户的业务存储到不同的目录下

假设电信要查询不同地区的流量使用情况

北京 天津 上海 深圳

假设我就存在一个普通的表中,有一个字段是city 每次进行查询都需要进行全表扫描 性能不高

普通表存储路径:/hive/warehouse/log.txt

分区表:存储的指定的不同目录 就叫做分区字段 可以避免全表扫描

 /hive/warehouse/city=beijing/log_beijing.txt
 /hive/warehouse/city=tianjin/log_tianjin.txt
 /hive/warehouse/city=shanghai/log_shanghai.txt
 /hive/warehouse/city=shenzhen/log_shenzhen.txt

数据查询 select * from stu where city=beijing;在执行的时候只会对指定的分区就行查询,不会全表扫描,可以提高查询效率

一般情况下生产中以日期作为分区字段

4)分桶表:类似于hadoop中的分区,分区是程序决定的 ,只能指定桶的个数,类似于hadoop中分区的个数

根据hash算法将余数不同的输出到不同的文件中

若指定三个分桶,则有三个文件

 /hive/warehouse/part-r-0000
 /hive/warehouse/part-r-0001
 /hive/warehouse/part-r-0002

作用:

1)提升join的性能

2)提升数据样本的抽取效率 ,因为桶中的数据是比较散列的,可以直接拿一个桶中的数据作为样本数据

5)视图

hive中的视图仅仅相当于一个sql语句的快捷方式/别名,而没有真正的执行sql语句,因为在hive中仅仅存在逻辑视图不存在物理视图

物理视图:是将sql语句的执行结果存储在视图中

 stu:id name sex age department
 create view my_view as select id,name,sex,from stu;
 select * from my_view; --视图开始执行

三.hive数据存储:

hive 中的数据存储的时候原始数据存储在hdfs中,元数据存在mysql中

这期就先分享到这里,下期我会带大家一起详细讲解下hive中的DDL与DML语句,如果大家愿意一起学习,可以点击右上角关注哦!欢迎留下您的足迹与评论^^

相关推荐

Docker篇(二):Docker实战,命令解析

大家好,我是杰哥上周我们通过几个问题,让大家对于Docker有了一个全局的认识。然而,说跟练往往是两个概念。从学习的角度来说,理论知识的学习,往往只是第一步,只有经过实战,才能真正掌握一门技术所以,本...

docker学习笔记——安装和基本操作

今天学习了docker的基本知识,记录一下docker的安装步骤和基本命令(以CentOS7.x为例)一、安装docker的步骤:1.yuminstall-yyum-utils2.yum-con...

不可错过的Docker完整笔记(dockerhib)

简介一、Docker简介Docker是一个开源的应用容器引擎,基于Go语言并遵从Apache2.0协议开源。Docker可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,...

扔掉运营商的 IPTV 机顶盒,全屋全设备畅看 IPTV!

其实现在看电视节目的需求确实大大降低了,折腾也只是为了单纯的让它实现,享受这个过程带来的快乐而已,哈哈!预期构想家里所有设备直接接入网络随时接收并播放IPTV直播(电信点播的节目不是太多,但好在非常稳...

第五节 Docker 入门实践:从 Hello World 到容器操作

一、Docker容器基础运行(一)单次命令执行通过dockerrun命令可以直接在容器中执行指定命令,这是体验Docker最快捷的方式:#在ubuntu:15.10容器中执行ech...

替代Docker build的Buildah简单介绍

Buildah是用于通过较低级别的coreutils接口构建OCI兼容镜像的工具。与Podman相似,Buildah不依赖于Docker或CRI-O之类的守护程序,并且不需要root特权。Builda...

Docker 命令大全(docker命令大全记录表)

容器生命周期管理run-创建并启动一个新的容器。start/stop/restart-这些命令主要用于启动、停止和重启容器。kill-立即终止一个或多个正在运行的容器rm-于删除一个或...

docker常用指令及安装rabbitMQ(docker安装rabbitmq配置环境)

一、docker常用指令启动docker:systemctlstartdocker停止docker:systemctlstopdocker重启docker:systemctlrestart...

使用Docker快速部署Storm环境(docker部署confluence)

Storm的部署虽然不是特别麻烦,但是在生产环境中,为了提高部署效率,方便管理维护,使用Docker来统一管理部署是一个不错的选择。下面是我开源的一个新的项目,一个配置好了storm与mono环境的D...

Docker Desktop安装使用指南:零基础教程

在之前的文章中,我多次提到使用Docker来安装各类软件,尤其是开源软件应用。鉴于不少读者对此有需求,我决定专门制作一期关于Docker安装与使用的详细教程。我主要以Macbook(Mac平台)为例进...

Linux如何成功地离线安装docker(linux离线安装httpd)

系统环境:Redhat7.2和Centos7.4实测成功近期因项目需要用docker,所以记录一些相关知识,由于生产环境是不能直接连接互联网,尝试在linux中离线安装docker。步骤1.下载...

Docker 类面试题(常见问题)(docker面试题目)

Docker常见问题汇总镜像相关1、如何批量清理临时镜像文件?可以使用sudodockerrmi$(sudodockerimages-q-fdanging=true)命令2、如何查看...

面试官:你知道Dubbo怎么优雅上下线的吗?你:优雅上下线是啥?

最近无论是校招还是社招,都进行的如火如荼,我也承担了很多的面试工作,在一次面试过程中,和候选人聊了一些关于Dubbo的知识。Dubbo是一个比较著名的RPC框架,很多人对于他的一些网络通信、通信协议、...

【Docker 新手入门指南】第五章:Hello Word

适合人群:完全零基础新手|学习目标:30分钟掌握Docker核心操作一、准备工作:先确认是否安装成功打开终端(Windows用户用PowerShell或GitBash),输入:docker--...

松勤软件测试:详解Docker,如何用portainer管理Docker容器

镜像管理搜索镜像dockersearch镜像名称拉取镜像dockerpullname[:tag]列出镜像dockerimages删除镜像dockerrmiimage名称或id删除...