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

细品入门Hive

bigegpt 2024-09-20 14:10 4 浏览

#2021加油带头人#HIVE是构建在Hadoop上的数据仓库平台,设计目标是使Hadoop上的数据操作与传统SQL结合,便于熟悉SQL的开发人员转向Hadoop平台,简化编写MapReduce。hive是批处理系统,任务是高延迟性的。Hive的处理集非常小,比如几百兆,在执行时也会出现延迟现象。


Hive与HBASE的区别:

Hive本身不存储和计算数据,完全依赖HDFS和MapReduce,hive中的表是纯逻辑表。

HBASE是一个分布式的、面向列的开源数据库,适合非结构化数据存储的数据库。HBASE通过组织起节点内所有机器的内存,提供一个超大的内存hash表。HBASE需要组织自己的数据结构,包括磁盘和内存,而hive是不做这些的。表在HBASE是物理表。HBASE主要用于需要随机访问、实时读取的大数据。

Hive与关系型数据库的关系:



hive体系结构:


1、用户接口:UI用户提交查询和其他操作,包括命令接口、web UI、JDBC客户端、ODBC客户端。最常用的是CLI,CLI启动时,会同时启动一个hive副本。Client是hive的客户端,用户连接至hive server,在启动client模式时,需要指出hive server所在的节点,并且在该节点启动hive server。

2、Thrift服务器:当hive以服务模式运行时,可以作为Thrift服务器供客户连接。

3、元数据存储:存储数据仓库中所有表的结构化信息,包括列与列类型的信息,序列化器与反序列化器,从而能够读写HDFS中的数据,通常是存储在关系型数据库中如MySQL、Derby。

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

5、Hadoop:hive的数据存储在HDFS中,并且利用Hadoop的MapReduce进行计算。

hive有三种连接模式:单用户模式(single user mode),多用户模式(multi user mode)、远程服务模式(remote server mode)。其中单用户和多用户模式属于本地存储,远程服务模式属于远端存储。

单用户模式:默认安装hive时,是使用Derby存储元数据。该模式只连接到一个内存数据库Derby中,一般用于单元测试。使用Derby存储时运行hive,会在当前目录中生成一个Derby文件和一个metastore_db目录。这种存储方式的弊端,是在同一个目录下同时只能有一个客户端使用数据库。



多用户模式:通过网络连接到一个数据库中。


远程服务器模式:主要用于非Java客户端访问元数据库,在服务器端启动MetaStore Server,客户端利用Thrift协议,通过MetaStore Server访问元数据库。该模式服务器配置与多用户模式基本一致。



Hive主要包括四种数据模型:表、分区、桶(bucket)、外部表(external table)。



数据库下是表,表中包含分区、桶、倾斜数据、正常数据,分区下也可以创建桶。

1、表:比如表tab1,HDFS路径: /datawarehouse/tab1 ,其中/datawarehouse 是配置文件hive-site.xml中${hive.metastore.warehouse.dir}指定的数据仓库目录。除了外部表之外,其余的表都保存在这个目录中。

2、分区:hive中每个分区都对应数据库中相应列的一个索引,但是分区的组织方式与传统关系型数据库不同。在hive表中,表的一个分区对应表的一个目录,所有分区数据都存储在对应的目录中,比如tab1中包含dt和ct两个分区,分别对应两个目录,对应dt=123456,ct=Shenzhen的HDFS子目录为 /datawarehouse/tab1/dt=123456/ct=Shenzhen 。

3、桶:相对于指定的列进行hash计算,根据hash值切分数据,每个桶对应一个文件。比如将属性user列分散到32个桶中,首先要将user列进行hash计算,对应hash值为0的桶写HDFS的目录为: /datawarehouse/tab1/dt=123456/ct=Shenzhen/part=00000 。

对应hash值为10的HDFS目录为:

/datawarehouse/tab1/dt=123456/ct=Shenzhen/part=00010 。

4、外部表:指向已经在HDFS中存在的数据,也可以创建分区,外部表与表在元数据上是相同的,但实际数据的存储则存在差异,主要表现为:a、创建表的操作包含两个过程:表创建过程 和 数据加载步骤。两个过程可以在同一个语句中完成,在数据加载过程中,实际数据会移到数据仓库目录中,后续的数据访问会在实际的目录中完成。删除表,表中的数据和元数据会一并被删除。b、外部表的创建只有一个步骤,加载数据和创建表同时完成,实际数据存储在创建表语句 location 指定的HDFS路径中,并不会移动到数据仓库目录中。如果删除一个外部表,只会删除元数据,不会删除表中的数据。

常见的SQL语句转换成MapReduce:

1、join:举例,

select u.name, o.orderid

from order o

join user u

on o.uid = u.uid



2、group by:举例

Select rank, isonline, count(1)

From city

Group by rank, isonline;



3、单个distinct:举例

Select dealid, count(distinct uid)

From num

Group by dealid;


4、多个distinct:举例:

Select dealin, count(distinct uid), count(distinct date)

From order

Group by dealid;



Hive的执行流程:

由客户端提供查询语句交给hive,hive再交给driver处理,分成四个步骤:1、编译器先编译。编译器从MetaStore中获取元数据,生成逻辑计划。2、执行物理计划。3、由driver进行优化。4、执行器执行时对物理计划再分解成job,并且将这个job提交给MapReduce的job tracker进行运行。提交job的同时,还需要提取元数据信息,关联具体的数据,这些数据信息将发送给NameNode。Job tracker拆分成各个task进行计算,并将结果返回或者写入HDFS。

Hive执行流程的要点:

1、操作符是hive的最小处理单位。

2、每个操作符处理代表HDFS操作或MR作业。

3、编译器把hive SQL转换成一组操作符。

4、hive通过ExecMapper和ExecReduceer来执行MapReduce任务。

5、执行MapReduce有两种模式:本地模式和分布式模式。

相关推荐

pyproject.toml到底是什么东西?(py trim)

最近,在Twitter上有一个Python项目的维护者,他的项目因为构建失败而出现了一些bug(这个特别的项目不提供wheel,只提供sdist)。最终,发现这个bug是由于这个项目使用了一个pypr...

BDP服务平台SDK for Python3发布(bdp数据平台)

下载地址https://github.com/imysm/opends-sdk-python3.git说明最近在开发和bdp平台有关的项目,用到了bdp的python的sdk,但是官方是基于p...

Python-for-Android (p4a):(python-for-android p4a windows)

一、Python-for-Android(p4a)简介Python-for-Android(p4a),一个强大的开发工具,能够将你的Python应用程序打包成可在Android设备上运行...

Qt for Python—Qt Designer 概览

前言本系列第三篇文章(QtforPython学习笔记—应用程序初探)、第四篇文章(QtforPython学习笔记—应用程序再探)中均是使用纯代码方式来开发PySide6GUI应用程序...

Python:判断质数(jmu-python-判断质数)

#Python:判断质数defisPrime(n):foriinrange(2,n):ifn%i==0:return0re...

为什么那么多人讨厌Python(为什么python这么难)

Python那么棒,为什么那么多人讨厌它呢?我整理了一下,主要有这些原因:用缩进替代大括号许多人抱怨Python完全依赖于缩进来创建代码块,代码多一点就很难看到函数在哪里结束,那么你就需要把一个函数拆...

一文了解 Python 中带有 else 的循环语句 for-else/while-else

在本文中,我们将向您介绍如何在python中使用带有else的for/while循环语句。可能许多人对循环和else一起使用感到困惑,因为在if-else选择结构中else正常...

python的numpy向量化语句为什么会比for快?

我们先来看看,python之类语言的for循环,和其它语言相比,额外付出了什么。我们知道,python是解释执行的。举例来说,执行x=1234+5678,对编译型语言,是从内存读入两个shor...

开眼界!Python遍历文件可以这样做

来源:【公众号】Python技术Python对于文件夹或者文件的遍历一般有两种操作方法,一种是至二级利用其封装好的walk方法操作:import osfor root,d...

告别简单format()!Python Formatter类让你的代码更专业

Python中Formatter类是string模块中的一个重要类,它实现了Python字符串格式化的底层机制,允许开发者创建自定义的格式化行为。通过深入理解Formatter类的工作原理和使用方法,...

python学习——038如何将for循环改写成列表推导式

在Python里,列表推导式是一种能够简洁生成列表的表达式,可用于替换普通的for循环。下面是列表推导式的基本语法和常见应用场景。基本语法result=[]foriteminite...

详谈for循环和while循环的区别(for循环语句与while循环语句有什么区别)

初九,潜龙勿用在刚开始使用python循环语句时,经常会遇到for循环和while循环的混用,不清楚该如何选择;今天就对这2个循环语句做深入的分析,让大家更好地了解这2个循环语句以方便后续学习的加深。...

Python编程基础:循环结构for和while

Python中的循环结构包括两个,一是遍历循环(for循环),一是条件循环(while循环)。遍历循环遍历循环(for循环)会挨个访问序列或可迭代对象的元素,并执行里面的代码块。foriinra...

学习编程第154天 python编程 for循环输出菱形图

今天学习的是刘金玉老师零基础Python教程第38期,主要内容是python编程for循环输出菱形※。(一)利用for循环输出菱形形状的*号图形1.思路:将菱形分解为上下两个部分三角形图案,分别利用...

python 10个堪称完美的for循环实践

在Python中,for循环的高效使用能显著提升代码性能和可读性。以下是10个堪称完美的for循环实践,涵盖数据处理、算法优化和Pythonic编程风格:1.遍历列表同时获取索引(enumerate...