其他文件格式及压缩方法

来源:互联网 发布:linux 脚本 while 编辑:程序博客网 时间:2024/04/29 11:15
Hive的一个独特的功能:Hive不会强制要求将数据转换成特定的格式才能使用。Hive使用Hadoop的InputFormat API来从不同的数据源读取数据,同样的使用OutputFormat API也可以将数据写成不同的格式。

压缩的好处:节约磁盘空间;可以增加吞吐量和性能;提高网络传输性能。

确定安装的编解码器
hive -e “set io.compression.codec”;//可以看到编解码器之间使用逗号进行分割的。

选择一种编/解码器
每一种压缩方案都在压缩/解压缩速度和压缩率间进行权衡。
BZip2压缩率最高,但是需要消耗最多的CPU开销;
GZip是压缩率和压缩/解压缩速度上的下一个选择;
LZO和Snappy压缩率相比前两个要小但是压缩/解压缩速度要快,特别是解压缩过程。

开启中间压缩 
对于中间数据进行压缩可以减少job中map和reduce task间的数据传输量。对于中间数据的压缩,选择一个低CPU开销的要比选择一个压缩率高的编/解码器重要的多,通过设置hive.exec.compress.intermediate属性值为true来开启中间压缩。

hadoop默认的编/解码器为DefaultCodec。可以通过修改mapred.map.output.compression.codec的值来修改编/解码器。可以再HADOOP_HOME/conf/mapred-site.xml文件中或hive-site.xml文件中进行修改。SnappyCodec是一个比较好的中间文件压缩编/解码器。

输出结果压缩
hive.exec.compress.output和mapred.output.compression.codec两个属性
对于输出文件而言,使用GzipCodec进行压缩是不错的选择。

sequence file存储格式
sequence file提供了3中压缩方式:NONE、RECORD、BLOCK,默认的是RECORD级别,不过通常来说,BLOCK级别压缩性能最好而且是可以分割的。可以在mapred-site.xml或hive-site.xml中设置mapred.ouput.compression.type值为BLOCK。

Hive压缩实践
开启中间数据压缩功能
set hive.exec.compress.intermediate = true ;
修改中间压缩的默认编/解码器
set mapred.map.output.compression.codec=org.apache.hadoop.io.compress.GZipCodec;
set hive.exec.compress.intermediate = true ;
可以使用dfs -cat 查看结果文件内容
开启输出结果压缩:
set hive.exec.compress.output = true ;
--该属性最终的压缩格式会以.deflate格式结尾的压缩文件
修改输出结果压缩使用的编解码器:
set hive.exec.compress.output = true ;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
--该属性设置最终的输出结果文件是以.gz格式的压缩文件
方便mapper和reducer以后对文件做处理,设置也是类型为BLOCK,并将查询结果以sequence file格式存储:
set mapred.output.compression.type=BLOCK;
set hive.exec.compress.output=true;
set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;
0 0