hadoop - 为什么 orc 文件比 Hive 中的 parquet 文件占用更多空间?

标签 hadoop hive parquet orc

据我了解,ORC 文件应该比 parquet 文件更小且压缩率更高。但是,当我通过从 parquet 表中选择行来填充 Apache Hive 中的 orc 表时,orc 表最终消耗了大约 7 倍的磁盘空间。

知道为什么会这样吗?我的表架构如下。它包含一个长度为 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 输出压缩。但这只是猜测。

关于hadoop - 为什么 orc 文件比 Hive 中的 parquet 文件占用更多空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48519801/

相关文章:

Hadoop 2.6 多节点集群在运行示例 jar 时因连接异常而失败

hadoop - 如何将文件添加到 Hive

python - 如何使用python将pandas数据帧数据存储到azure blob?

hadoop - 保留对目录 HDFS 中所有文件的权限

json - 将数据集写入 Hive 时出现异常

hadoop - 语义异常错误在配置单元中返回 0 行

hive - Hive 表中匹配大小的随机样本

amazon-s3 - Presto 无法从 S3 导入 PARQUET 文件

java - 在 AWS Lambda 函数上创建 Parquet 文件

apache-spark - Spark JDBC从Hive读取和写入