前言

在Apache Hadoop3.x社区二进制发行版中已经包含hadoop-snappy,同时Centos7已经自带snappy本地库。因此Hadoop3.x+Centos7无需配置snappy本地库。可运行hadoop checknative -a检查snappy本地库是否可用。

看了网上繁琐的Hadoop Snappy配置过程,配置了半天,才发现是白费功夫。原来是Hive的一个Bug。

Hive3.1.2中orc文件snappy压缩的Bug

Bug描述

  • 创建一个Hive表,存储为orc文件,同时启用snappy压缩。

    1
    2
    3
    4
    5
    6
    7
    8
    CREATE TABLE `default`.`user_orc` (
    `tid` INT,
    `userid` STRING
    )
    STORED AS orc
    TBLPROPERTIES (
    "orc.compress"="SNAPPY"
    );
  • Insert overwrite进一些数据

    1
    insert overwrite table user_orc select * from user_1;
  • 会在HDFS生成/user/hadoop/warehouse/user_orc/000000_0文件,文件没有带有.orc后缀

  • 使用hive --orcfiledump /user/hadoop/warehouse/user_orc/000000_0查看该orc文件信息,发现Compression: ZLIB,即默认的ZLIB压缩算法,snappy压缩算法没有生效。

解决

  • 1、设置set hive.exec.orc.default.compress=snappy;参数,可暂时解决。
  • 2、升级到hive-3.1.3,貌似已经修复该问题。