【问题标题】:How can I insert into a hive table with parquet fileformat and SNAPPY compression?如何插入具有镶木地板文件格式和 SNAPPY 压缩的配置单元表?
【发布时间】:2018-08-10 09:18:45
【问题描述】:

蜂巢 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);

但是,当我查看数据文件时,我看到的只是没有任何压缩的纯拼花文件。在这种情况下如何启用快速压缩?

目标:将 hive 表数据以 parquet 格式和 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 压缩进行了同样的尝试,但似乎效果不佳。我开始思考这是否可能。任何帮助表示赞赏。

【问题讨论】:

  • 你是如何验证它没有被压缩的?

标签: hadoop hive compression parquet snappy


【解决方案1】:

小心TBLPROPERTIES

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

我对这两种情况都进行了测试,第一种情况非常好。

测试环境:Cloudera CDH 5.13

【讨论】:

    【解决方案2】:

    检查它是否被压缩的最好方法之一是使用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 压缩的。

    【讨论】:

    • 是的,这似乎是问题所在。即使在 SNAPPY 压缩有效的情况下,我也能够从 Mac 以纯文本格式读取镶木地板文件,这让我着迷。但是当在 Ubuntu 上检查时,我无法阅读它。但是,您的解决方案以正确的方式确认了 SNAPPY,谢谢!
    • 对于未来的参考,这些属性正在发挥作用“SET parquet.compression=SNAPPY; SET hive.exec.compress.output=true;”但由于某种原因不是 TBLPROPERTIES。
    猜你喜欢
    • 2021-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多