Parquet格式
參考連結:
http://lvheyang.com/wp-content/uploads/2016/02/%E5%88%97%E5%BC%8F%E5%AD%98%E5%82%A8%E4%B8%8EParquet%E6%96%87%E4%BB%B6%E6%A0%BC%E5%BC%8F%E5%88%86%E4%BA%AB-2.pdf
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建立時會占用較多的記憶體。