如何使用 parquet 文件格式和 SNAPPY 压缩插入配置单元 table?
How can I insert into a hive table with parquet fileformat and SNAPPY compression?
蜂巢 2.1
我有以下 table 定义:
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 压缩?
目标:以 parquet 格式和 SNAPPY 压缩配置单元 table 数据。
我也试过设置多个属性:
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 压缩进行了同样的尝试,但似乎效果不佳。我开始考虑是否可能。任何帮助表示赞赏。
检查文件是否压缩的最佳方法之一是使用 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
压缩的。
小心TBLPROPERTIES
。
应该是 TBLPROPERTIES("parquet.compression"="SNAPPY")
而不是 TBLPROPERTIES("parquet.compress"="SNAPPY");
我已经对这两种情况进行了测试,第一种情况非常好。
测试环境:Cloudera CDH 5.13
蜂巢 2.1
我有以下 table 定义:
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 压缩?
目标:以 parquet 格式和 SNAPPY 压缩配置单元 table 数据。
我也试过设置多个属性:
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 压缩进行了同样的尝试,但似乎效果不佳。我开始考虑是否可能。任何帮助表示赞赏。
检查文件是否压缩的最佳方法之一是使用 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
压缩的。
小心TBLPROPERTIES
。
应该是 TBLPROPERTIES("parquet.compression"="SNAPPY")
而不是 TBLPROPERTIES("parquet.compress"="SNAPPY");
我已经对这两种情况进行了测试,第一种情况非常好。
测试环境:Cloudera CDH 5.13