编程教育资源分享平台

网站首页 > 后端开发 正文

细品入门Hive hive.one

luoriw 2024-04-04 12:50:26 后端开发 11 ℃ 0 评论

#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有两种模式:本地模式和分布式模式。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表
最新留言