天天看點

Parquet格式

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建立時會占用較多的記憶體。

繼續閱讀