【问题标题】:Hive parquet snappy compression not working蜂巢镶木地板快速压缩不起作用
【发布时间】:2018-01-23 07:10:22
【问题描述】:

我正在使用表格属性创建一个表格骨架 TBLPROPERTIES('PARQUET.COMPRESSION'='SNAPPY')
(因为文件是镶木地板格式)并在创建表格之前设置了一些参数:

set hive.exec.dynamic.partition.mode=nonstrict;
set parquet.enable.dictionary=false;
set hive.plan.serialization.format=javaXML;
SET hive.exec.compress.output=true;
SET mapred.output.compression.type=BLOCK;
set avro.output.codec=snappy;
SET mapred.output.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
add jar /opt/cloudera/parcels/CDH-5.5.1-1.cdh5.5.1.p1168.923/lib/sentry/lib/hive-metastore.jar;

表格仍然没有被压缩。能否请您告诉我表格未压缩的原因。

提前感谢您的意见。

【问题讨论】:

    标签: hadoop hive hiveql parquet snappy


    【解决方案1】:

    解决方案是在 DDL 中使用 “TBLPROPERTIES ('parquet.compression'='SNAPPY')”(并且大小写很重要)而不是 “TBLPROPERTIES ('PARQUET.COMPRESSION'='SNAPPY')”.

    您还可以使用 hive 中的以下属性来实现压缩。

    set parquet.compression=SNAPPY
    

    【讨论】:

    • 另外,如果你使用CDH,可以通过以下方式验证压缩=> /opt/cloudera/parcels/CDH/lib/parquet/bin/parquet-tools meta you_table_data_file.
    【解决方案2】:

    您的 Parquet 表可能已压缩,但您并没有直接看到。在 Parquet 文件中,压缩被烘焙到格式中。不是压缩整个文件,而是使用指定的算法压缩各个段。因此,压缩 Parquet 从外部看起来与压缩 Parquet 相同(通常它们不包含任何像普通压缩文件那样的后缀(例如 .gz),因为您无法使用常用工具解压缩它们)。

    将压缩融入格式是 Parquet 格式的众多优点之一。这使得文件(hadoop-)可以独立于压缩算法进行拆分,并且可以快速访问文件的特定段,而无需解压缩整个文件。在查询引擎在 Parquet 文件之上处理查询的情况下,这意味着它通常只需要读取小的但未压缩的标头,查看哪些段与查询相关,然后只需要解压缩这些相关部分。

    【讨论】:

    • 我之所以说这些表没有被压缩是因为我知道压缩后的表大小。正在创建的表与该大小相差无几。我遗漏或错误输入的任何参数?
    【解决方案3】:
    Set the below parameters and after that perform below steps-
    
    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;
    
    CREATE TABLE Test_Parquet ( 
        customerID int, name string, ..etc 
    ) STORED AS PARQUET Location ''
    
    INSERT INTO Test_Parquet SELECT * FROM Test;
    
    If not how do i identify a parquet table with snappy compression and parquet table without snappy compression?.
    
    describe formatted tableName
    
    Note  -  but you will always see the compression as NO because the compression data format is not stored in 
    metadata of the table , the best way is to do dfs  -ls -r  to the table location and see the file format for compression.
    
    Note- Currently the default compression is - Snappy with Impala tables. 
    
    
    If your issue didn't resolved after these steps also please post the all steps which are you performing..?
    

    【讨论】:

    • 我在创建表之前已经在使用这些命令,但仍然没有运气。还有什么问题?
    • 您是否检查了 dfs -ls -r 到表位置并查看压缩文件格式。
    • 如果文件被快速压缩,该命令的预期输出是什么?
    • 当我使用描述格式化的 table_name 时,我创建了表并且我还执行了所有步骤。它显示表参数: COLUMN_STATS_ACCURATE true PARQUET.COMPRESSION SNAPPY numFiles 1 numRows 0 rawDataSize 0 totalSize 143 transient_lastDdlTime 1516713741
    • 我在我的 desc 格式表中也看到了同样的东西。但 parquet-tools.jar 元输出显示文件未压缩。
    【解决方案4】:

    我看到这个错误发生了好几次,这是需要做的事情(这仅适用于 hive。不适用于 SPARK):

    旧物业:

    TBLPROPERTIES('PARQUET.COMPRESSION'='SNAPPY')

    正确的属性:

    TBLPROPERTIES('PARQUET.COMPRESS'='SNAPPY')

    【讨论】:

    • 这对我有用 TBLPROPERTIES('PARQUET.COMPRESSION'='SNAPPY')。但我需要再添加一个 set 命令,即 set parquet.compression=snappy;
    • 我尝试了这个建议,但它仍然不起作用,你能在这里检查我做错了什么吗 - stackoverflow.com/questions/49064376/…
    • @annunarcist 您是否使用“hadoop jar parquet-tools-1.6.0.jar meta ”来检查压缩是否有效?
    • 是的!出于某种原因,只有在 set parquet.compression=snappy; 之后,我才将其压缩。
    【解决方案5】:

    我最近使用 Snappy 压缩创建了一些存储为 Parquet 文件的表,并使用了以下命令:

    set hive.exec.compress.output=true;
    set mapreduce.output.fileoutputformat.compress=true;
    set hive.intermediate.compression.codec=org.apache.hadoop.io.compress.SnappyCodec;
    set hive.intermediate.compression.type=BLOCK;
    

    【讨论】:

    • 我也试过上面提到的设置命令,但它仍然没有被压缩。
    • 你如何检查你的表是否被压缩?
    • 我正在检查使用带有 meta 的 parquet-tools.jar 并显示未压缩。
    猜你喜欢
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    相关资源
    最近更新 更多