set hive.exec.compress.output=true;set mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec;set mapred.output.compression.type=BLOCK;
任务中间压缩set hive.exec.compress.intermediate=true;set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;(常用)set hive.intermediate.compression.type=BLOCK;
在hadoop作业执行过程中,job执行速度更多的是局限于I/O,而不是受制于CPU。如果是这样,通过文件压缩可以提高hadoop性能。然而,如果作业的执行速度受限于CPU的性能,呢么压缩文件可能就不合适,因为文件的压缩和解压会花费掉较多的时间。当然确定适合集群最优配置的最好方式是通过实验测试,然后衡量结果。
GZip 和 BZip2压缩格式是所有最近的hadoop版本支持的,而且linux本地的库也支持这种格式的压缩和解压缩。
Snappy是最近添加的压缩格式,可以自己添加这种压缩格式LZO是经常用到的压缩格式
GZip 和 BZip2压缩可以保证最小的压缩文件,但是过于消耗时间;Snappy和LZO压缩和解压缩很快,但是压缩的文件较大。所以如何选择压缩格式,需要根据具体的需求决定。(I/O,CPU)
3、中间压缩BZip2 and LZO支持压缩文件分割
4、最终的压缩输出
中间压缩就是处理作业map任务和reduce任务之间的数据,对于中间压缩,最好选择一个节省CPU耗时的压缩方式<property><name>hive.exec.compress.intermediate</name><value>true</value><description> This controls whether intermediate files produced by Hive betweenmultiple map-reduce jobs are compressed. The compression codec and other optionsare determined from hadoop config variables mapred.output.compress* </description></property>
hadoop压缩有一个默认的压缩格式,当然可以通过修改mapred.map.output.compression.codec属性,使用新的压缩格式,这个变量可以在mapred-site.xml 中设置或者在 hive-site.xml文件。 SnappyCodec 是一个较好的压缩格式,CPU消耗较低。<property><name>mapred.map.output.compression.codec</name><value>org.apache.hadoop.io.compress.SnappyCodec</value><description> This controls whether intermediate files produced by Hivebetween multiple map-reduce jobs are compressed. The compression codecand other options are determined from hadoop config variablesmapred.output.compress* </description></property>
作业最终的输出也可以压缩,hive.exec.compress.output这个属性控制这个操作。当然,如果仅仅只需要在某一次作业中使用最终压缩,呢么,可以直接在脚本中设置这个属性,而不必修改配置文件<property><name>hive.exec.compress.output</name><value>false</value><description> This controls whether the final outputs of a query(to a local/hdfs file or a Hive table) is compressed. The compressioncodec and other options are determined from hadoop config variablesmapred.output.compress* </description></property>
如果hive.exec.compress.output这个属性被设置成true,呢么可以选择GZip压缩方式,这种方式具有很好的压缩效果,减少I/O,当然GZip压缩格式文件是不允许被分割的。<property><name>mapred.output.compression.codec</name><value>org.apache.hadoop.io.compress.GzipCodec</value><description>If the job outputs are compressed, how should they be compressed?</description></property>
序列化文件支持hadoop把文件按块分割,同时支持压缩文件分割。在hive中可以通过以下设置使用序列化文件:CREATE TABLE a_sequence_file_table STORED AS SEQUENCEFILE;
序列化文件有三种不同的压缩方式: NONE, RECORD, and BLOCK.RECORD是默认的;BLOCK压缩方式比较有效,同时可以支持文件分割,和其他的属性一样,这个属性不是hive独有的,可以通过hadoop的mapred-site.xml文件和hive的hive.site.xml文件设置,也可以通过脚本、终端查询设置
<property><name>mapred.output.compression.type</name><value>BLOCK</value><description>If the job outputs are to compressed as SequenceFiles,how should they be compressed? Should be one of NONE, RECORD or BLOCK.</description></property>
原文地址:http://blog.csdn.net/jyl1798/article/details/38589099