hive文件格式及结构体系整理

hive文件格式选择:

    hive是hadoop上的数据仓库组件,便于查询和管理分布式存储上的数据。hive提供了一种称为HiveQL的语言,允许用户进行类似于sql的查询。hive里的数据集最终存储在HDFS的文件中,常用的数据格式有以下4种:

                              TEXTFILE

                              SEQUENCEFILE

                              RCFILE

                              ORCFILE

 在讨论各种类型的文件格式之前,我们先来探讨下何为文件格式。所谓文件格式是信息被存储或编码成计算机文件的一种方式。不同的文件格式主要区别在于他们的数据编码,压缩率,使用的空间和磁盘IO.

当用户向传统的数据库中增加数据的时候,系统会检查写入的数据与表结构是否匹配,如果不匹配则拒绝插入数据,这就是所谓的写实模式。hive与此不同,它使用的是读时模式,就是直到读取时,才进行数据校验。在向hive装载数据时,它并不验证数据与表结构是否匹配,但这时它会检查文件格式是否和表定义相匹配。

1.TEXTFILE

   TEXTFILE是普通的文本型文件,是hadoop里最常用的文件格式,也是hive默认的文件格式。如果表定义为textFile,则可以向该表中装载以逗号,TAB或空格作为分隔符的数据,也可以导入json格式的数据。

文本文件中除了支持普通的字符串,数字,日期等简单的数据类型外,还可以包含复杂的集合数据类型。如:STRUCT,MAP和ARRAY三种集合数据类型。语法示例如下:

STRUCT:columname struct(fist String,last String)

MAP:columname map(string,string)

ARRAY:columname array(string)

创建包含相关类型的表如下:

create table  data_json(
        docId  string,
        user   struct<id:int,
        userName:String,
        adressMessage:struct<adress_1:String,adress_2:string>,
        orders:array<struct<itemId:int,orderMessage:string>>>

)  
row format serde 'org.apache.hive.hcatlog.data.JsonSerDe'
stored as textfile

2.SEQUENCEFILE

    在hadoop中处理大文件的性能要比处理小文件的性能好很多,如果文件小于hadoop定义的块尺寸,我们可以认为是小文件。元数据的增长将转化为namenode的开销。如果有大量的小文件,NameNode会成为性能瓶颈。为了解决这个问题,Hadoop引入了sequence文件,将sequence作为存储小文件的容器。Sequence文件是由二进制键值对组成的平面文件。hive将查询转化为mapreduce作业时,决定一个给定记录的哪些键值对被使用。Sequence是可分割的二进制格式,主要用于联合多个小文件。

SEQUENCEFILE格式的输入输出是包是:

      org.apache.hadoop.mapred.SequenceFileInputFormat

      org.apache.hadoop.hive.ql.io.HiveSequenceFileOutputFormat

示例:

create table    t_sequence(c1 String,c2 int) row format delimited fields terminated by  '\t' stored as sequencefile;
--向表中导入数据方式与TEXTFILE有些不同,因为sequencefile是二进制文件格式,所以需要从其他表向SEQUENCEFILE表插入数据。

insert  overwrite table t_sequencefile select * from  t_textfile;

3.RCFILE

   RCFILE指的是Record Column file,是一种高压缩率的二进制文件格式,被用于在一个时间点操作多行的场景。RCFILE也是由二进制键值对组成的平面文件,这点与SEQUENCEFILE非常相似。RCFILE以记录的形式存储表中的列,即列存储方式。它先分割行做水平分区,然后分割列做垂直分区。RCFILE把一行的元数据作为键,把行数据作为值。这种面向列的存储在执行数据分析时更高效。

RCFILE格式的输入输出包是:

org.apache.hadoop.hive.ql.io.RCFileInputFormat

org.apache.hadoop.hive.ql.io.RCFileOutputFormat

示例

create table t_rcfile(c1 String,c2 int) row format delimited fields terminated by '\t' stored as  rcfile;
--不能向rcfile表直接导入数据,需要从其他表向Rcfile表插入数据。
insert overwrite table t_rcfile select * from  t_textfile;

4.ORCFILE

ORC指的是Optimized Record Column,就是说相对于其他文件格式,它的存储方式更加优化。ORC将原始数据的大小缩减至75%,从而提升了数据的处理速度。ORC比其他三种文件格式有更好的性能,而且ORC是目前hive中唯一支持事务的文件格式。

ORCFILE格式的输入输出包是:

org.apache.hadoop.hive.ql.io.orc

示例:

create table t_orcfile(c1 string,c2 int) row format delimited fields terminated by '\t' stored as  orcfile;
--在向表中导入数据时,不能直接向ORCfile表中导入数据,需要从其他表向ORCFILE表插入数据。
 
insert overwrite table t_orcfile select * from   t_textfile;

hive体系结构

hive建立在hadoop的hdfs和MapReduce之上。在hadoop1中hive查询被转换成MapReduce代码,并且使用第一版的MapReduce框架执行,如JobTracker和TaskTracker。在hadoop2中,yarn将资源管理和调度从MapReduce框架中解藕。hive查询仍然被转化为MapReduce代码并执行,但使用的是yarn框架和第二版的MapReduce。

hive工作流程

具体步骤说明如下:

猜你喜欢

转载自blog.csdn.net/sujins5288/article/details/86477372