Hive之配置使用snappy压缩

前言

  • OS:CentOS 7

  • hadoop:2.7.7

  • hive:2.3.0

  • Hive中配置snappy压缩,可以分别在Mapper输出阶段和Reducer输出阶段使用压缩算法。也可以将压缩后数据文件加载到表中用于查询,Hive会通过后缀名自动识别对应的压缩格式,并在查询时进行解压,但需要保持数据文件和表格式相同,否则只会显示结果全为NULL


查看本机目前可供Hadoop使用的压缩算法

使用以下命令,可以查看是否有相应压缩算法的库,如果显示为false,则需要额外安装

hadoop checknative -a

PS: Hadoop 2.X版本已经集成了snappy、lz4、bzip2等压缩算法的编/解码器,会自动调用对应的本地库,而CentOS 7中自带snappy依赖库,故无需安装安装snappy依赖)


开启Map阶段输出压缩

Hive中开启Map阶段输出压缩,可以减少在Hive中MR Job的Mapper和Reducer之间的网络I/O。开启此功能需要同时配置Hive和Hadoop相关参数,可以在Hive中配置,保证仅在当前会话生效,也可以直接在Hive和Hadoop的对应配置文件中修改默认参数持续生效。配置过程如下:

1)开启Hive中MR中间文件压缩:

hive> set hive.exec.compress.intermediate=true;

2)开启Hadoop的MapReduce任务中Map输出压缩功能:

hive> set mapreduce.map.output.compress=true;

3)设置Hadoop的MapReduce任务中Map阶段压缩算法(对应的编/解码器):

hive> set mapreduce.map.output.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

4)至此就完成了Map阶段的压缩配置


开启Reduce阶段输出压缩

当Hive将查询内容写入到表中(local/hdfs)时,输出内容同样可以进行压缩。同样需要同时配置Hive和Hadoop参数。既可以在Hive中配置,保证仅在当前会话生效,也可以直接在Hive和Hadoop的对应配置文件中修改默认参数持续生效。配置过程如下:

1)开启Hive最终查询结果输出文件压缩功能:

hive> set hive.exec.compress.output=true;

2)开启Hadoop中的MR任务的最终输出文件压缩:

hive> set mapreduce.output.fileoutputformat.compress=true;

3)设置Hadoop中MR任务的最终输出文件压缩算法(对应的编/解码器):

hive> set mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;

4)设置Hadoop中MR任务序列化文件的压缩类型,默认为RECORD即按照记录RECORD级别压缩(建议设置成BLOCK):

hive> set mapreduce.output.fileoutputformat.compress.type=BLOCK;

5)执行查询语句,观察执行结果文件(后缀名为.snappy):

hive> insert overwrite local directory '/tmp/hive/data/export/' ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' select * from emp;

6)加载本地的缩数据文件到临时表中:

hive> create table tmp like emp;
hive> load data local inpath '/tmp/hive/data/export/000000_0.snappy' overwrite into table tmp;

7)查询临时表结果

hive> select * from tmp;

8)至此就完成了Reduce阶段的压缩配置


End~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章