Parquet格式
参考链接:
https://www.jianshu.com/p/b823c727fe46
https://blog.csdn.net/bhq2010/article/details/43318549
https://www.cnblogs.com/ulysses-you/p/7985240.html
1 Schema
Parquet 采用了一种嵌套的文件格式,简单理解为它的数据结构是树状层层嵌套的,类似于Json那种可以嵌套的格式。逻辑上,他的数据不是扁平的,有些字段可有可无。
2 数据转换
对于内存中的其他数据结构,存储时会通过特定的转换器转换为Parquet的存储对象。
3 group 分割
表被横向分割成多个行组,再存储为列式格式。
不同的字段是分开存储的,一个字段有一个column chunk,它包含了多个page,page是最小的压缩单元,也是最小的IO单元。
4 数据缓存
写入缓存时以groupsize为准。
groupsize是Mapreduce能够处理的最小单元。
读数据是最小可读单个page。
5 设置参数
Impala中可以设置文件的大小;
set parquet.file.sieze=1G(这是默认值);
parquet参数:
#压缩格式
#parquet.compression=snappy;
#parquet.block.size=33554432(byte,内存中group的buffersize,不能大于hdfs的dfs.block.size)
#parquet.writer.max-paddin=2m
等同于row group 大小,paddin size是blocksize的最小值,cdh默认8M。
#parquet.page.size(默认为1m,设置大是,减少了读取的IO,但会影响压缩效率)
#parquet.enable.dictionary=true
#parquet.dictionary.page.size=1048576
默认为true, 是否启用dictionary编码;默认大小与page.size相同,为1M。dictionary创建时会占用较多的内存。