进阶-优化
1. 存储格式和压缩算法
在Hive命令行中,用于指定不同的表存储格式的关键词如下
文本格式:TEXTFILE
序列化文件格式:SEQUENCEFILE
RC文件格式:RCFILE
ORC文件格式:ORC
AVRO文件格式:AVRO
Parquet文件格式:PARQUET
这些存储格式在Hive中主要有以下区别:
存储方式:不同的存储格式采用不同的存储方式,如文本格式以纯文本形式存储,序列化文件格式以二进制序列化形式存储,ORC文件格式以行列混合存储形式存储等。
存储效率:不同的存储格式对存储效率有不同的影响,如序列化文件格式和ORC文件格式采用列式存储,可以大幅减少IO操作的次数,提高存储效率;而文本格式则不支持列式存储,效率相对较低。
压缩支持:不同的存储格式对压缩有不同的支持,如ORC文件格式和RC文件格式支持多种压缩算法,可以在减少存储空间的同时提高IO效率;而文本格式则不支持压缩。
兼容性:不同的存储格式对兼容性有不同的要求,如Avro文件格式支持多种语言的序列化和反序列化,并支持架构演化,适用于多语言环境下的数据交换;而其他存储格式则可能不支持跨语言的数据交换。
处理方式:不同的存储格式在查询和处理时可能有不同的方式,如列式存储的数据在执行聚合查询时效率更高,因为只需要扫描需要的列;而行式存储的数据则在执行全表扫描时效率更高,因为只需要扫描一行的数据。
例如对于电商用户行为分析,建议使用列式存储的存储格式,如ORC文件格式或Parquet文件格式。这是因为电商用户行为数据通常包含大量的字段,而列式存储可以只读取所需的列,减少IO操作的次数,提高查询效率;此外,列式存储通常支持更好的压缩比率,可以减少存储空间的占用。与行式存储相比,列式存储在数据分析和处理方面具有更好的性能和扩展性,因此在大数据场景下,列式存储格式是更加有效率的选择。同时,ORC文件格式和Parquet文件格式都支持多种压缩算法,可以在减少存储空间的同时提高IO效率,这对于电商用户行为数据的存储和分析非常有帮助。
ORC文件格式和Parquet文件格式都支持多种压缩算法,并且Hive默认会对这些文件格式进行自动压缩和解压。Hive提供了一些配置参数,可以指定默认的压缩算法和压缩级别,以及是否对所有文件进行压缩。
在命令行使用SET hive.exec.compress.output=true
设置默认语法输出压缩为true,仅在当前会话有效。创建表时可以使用STORED AS ORC TBLPROPERTIES("orc.compress"="SNAPPY")
的语法指定ORC文件格式使用SNAPPY压缩算法;
除了SNAPPY压缩算法,ORC文件格式和Parquet文件格式还支持多种其他的压缩算法,包括但不限于:
GZIP、ZLIB
较高
较慢
BZIP2
较高
很慢
LZO
较低
快
LZ4
较低
很快
SNAPPY
较低
很快
除了hive.exec.compress.output
和TBLPROPERTIES
语法外,Hive还提供了一些其他的配置参数,具体如下
mapreduce.map.output.compress
这个参数指定Map任务输出时是否进行压缩,默认值为false。如果将其设置为true,Map任务输出的中间结果会被压缩,从而减少磁盘IO和网络传输的开销。用户可以通过设置mapreduce.map.output.compress.codec
来指定压缩算法,默认值为org.apache.hadoop.io.compress.SnappyCodec。
mapreduce.output.fileoutputformat.compress
这个参数指定Reduce任务输出时是否进行压缩,默认值为false。如果将其设置为true,Reduce任务输出的结果会被压缩,从而减少磁盘IO和网络传输的开销。用户可以通过设置mapreduce.output.fileoutputformat.compress.codec
来指定压缩算法,默认值为org.apache.hadoop.io.compress.SnappyCodec。
mapreduce.output.fileoutputformat.compress.type
这个参数指定输出文件的数据的压缩格式,默认值为RECORD,表示压缩单个记录。如果将其设置为BLOCK,则表示压缩块,可以提高压缩率,但会影响查询性能。如果数据量较小,可以使用RECORD格式的压缩,以获得较好的压缩率和较高的解压缩速度。如果数据量较大,可以考虑使用BLOCK格式的压缩,以获得更高的压缩率。
mapreduce.output.fileoutputformat.compress.level
这个参数指定压缩级别,默认值为1,表示快速压缩。可以设置为0~9之间的整数,表示不同的压缩级别,级别越高,压缩率越高,但压缩速度越慢。
mapreduce.output.fileoutputformat.compress.codec
这个参数指定压缩算法,默认值为org.apache.hadoop.io.compress.SnappyCodec。用户可以通过设置该参数来指定其他的压缩算法,如org.apache.hadoop.io.compress.GzipCodec、org.apache.hadoop.io.compress.BZip2Codec等。
Last updated