孟母三遷 — Data Warehouse 搬遷實錄(一)

Bryan Yang
A multi hyphen life
2 min readApr 15, 2018

一段血與淚的旅程

背景

在我剛加入公司的時候,當時公司有個 Local 的 Hadoop 集群,大部分原始 log 資料和處理後的大表都放在 Hive 裡,有些比較小的 table 放在 mysql 裡.

空間不足

只要持續地產生資料,第一個面臨的當然就是空間不足的問題,另外隨著表格越來越肥, Query 也越來越慢.這時候比較直覺的解決方式就是 — 買機器.但是公司哪那麼佛心直接給你加機器,只好走其他解法.

資料壓縮

由於原始資料滿多是 TSV 或 ORC 格式的資料,把資料壓縮可以先緩解部分空間不足的問題.但是資料壓縮後造成讀取以及計算時間變慢也不是我們所樂見的,於是開始研究不同的資料格式.

Parquet

因為當時開始導入 Spark ,於是也要找 Spark 和 Hive 都能接受的資料格式,而當時在 Spark 社群最推薦的就是 Parquet 了.

Apache Parquet:https://parquet.apache.org/

https://www.slideshare.net/cloudera/hadoop-summit-36479635

Parquet 是 Columnar 的儲存方式,有幾個特色:

  1. 資料以 column 來存放,同一 Column 的相同資料會被重新編碼(例如性別裡面只有男/女/其他),會大量節省硬碟空間.
  2. 如果有搜尋條件,會先根據 Column 做搜尋,再去找對應的 Row,大幅提升搜索速度.

當時實驗結果,一般來說表格大概只剩下原本的十分之一,而由於檔案變小,以及 Parquet 的特性,計算效能也大幅提升 5~10 倍以上.所以把一些常用的大表慢慢轉成 Parquet 格式.

轉檔

為了不要影響原本的 ETL 流程,當時用了比較迂迴的方式轉檔:

  1. 先建立新的 parquet table
  2. 用 Hive insert into 新的 parquet table ,select as 舊的 table.
  3. 將舊的 table 砍掉,把新的 table 重新命名.

(待續…)

--

--

Bryan Yang
A multi hyphen life

Data Engineer, Data Producer Manager, Data Solution Architect