大数据,机器学习,人工智能云时代架构互联网技术栈

Hive介绍与核心知识点

2018-10-10  本文已影响1人  高广超

Hive

Hive简介

Facebook为了解决海量日志数据的分析而开发了Hive,后来开源给了Apache软件基金会。

官网定义:

The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL.

Hive是一种用类SQL语句来协助读写、管理那些存储在分布式存储系统上大数据集的数据仓库软件。

Hive的几个特点

Hive架构

image.png

Hive的底层存储

Hive的数据是存储在HDFS上的。Hive中的库和表可以看作是对HDFS上数据做的一个映射。所以Hive必须是运行在一个Hadoop集群上的。

Hive语句的执行过程

Hive中的执行器,是将最终要执行的MapReduce程序放到YARN上以一系列Job的方式去执行。

Hive的元数据存储

Hive的元数据是一般是存储在MySQL这种关系型数据库上的,Hive和MySQL之间通过MetaStore服务交互。

Hive重要概念

外部表和内部表

内部表(managed table)
外部表(external table)

分区表和桶表

分区(partioned)

[图片上传失败...(image-15cd1e-1539162972641)]

分桶(clustered)

具体说明分桶

Hive文件格式

hive文件存储格式包括以下几类:

  1. TEXTFILE
  2. SEQUENCEFILE
  3. RCFILE
  4. ORCFILE(0.11以后出现)

其中TEXTFILE为默认格式,建表时不指定默认为这个格式,导入数据时会直接把数据文件拷贝到hdfs上不进行处理;SEQUENCEFILE,RCFILE,ORCFILE格式的表不能直接从本地文件导入数据,数据要先导入到textfile格式的表中, 然后再从表中用insert导入SequenceFile,RCFile,ORCFile表中。

列式存储和行式存储

首先我们看一下一张表的存储格式

image.png

行式存储

image.png

列式存储

image.png

列式存储和行式存储的比较

行式存储

优点:

缺点:

列式存储

优点:

缺点:

TEXTFILE

默认格式,数据不做压缩,磁盘开销大,数据解析开销大。

可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

SEQUENCEFILE

SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。

SequenceFile支持三种压缩选择:NONE,RECORD,BLOCK。Record压缩率低,一般建议使用BLOCK压缩。

RCFILE

RCFILE是一种行列存储相结合的存储方式。首先,其将数据按行分块,保证同一个record在一个块上,避免读一个记录需要读取多个block。其次,块数据列式存储,有利于数据压缩和快速的列存取。

从以上几点也可以看出它是兼顾了行式和列式存储的部分优点。

ORC File

ORCFile存储格式,就是Optimized RC File的缩写。意指优化的RCFile存储格式。

ORC File 和 RC File比较

Hive ROW FORMAT

Serde是 Serializer/Deserializer的简写。hive使用Serde进行行对象的序列与反序列化。

你可以创建表时使用用户自定义的Serde或者native Serde,如果 ROW FORMAT没有指定或者指定了 ROW FORMAT DELIMITED就会使用native Serde。

hive已经实现了许多自定义的Serde,之前我们在介绍stored时也涉及到:

Hive写入数据的方式

和我们熟悉的关系型数据库不一样,Hive现在还不支持在insert语句里面直接给出一组记录的文字形式,也就是说,Hive并不支持INSERT INTO …. VALUES形式的语句。

从本地文件系统中导入数据到Hive表

load data local inpath 'xxx.txt' into table xxx;

从HDFS上导入数据到Hive表

load data inpath '/home/xxx/add.txt' into table xxx

alter table db.access_log add partition (dt='18-09-18') location 'hdfs://ns/hive/warehouse/access_log/dt=18-09-18';

从别的表中查询出相应的数据并导入到Hive表中

insert overwrite table db.log_v2 partition(dt='18-09-26') select uid,model,key,value,time from db.log where dt='18-09-26';

在创建表的时候通过从别的表中查询出相应的记录并插入到所创建的表中

create table test4 as select id, name, tel from xxx;


欢迎关注 高广超的简书博客 与 收藏文章 !
欢迎关注 头条号:互联网技术栈

个人介绍:

高广超:多年一线互联网研发与架构设计经验,擅长设计与落地高可用、高性能、可扩展的互联网架构。目前从事大数据相关研发与架构工作。

本文首发在 高广超的简书博客 转载请注明!

上一篇 下一篇

猜你喜欢

热点阅读