表的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也会算一个进行压缩!!!
原表的数据:
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还是优化了一点的。
具体是不是我说的两两合并,有待看源码验证!!!