我正在使用maprr沙盒测试hive和maprfs中的不同设置。我在maprfs上有两个阶段。第一阶段由一个文件夹组成,该文件夹以avrocontainer格式存储一个表。avro头仅包含指向外部存储的.avsc文件(avro方案)的链接。这些avro文件是由flume创建的。在那里,我在hive中基于avro文件创建了一个外部表。
然后,我创建了一个Parquet地板和一个兽人table作为第二阶段,使用相同的方案,方法如下:
CREATE EXTERNAL TABLE prc_cpn_orc
LIKE stg_cpn
STORED AS ORC
LOCATION 'hdfs:////environments/icm/data/prc/public/cpn/orc'
TBLPROPERTIES ( "orc.compress"="snappy" );
CREATE EXTERNAL TABLE prc_cpn_prq
LIKE stg_cpn
STORED AS PARQUET
LOCATION 'hdfs:////environments/icm/data/prc/public/cpn/prq'
TBLPROPERTIES ( "parquet.compress"="snappy" );
创建表之后,我插入了avro表中的数据:
INSERT INTO TABLE prc_cpn_orc
SELECT * FROM stg_cpn;
INSERT INTO TABLE prc_cpn_prq
SELECT * FROM stg_cpn;
现在让人困惑的是,avro表比其他两个表小得多。毕竟我读过,avro应该有最坏的压缩。这三种文件格式都使用snappy压缩编解码器。
这是三种情况下的结果表方案的外观:
1 cpn_id int
2 cmpgn_id int
3 cstmr_id int
4 cpn_barcode int
5 cpn_text string
6 cpn_address string
7 cpn_phone string
8 cpn_timezone string
9 cpn_partner string
10 cpn_created_at string
每个表包含1600万行。
结果:
json输入文件夹大小:3.42gb(flume输入)
avro表:791.75mb(flume serde生成700个文件)
orc表:1.17gb(由hive serde生成6个文件)
Parquet桌:1.84gb(由hive serde生成6个文件)
理论上讲,兽人应该比avro少消耗约2倍的空间,那么在我的情况下,怎么可能正好相反呢?我错过什么了吗?
暂无答案!
目前还没有任何答案,快来回答吧!