天天看點

大資料實戰【千億級數倉】項目總結

        前段時間做過一個大資料離線數倉的項目,前後花了有好幾周的時間。一共是6個階段,想關注階段細節的朋友可以檢視大資料實戰項目這個專欄。

        現在項目結束了,理應對此進行一個總結,好好回顧一下這個項目中遺漏的​細節…​

大資料實戰【千億級數倉】項目總結

文章目錄

  • ​​項目架構​​
  • ​​技術選型​​
  • ​​資料來源​​
  • ​​資料存儲​​
  • ​​資料同步​​
  • ​​計算模型​​
  • ​​結果存儲​​
  • ​​加速查詢​​
  • ​​結語​​

項目架構

大資料實戰【千億級數倉】項目總結

① 原始資料在mysql中存儲

② 使用kettle将資料從mysql同步到資料倉庫(hive)

    同步分為全量同步+增量同步

    ​增量同步​需要使用到​拉連結清單​(目标:​既能夠儲存曆史資料,又不會有資料備援​)

③ 資料儲存到hive

    ​hive數倉内結構:​

    ODS : 存儲着資料源同步過來的資料

    DW : 對ODS層資料機型​預處理(資料過濾,資料填充)​,以及資料的​拉寬​,将業務中需要的字段,但是字段不在一個表裡。使用拉寬(​join​)将這些字段拉到一個表中。

    ADS:存儲最終結果

④ 使用kylin對hive内的資料進行預計算,提高查詢效率

⑤ 部分資料同步至mysql,使用sqoop/kettle同步

技術選型

★ 資料來源: MySQL

★ 資料存儲: Hive

★ 資料同步: Kettle

★ 計算模型(數倉): ODS,DW,ADS三層

★ 結果存儲: Hive的ads和Mysql

★ 加速查詢的元件: Kylin

以為就這樣技術選型就講完了?不不不,既然在開頭咱都談到了需要​深挖細節​,那麼接下來我們就要從結論反推,思考某個方面的技術為什麼需要用到這個技術/元件,而不是其他類似的技術/元件。

資料來源

        我們的資料來源為什麼選擇的是關系型資料庫MySQL,而不是其他的非關系型資料庫?

        最主要的原因是因為 MySQL

        ■ 體積小,速度快,總體擁有成本低,開源;

        ■ 支援多種作業系統;

        ■ 是開源資料庫,提供的接口支援多種語言連接配接操作;

        而以MongoDB為例的非關系型資料庫

        □ 使用鍵值對存儲資料;

        □ 無需經過sql層的解析,讀寫性能很高;

        □ 不提供SQL支援,學習使用成本較高;

        □ 無事務處理,附加功能bi和報表等支援也不好;

        綜上所述,在該項目中,關系資料庫MySQL更适合。

資料存儲

        Hive是基于Hadoop的一個資料倉庫工具,可以将結構化的資料檔案映射為一張資料庫表,并提供類SQL查詢功能(HQL)。其本質是将SQL轉換為MapReduce的任務進行運算,底層由HDFS來提供資料的存儲,hive可以了解為一個将SQL轉換為MapReduce的任務的工具。

        使用Hive的好處:

        √ 操作接口采用類SQL文法,提供快速開發的能力。

        √ 避免了去寫MapReduce,減少開發人員的學習成本。

        √ 功能擴充很友善。

通過Hive與傳統RDBMS的對比

Hive RDBMS
查詢語言 HQL SQL
資料存儲 HDFS Raw Device or Local FS
執行 MapReduce Excutor
執行延遲
處理資料規模
索引 0.8版本後加入位圖索引 有複雜的索引

        總結:

        hive具有sql資料庫的外表,但應用場景完全不同

        ​hive隻适合用來做批量資料統計分析​

資料同步

        談到關于資料同步的問題,相信很多好學的朋友有疑問了????

        為啥這個項目不用Sqoop來進行資料的同步?

        相信看完下面Kettle與Sqoop差異對比的表格就清楚了。

功能 Kettle Sqoop
領域 資料抽取、轉換、加載 關系型與非關系型資料庫資料遷移
輸入 關系型資料庫、HDFS、Hbase、Excel、HL7、JSON、RSS、文本檔案、等等 關系型資料庫、非關系型資料庫
輸出 關系型資料庫、Hbase、HDFS、Excel、CSV、等等 關系型資料庫、非關系型資料庫
Hadoop內建度 外部工具,需要安裝對應版本的插件,僅支援流行的Hadoop發行版 屬于Hadoop生态圈,啟動即用
适用資料量 十萬、百萬、千萬級 億級
支援系統 Linux、Windows、Unix Linux
互動 有圖形界面 沒有圖形界面
底層 多線程提高效率 MapReduce

        在這個項目階段一開始的時候,就介紹了,咋們這個項目的每日訂單量為​10W​,按照上圖表格所述,确實不太适合 ​支援系統單一​,​互動無圖形化界面​,​底層計算效率低​的 ​Sqoop​。

        當然也并不是說Sqoop沒用,當資料量真的達到億級别之後,Kettle就無法發揮它的優勢,這個時候我們就隻能借助于Sqoop了。

計算模型

        每個企業根據自己的業務需求可以分成不同的層次,但是最基礎的分層思想,理論上資料分為三個層,​資料營運層​、​資料倉庫層​和​資料服務層​。基于這個基礎分層之上添加新的層次,來滿足不同的業務需求。

        數倉分層通過​資料分層​管控資料品質,需要對資料清洗等操作,​不必改一次業務就需要重新接入資料​,每一層資料都是單獨的作用,同時​規範資料分層,減少業務開發、直接抽取資料​。

        其中

        ​資料營運層ODS​存儲着資料源同步過來的資料

        ​資料倉庫層DW​需要對ODS層資料進行預處理(資料過濾,資料填充)

        ​資料服務層​存儲最終結果

結果存儲

        通過上面的分析,在Hive中ADS層負責存儲着結果資料,可以根據使用者需求,利用簡易sql而查詢出最終結果。而資料源來自MySQL,我們自然也可以選擇将結果存儲至MySQL當中。資料同步元件根據實際情況選擇Kettle或者Sqoop。

加速查詢

        Kylin 是一個 Hadoop 生态圈下的 MOLAP 系統,是 ebay 大資料部門從2014 年開始研發的支援 TB 到 PB 級别資料量的分布式 Olap 分析引擎。其特點包括:

        ✔ 可擴充的超快的 OLAP 引擎

        ✔ 提供 ANSI-SQL 接口

        ✔ 互動式查詢能力

        ✔ MOLAP Cube 的概念

        ✔ 與 BI 工具可無縫整合

        Kylin 的核心思想是​利用空間換時間​,在資料 ETL 導入 OLAP 引擎時提前計算各次元的聚合結果并持久化儲存。

        在離線數倉項目中,我們使用Kylin對Hive的ADS層的資料進行預處理,并将結果寫入到HBase,提高了實際應用場景對于Hive資料表的查詢效率。

結語

        關于大資料離線數倉項目的總結,暫時就先更到這裡…後期部落客可能會對此進行更詳細的補充,敬請期待????

        ​如果以上過程中出現了任何的纰漏錯誤,煩請大佬們指正????​

        ​受益的朋友或對大資料技術感興趣的夥伴記得點贊關注支援一波????​

繼續閱讀