`

Hive 文件压缩存储格式(STORED AS)

 
阅读更多
Hive文件存储格式包括以下几类:

1.TEXTFILE 
2.SEQUENCEFILE 
3.RCFILE 
4.自定义格式 


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

TEXTFILE
默认格式,数据不做压缩,磁盘开销大,数据解析开销大。可结合Gzip、Bzip2使用(系统自动检查,执行查询时自动解压),但使用这种方式,hive不会对数据进行切分,从而无法对数据进行并行操作。

> create table test1(str STRING)  
> STORED AS TEXTFILE;
OK  
Time taken: 0.786 seconds  
#写脚本生成一个随机字符串文件,导入文件:  
> LOAD DATA LOCAL INPATH '/home/work/data/test.txt' INTO TABLE test1;  
Copying data from file:/home/work/data/test.txt  
Copying file: file:/home/work/data/test.txt  
Loading data to table default.test1  
OK  
Time taken: 0.243 seconds  


SEQUENCEFILE
SequenceFile是Hadoop API提供的一种二进制文件支持,其具有使用方便、可分割、可压缩的特点。SequenceFile支持三种压缩选择:NONE, RECORD, BLOCK。 Record压缩率低,一般建议使用BLOCK压缩。

> create table test2(str STRING)  
> STORED AS SEQUENCEFILE;  
OK  
Time taken: 5.526 seconds  
hive> SET hive.exec.compress.output=true;  
hive> SET io.seqfile.compression.type=BLOCK;  
hive> INSERT OVERWRITE TABLE test2 SELECT * FROM test1;  


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

> create table test3(str STRING)  
> STORED AS RCFILE;  
OK  
Time taken: 0.184 seconds  
>  INSERT OVERWRITE TABLE test3 SELECT * FROM test1;  


实践证明RCFile目前没有性能优势, 只有存储上能省10%的空间。作者自己都承认:Facebook用它也就是为了存储。 RCFile目前没有使用特殊的压缩手段, 例如算术编码, 后缀树等, 没有像InfoBright那样能skip大量io。

自定义格式
当用户的数据文件格式不能被当前 Hive 所识别的时候,可以自定义文件格式。用户可以通过实现inputformat和outputformat来自定义输入输出格式,参考代码:.\hive-0.8.1\src\contrib\src\java\org\apache\hadoop\hive\contrib\fileformat\base64

> create table test4(str STRING)  
> stored as  
> inputformat 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextInputFormat'  
> outputformat 'org.apache.hadoop.hive.contrib.fileformat.base64.Base64TextOutputFormat';  
$ cat test1.txt 
aGVsbG8saGl2ZQ==
aGVsbG8sd29ybGQ=
aGVsbG8saGFkb29w


test1文件为base64编码后的内容,decode后数据为:
hello,hive
hello,world
hello,hadoop
load数据并查询:

hive> LOAD DATA LOCAL INPATH '/home/work/test1.txt' INTO TABLE test4;   
Copying data from file:/home/work/test1.txt  
Copying file: file:/home/work/test1.txt  
Loading data to table default.test4  
OK  
Time taken: 4.742 seconds  
hive> select * from test4;  
OK  
hello,hive  
hello,world  
hello,hadoop  
Time taken: 1.953 seconds


总结
相比TEXTFILE和SEQUENCEFILE,RCFILE由于列式存储方式,数据加载时性能消耗较大,但是具有较好的压缩比和查询响应。数据仓库的特点是一次写入、多次读取,因此,整体来看,RCFILE相比其余两种格式具有较明显的优势。


分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    hive从入门到放弃(六)——常用文件存储格式.doc

    Hive 文件存储格式详解 Hive 文件存储格式是 Hive 中非常重要的概念,它直接影响着数据的存储和查询效率。在 Hive 中,常用的文件存储格式有 TextFile、ORC 和 Parquet 三种。下面我们将详细介绍这三种存储格式的...

    Hive 对 Protobuf 序列化文件读取.zip

    STORED AS INPUTFORMAT 'org.apache.hadoop.hive.ql.io.protobuf.ProtobufInputFormat' OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.protobuf.ProtobufOutputFormat'; ``` 其中,`protobuf.schema`属性指定了....

    hive进阶强化必备

    2. **SequenceFile**:由Hadoop API提供的一种二进制文件格式,具有使用方便、可分割和可压缩的特点。支持三种压缩选项:`NONE`、`RECORD`和`BLOCK`。通常推荐使用`BLOCK`压缩模式。 - 建表语句示例:`stored as ...

    hive外部表创建

    Hive支持的文件格式有TextFile、SequenceFile。对于纯文本数据,可使用`STORED AS TEXTFILE`。若需压缩数据,则使用`STORED AS SEQUENCEFILE`。通常情况下,除非需要保存序列化的对象,否则建议使用`STORED AS TEXT...

    Hive编程指南 PDF 中文高清版

    - **存储格式灵活性**:Hive支持多种存储格式,如TextFile、SequenceFile、RCFile等,同时也支持压缩格式,如Gzip、BZip2、Snappy等。 - **兼容性**:Hive兼容大部分现有的SQL标准,如ANSI SQL-92等,并且可以在...

    Hive教程.pdf

    - **Hive压缩方法**: - **压缩的原因**: 减少存储空间和网络传输时间。 - **Hadoop常用压缩方法**: Gzip、BZip2、Snappy等。 - **配置Hadoop压缩解压**: 通过Hadoop配置文件设置。 - **Hive中的压缩**: 设置表...

    Hive用户指南 Hive user guide 中文版

    Hive支持多种数据存储格式,包括文本文件、序列化文件等。这些数据存储在HDFS中,并且可以通过Hive表来访问。 **1.6 其他Hive操作** 除了基本的数据存储和查询之外,Hive还支持一系列其他操作,如数据导入导出、...

    Hive用户手册)_中文版.pdf

    stored as textfile location '/path/to/data'; Hive用户手册中文版提供了一个系统的Hive使用指南,涵盖了Hive的架构、数据存储、基本操作、查询语言等方面的内容,为用户提供了一个快速掌握Hive的使用和应用的指南...

    Hive用户指南(Hive_user_guide)_中文版

    Hive的数据存储在HDFS上,支持多种文件格式(如TextFile、SequenceFile、ORC等)。数据通常按照表和分区进行组织,可以灵活地指定存储路径和文件格式。 **1.6 其它Hive操作** 除了基本的数据存储和查询功能外,...

    Hive语法详解

    - **STORED AS**:指定存储格式,如TextFile、SequenceFile等。 - **LOCATION**:指定HDFS上的物理存储路径。通常用于外部表。 示例:创建一个简单的表 ```sql CREATE TABLE pokes (foo INT, bar STRING); ``` ...

    hive安装

    STORED AS TEXTFILE; ``` 数据导入通常通过Hadoop的`hadoop fs`命令或`load data`语句实现。 **5. 查询与优化** Hive支持基本的SQL操作,如SELECT、JOIN、GROUP BY等。对于大数据查询,可考虑以下优化策略: - 分...

    Hive编程指南

    2. **压缩格式**:使用更高效的压缩格式(如Snappy、LZO等)可以降低存储空间并加速查询速度。 3. **并行执行**:通过开启并行执行,可以提高Hive查询的执行效率。 通过上述知识点的介绍,我们可以了解到Hive作为...

    基于Facebook的Hive开发

    此外,还指定了分区字段`ds`以及存储位置`/hive/src`,并选择以文本文件的方式存储数据。 ##### 查询表 ```sql SELECT key, count(DISTINCT value) FROM src GROUP BY key; ``` 这是一个简单的分组查询示例,它计算...

    hive Hcatalog streaming API使用

    此外,为了支持数据压缩和优化查询性能,表的数据存储格式应设置为ORC(Optimized Row Columnar)。同时,还需要开启Hive的合并功能,即设置`hive.compactor.initiator.on`为`true`,并确保有足够的线程处理合并操作...

Global site tag (gtag.js) - Google Analytics