为什么 orc 文件比 Hive 中的 parquet 文件消耗更多 space?
Why do orc files consume more space than parquet files in Hive?
据我了解,ORC 文件应该比 parquet 文件更小且压缩率更高。但是,当我通过从镶木地板 table 中选择行来填充 Apache Hive 中的 orc table 时,orc table 最终消耗了大约 7 倍的磁盘 space.
知道为什么会这样吗?我的 table 架构如下。它包含一个长度为 200000 的整数数组 0、1 和 2,每个分区大约有 10000 行。
CREATE TABLE orc_table (
field1 STRING
, field2 INT
, field3 STRING
, field4 STRING
, array_field ARRAY < INT >
) PARTITIONED BY (
partition_name STRING
);
ALTER TABLE orc_table ADD PARTITION (partition_name='<partition-name>');
ALTER TABLE orc_table PARTITION (partition_name='<partition_name>') SET FILEFORMAT ORC;
INSERT INTO TABLE orc_table PARTITION (partition_name='<partition_name>')
SELECT field1, field2, field3, field4, array_field FROM parquet_table
WHERE partition_name='<partition_name>';
更改这些设置解决了问题:
SET hive.exec.compress.intermediate=true;
SET hive.exec.compress.output=true;
SET mapred.output.compression.type=BLOCK;
显然,Hive 使用 map-reduce 在数据格式之间进行转换。因此,还需要打开 map-reduce 输出压缩。但这只是猜测。
据我了解,ORC 文件应该比 parquet 文件更小且压缩率更高。但是,当我通过从镶木地板 table 中选择行来填充 Apache Hive 中的 orc table 时,orc table 最终消耗了大约 7 倍的磁盘 space.
知道为什么会这样吗?我的 table 架构如下。它包含一个长度为 200000 的整数数组 0、1 和 2,每个分区大约有 10000 行。
CREATE TABLE orc_table (
field1 STRING
, field2 INT
, field3 STRING
, field4 STRING
, array_field ARRAY < INT >
) PARTITIONED BY (
partition_name STRING
);
ALTER TABLE orc_table ADD PARTITION (partition_name='<partition-name>');
ALTER TABLE orc_table PARTITION (partition_name='<partition_name>') SET FILEFORMAT ORC;
INSERT INTO TABLE orc_table PARTITION (partition_name='<partition_name>')
SELECT field1, field2, field3, field4, array_field FROM parquet_table
WHERE partition_name='<partition_name>';
更改这些设置解决了问题:
SET hive.exec.compress.intermediate=true;
SET hive.exec.compress.output=true;
SET mapred.output.compression.type=BLOCK;
显然,Hive 使用 map-reduce 在数据格式之间进行转换。因此,还需要打开 map-reduce 输出压缩。但这只是猜测。