天天看点

HIVE和SPARKSQL计算引擎在TEXT导入PARQUET格式的HIVE存储引擎分片数量机制

表的hive导入:

create table XXXXXXX201512 (N多字段构成)STORED AS PARQUETFILE;

insert into XXXXXXX201512 select * from XXXXXXX20151231;

以上的insert,3000万的数据,一般是6、7分钟的样子,,一个表到总表产生的分片数是40多个,之后查询一张表大概1秒左右

别用Spark-SQL进行以上的插入过程,原因如下:

测试用sparksql来导入:

create table XXXXXXX201512P (N多字段构成)STORED AS PARQUETFILE;

insert into XXXXXXX201512P select * from XXXXXXX20151231;

以上的insert,3000万的数据,超过了10分钟,一个表到总表产生的分片数是80多个,查询1.5秒左右

从文件数论证hive和sparksql对以上过程的分片机制:

得出结论:hive的上述过程是按照block的进行两两合并,然后压缩成为parquet文件的;sparksql是按照每个block压缩成为parquet文件的,同时,sparksql把空part也会算一个进行压缩!!!

原表的数据:

HIVE和SPARKSQL计算引擎在TEXT导入PARQUET格式的HIVE存储引擎分片数量机制
HIVE和SPARKSQL计算引擎在TEXT导入PARQUET格式的HIVE存储引擎分片数量机制

part0,65个block;part1,0个block;part2,11个block;part3,0个block;part4,4个block;

block数量一共是80个,而hive产生的总表中由这个表过去的数据的part数量是40个!!!sparkSQL产生的总表中由这个表过去的数据的part数量是82个!!!

由此可以看出,在进行上述操作的时候,hive至少比spark还是优化了一点的。

具体是不是我说的两两合并,有待看源码验证!!!

继续阅读