Big Data Data Driven

大數據檔案格式類型 Row-based 還是 Column-based?

一開始接觸大數據的人會很好奇,為什麼大數據的檔案格式跟以前聽到的不太一樣!其實是有許多原因,讓我們需要有特殊的檔案格式去處理大量的數據,讓我們仔細地瞭解吧!

一開始接觸大數據的人會很好奇,為什麼大數據的檔案格式跟以前聽到的不太一樣!其實是有許多原因,讓我們需要有特殊的檔案格式去處理大量的數據,讓我們仔細地瞭解吧!

當在使用大數據處理資料時,原始的數據通常是非常大量的。一般儲存的格式並不適合去儲存大量的數據量是 human readable 的格式例如:JSON, XML, CSV 並不是最理想的方式去儲存資料,而且事實上用人類閱讀的儲存格式是非常沒有效率,也並沒有支援檔案平行處理的能力。平行處理是在大數據中非常重要的技術,因為基本上單一電腦是沒辦法處理這麼大量的資料。

資料的效率、成本以及有能力做平行運算是非常重要的,也是優先需要去支持的功能特色。所以後來演變成有許多專為大數據而設計的資料格式像是 Optimized Row Columnar (ORC), Avro 以及 Parquet 等格式來儲存大數據數據。但這些為了大數據而設計的資料格式,每種資料格式都有他擅長的處理檔案類型。

讓我們來認識這些為了大數據而設計的檔案儲存格式吧!

這些格式有什麼共通點

擴充以及平行運算

由於他們是瞄準極大數據的倉儲,所以他們在優化以及壓縮上面有非常多的優化。當數據量非常大的時候,非常好的壓縮性能可以節省巨大的開銷。ORC, Parquet 以及 Avro 並不是人類看得懂的格式,是給機器看的 binary 格式,這些類型的格式會把檔案分散到許多硬碟內去儲存,使得有能力做到擴充以及平行運算。

已定義的數據

這些格式都會儲存一份他們的 schema 在檔案中,所以當你在不同的機器運行時,他們可以很快地得知 data schema 進行近一步的運算及處理。

範例:ORC 儲存的方式

以下可以看到他會切割成很多等份叫做 Stripes 區塊,然後在 file footer 存上一些輔助的資訊。

  1. 這個檔案包含的 stripe 列表
  2. 每個 stripe 有幾個列
  3. 每個欄位的 data types
  4. 每個 column 的 counts, min, max 跟 sum

在 postscript 存放一些壓縮的資訊。

Image result for orc file structure
Source: Hive ORC Wiki

這些格式有什麼差異性?

最大的差異就是他們怎麼處理資料儲存的方式。Parquet 跟 ORC 是用 column 的方式去儲存資料,Avro 則是採用 row-based 的方式去儲存。

Column-based (Parquet, ORC):

Image result for parquet logo
Image result for orc file logo
  • 優化大量分析的工作量
  • 主要優化讀取速度
  • 常用於 Hadoop, Hive, Impala, Apache Drill, Apache Arrow

使用情境:假設今天我們要分析一個銷售的資料,我們要找哪些消費者依照他在哪裡消費做分析,以傳統的 column-based 的方式我可以拿出消費者名稱以及地點做分析,用 column-based 可以很快的只拉出這兩個欄位做分析。而像是 row-based 的話他就會把每個列都掃描才拉出欄位。

Row-based (Avro):

Image result for avro file logo
  • 優化 Transactional 的工作量
  • 主要優化寫進的速度
  • 常用於 Apache Kafka, Druid

使用情境:假設今天我常常使用的搜尋是依照一段時間去做分析,例如在航空業,常常會想要了解某一區間的航班資料,例如早上 10 到晚上 5 點的所有航班資料。這時候 rolw-based 的情況會較為適合。

所以要使用什麼樣的儲存方式,與您想要做的案例是有很大的相關性的,不同的情境適合使用不同的方式儲存方式。一般來說,Parquet 以及 ORC 會有較好的壓縮比起 row-based 的 Avro 的格式,像是如果 IoT 的應用會一直不斷地儲存資料所以壓縮的量會有非常大的差異在儲存成本上,這時候可能 Parquet 以及 ORC 會較適合。

Image result for avro vs parquet vs orc
Source: Datanami

結論

大數據的領域是不是很酷!不同的應用場景,所適合的儲存方式以及邏輯是完全不一樣的,由於數據量到一定的程度後所有的費用以及速度就會變成非常大的差異。所以才會針對很多非常特別的情境下有完全不一樣的技術。

延伸閱讀

以下有個非常好的投影片,比對有關幾個常見格式的效能測試。

想要導入大數據?

Canner, Inc 讓企業導入數據導向決策更簡單。Canner, Inc 所開發的 CannerFlow 是一個 Cloud-Native 的數據管理平台,解決在 Cloud Providers 上面的缺點專業人才、流程複雜、操作不易, CannerFlow 內建的數據整合系統可以節省大部分製作 ETL 流程。幫助企業導入數據分析流程更省錢快速地得到 Data-driven insights!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: