Hive简介

举报
黄生 发表于 2023/09/12 08:32:53 2023/09/12
【摘要】 Hive工作流程适用场景Hive适用于非结构化数据的离线分析统计。Hive的执行延迟比较高,适用于对实时性要求不高的场合。Hive的优势在于处理大数据,因此适用于大数据(而非小数据)处理的场合。Hive常用的存储格式:TEXTFILE、SEQUENCEFILE、RCFILE和ORCFILE默认存储格式为TEXTFILE,按行存储,内容为普通的文本格式。TEXTFILE支持使用Gzip压缩,但...

Hive工作流程

image.png

适用场景
Hive适用于非结构化数据的离线分析统计。
Hive的执行延迟比较高,适用于对实时性要求不高的场合。
Hive的优势在于处理大数据,因此适用于大数据(而非小数据)处理的场合。

Hive常用的存储格式:TEXTFILE、SEQUENCEFILE、RCFILE和ORCFILE
默认存储格式为TEXTFILE,按行存储,内容为普通的文本格式。

TEXTFILE支持使用Gzip压缩,但压缩后不再支持MapReduce分割机制,这意味着压缩后的文件不论有多少个HDFS块都只能被一个Map任务处理,失去了使用集群并行处理的优势。

Hive无法直接导入SEQUENCEFILE格式的数据文件。数据须首先导入至TEXTFILE格式的表中,然后再从TEXTFILE格式的表中采用插入方式导入至SEQUENCEFILE格式的表。

RCFILE(Record-Columnar File)是Facebook开发的一种专门面向列的数据存储格式,不同于TEXTFILE和SEQUENCEFILE,RCFILE是基于行列混合存储思想的设计。
RCFILE遵循“先水平划分,再垂直划分”的设计理念,首先把Hive表水平切分成多个行组,保证同一行的数据位于同一节点,其次在行组内按照“列”垂直切分,实现列与列的数据在磁盘上呈现为连续的存储块。使用RCFILE的优势是既保证了每条记录所有列在同一个HDFS块,也可以做到当查询仅针对表中的少数几列时,可跳过不必要的列进行数据读取。

RCFILE 是可分割的文件格式,即在每个行组中,元数据头部(Meta data Header)和表格数据段会被分别压缩。

ORCFILE (Optimized Row-Columnar File)是对RCFILE的优化,支持压缩比很高的压缩算法,文件可切分,提供多种索引,支持复杂的数据结构。

Hive真实数据的数据单元:
数据库(Databases),在HDFS中表现为hive.metastore.warehouse.dir目录下的一个文件夹,其本质是用于避免表、视图、分区、列等命名冲突的命名空间。
表(Tables)表现为数据库目录下的子目录,分内部表和外部表。内部表由Hive管理。外部表指向己经存在HDFS中的数据,与内部表元数据组织是相同的,但其数据存放位置是任意的。
每个表都可以按指定的键分为多个分区(Partitions)。分区的作用是提高查询的效率,表现为表目录下的子目录。
根据表中某一列的哈希值可将数据划分为多个分桶(Buckets),表现为同一个目录下根据哈希散列之后的多个文件。
注意:
Hive表没有主键。
Hive表(0.14版木前)不支持行级操作,新版木中行级操作效率也比较低。
Hive表不支持批量update操作,但可以先删除、再添加。

Hive数据在HDFS的典型存储结构中表现为
/数据仓库地址/数据库名称/表名称/数据文件(或分桶数据文件)
/数据仓库地址/数据库名称/表名称/分区键(如year=2018)/数据文件(或分桶数据文件)
一般数据仓库地址hive.metastore.warehouse.dir为“/hive/warehouse”

存储模型
image.png

Hive的版本历史
2007年8月由Facebook开始开发,2008年8月开源。
2013年2月Hortonworks主导了探针计划(Stinger),旨在使Hive的性能提升100倍。
2015年2月Hive1.0.0发布。
2016年2月Hive2.0.0发布,适用于Hadoop2.x.y
2018年5月Hive3.0.0发布

Hive可以安装在与Hadoop集群连通的任意主机中
WordCount词频统计是MapReduce的经典案例,对文本文件中某单词出现的次数进行统计。WordCount的官方源码是很简单的MapReduce程序,也含有60多行java代码。而使用Hive来完成WordCount,只需要3条HQL语句。

Hive提供了两种命令行工具,CLI与Beeline,分别对应hive与beeline命令。CLI一般在Hive主机上使用,而Beeline支持远程连接。使用Beeline需要首先在Hive主机中启动HiveServer2服务。
10000为HiveServer2默认端口,可通过hive.server2.thrift.port修改。

Hive中的基本数据类型:
整数:TINYINT、SMALLINT、INT、BIGINT
小数:FLOAT、DOUBLE、DECIMAL
文木:STRING、CHAR、VARCHAR
布尔:BOOLEAN
二进制:BINARY
时间:DATE、TIMESTAMP、INTERVAL
上述数据类型都是对Java中的接口的实现,类型的具体行为细节和Java中对应的类型完全一致。比如STRING类型实现的是Java中的String,FLOAT类型实现的是Java中的float

在SQL的表设计中,字段通常不能被再分解,每一个字段不能再被分割成多个字段。即第一范式要求,一个关系模式中的所有属性都是不可分的基本数据项。

订单 商品
123 ["电脑","手机"]

上面就不满足第一范式的要求,我们将无法方便地使用SQL对订单123中的商品列表进行添加或删除操作。

HiveQL则没有上述局限性。
Hive的表字段可以是复杂数据类型,4种常用的复杂数据类型:数组(ARRAY)、映射(MAP)、结构体(STRUCT)和联合体(UNIONTYPE)。

HIVE的DDL语句有IF NOT EXISTS选项,如
CREATE (DATABASE|SCHEMA) [IF NOT EXISTS] database_name…

建表时的选项
EXTERNAL:表示该表为外部表,须同时指定实际数据的HDFS路径LOCATION。当表被删除时,实际数据不会被删除。
PARTITIONED BY:为表创建一个或多个分区。
CLUSTERED BY:分桶,让数据能够均匀地分布在表的各个数据文件中。
ROW FORMAT:指定序列化与反序列化器(Serializer/Deserializer,SerDe)。Hive使用SerDe读写表的每一行数据。如果ROW FORMAT未指定或者指定了"ROW FORMAT DELIMITED”,Hive将使用内置的SerDe来确定表中具体字段的数据。

HIVE的DML语句中,一般使用两种方式实现数据装载,load和insert。
load命令不对数据进行任何转换,只是简单地将数据复制或者移动至Hive表对应的位置。
insert命令将会执行MapReduce作业并将数据插入至Hive表中,一般使用较少。

analyze table xxtable compute statistics;
执行完ANALYZE语句后,可以使用 DESCRIBE EXTENDED xxtable 查看统计的信息

在MapReduce执行过程中,一个Job的MapTask数量是由输入分片(InputSplit)决定的,而输入分片的主要决定因素包括:文件的总个数、文件大小以及集群设置的文件块大小(默认为128MB)。
假设表目录下有一个文件example,大小为800MB,HDFS会将该文件分隔成7个块(6个128MB的块和1个32MB的块),且在执行查询任务时会产生7个MapTask
假设表目录下有3个文件:el、e2和e3,它们的大小分别为15MB、30MB和150MB,HDFS会将它们分隔成4个块(15MB、30MB、128MB、22MB),从而产生4个MapTask。

在大多数情况下,Hadoop Job使用分布式执行的方式来处理大数据集,但是当要处理的数据很小时,使用分布式执行的方式处理数据则会增大开销,因为完全分布式模式的启动时间较长,甚至比数据处理时间都长。
Hive可以设置属性转换为本地模式,即使用单台机器处理所有的任务。木地模式的临时设置方式如下
hive>
set hive.exec.mode.local.auto=true; --default false
set hive.exec.mode.local.auto.inputbytes.max=50000000;
set hive.exec.mode.local.auto.input.files.max=5; --default 4

在默认情况下,Hadoop会为每一个Map和Reduce任务分配一个新的JVM,并且会以并行的方式运行。但是,当任务是一个只须运行几秒的轻量级作业时,JVM的启动过程就可能会是一个很大的开销。MapReduce框架提供了一个选项,即通过重用JVM来以串行方式而非并行方式运行MapReduce Job

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。