代码之家  ›  专栏  ›  技术社区  ›  annunarcist

如何将拼花文件格式和SNAPPY压缩插入到配置单元表中?

  •  1
  • annunarcist  · 技术社区  · 7 年前

    蜂巢2.1

    我有以下表格定义:

    CREATE EXTERNAL TABLE table_snappy (
    a STRING,
    b INT) 
    PARTITIONED BY (c STRING)
    ROW FORMAT SERDE
      'org.apache.hadoop.hive.ql.io.parquet.serde.ParquetHiveSerDe'
    STORED AS INPUTFORMAT
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetInputFormat'
    OUTPUTFORMAT
      'org.apache.hadoop.hive.ql.io.parquet.MapredParquetOutputFormat'
    LOCATION '/'
    TBLPROPERTIES ('parquet.compress'='SNAPPY');
    

    现在,我想在其中插入数据:

    INSERT INTO table_snappy PARTITION (c='something') VALUES ('xyz', 1);
    

    然而,当我查看数据文件时,我看到的只是没有任何压缩的普通拼花地板文件。在这种情况下,如何启用snappy压缩?

    目标:以拼花格式和SNAPPY压缩配置单元表数据。

    我也尝试过设置多个属性:

    SET parquet.compression=SNAPPY;
    SET hive.exec.compress.output=true;
    SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    SET mapred.output.compression.type=BLOCK;
    SET mapreduce.output.fileoutputformat.compress=true;
    SET mapreduce.output.fileoutputformat.compress.codec=org.apache.hadoop.io.compress.SnappyCodec;
    SET PARQUET_COMPRESSION_CODEC=snappy;
    

    以及

    TBLPROPERTIES ('parquet.compression'='SNAPPY');
    

    但没有什么是有用的。我也尝试过GZIP压缩,但似乎效果不太好。我开始思考这是否可能。非常感谢您的帮助。

    2 回复  |  直到 7 年前
        1
  •  5
  •   Bala    7 年前

    检查它是否被压缩的最佳方法之一是使用 parquet-tools .

    create external table testparquet (id int, name string) 
      stored as parquet 
      location '/user/cloudera/testparquet/'
      tblproperties('parquet.compression'='SNAPPY');
    
    insert into testparquet values(1,'Parquet');
    

    现在,当您查看该文件时,它可能没有 .snappy 在任何地方

    [cloudera@quickstart ~]$ hdfs dfs -ls /user/cloudera/testparquet
    Found 1 items
    -rwxr-xr-x   1 anonymous supergroup        323 2018-03-02 01:07 /user/cloudera/testparquet/000000_0
    

    让我们进一步检查一下。。。

    [cloudera@quickstart ~]$ hdfs dfs -get /user/cloudera/testparquet/*
    [cloudera@quickstart ~]$ parquet-tools meta 000000_0 
    creator:     parquet-mr version 1.5.0-cdh5.12.0 (build ${buildNumber}) 
    
    file schema: hive_schema 
    -------------------------------------------------------------------------------------------------------------------------------------------------------------
    id:          OPTIONAL INT32 R:0 D:1
    name:        OPTIONAL BINARY O:UTF8 R:0 D:1
    
    row group 1: RC:1 TS:99 
    -------------------------------------------------------------------------------------------------------------------------------------------------------------
    id:           INT32 SNAPPY DO:0 FPO:4 SZ:45/43/0.96 VC:1 ENC:PLAIN,RLE,BIT_PACKED
    name:         BINARY SNAPPY DO:0 FPO:49 SZ:58/56/0.97 VC:1 ENC:PLAIN,RLE,BIT_PACKED
    [cloudera@quickstart ~]$ 
    

    它是 snappy 压缩的。

        2
  •  1
  •   Matthew    5 年前

    小心 TBLPROPERTIES .

    应该是这样的 TBLPROPERTIES("parquet.compression"="SNAPPY") 而不是 TBLPROPERTIES("parquet.compress"="SNAPPY");

    我已经用这两种情况进行了测试,第一种效果非常好。

    测试环境:Cloudera CDH 5.13