大數據環境下互聯網行業數據倉庫/數據平臺的架構之漫談

jopen 9年前發布 | 111K 次閱讀 數據

一直想整理一下這塊內容,既然是漫談,就想起什么說什么吧。我一直是在互聯網行業,就以互聯網行業來說。

先大概列一下互聯網行業數據倉庫、數據平臺的用途:

  1. 整合公司所有業務數據,建立統一的數據中心;
  2. 提供各種報表,有給高層的,有給各個業務的;
  3. 為網站運營提供運營上的數據支持,就是通過數據,讓運營及時了解網站和產品的運營效果;
  4. 為各個業務提供線上或線下的數據支持,成為公司統一的數據交換與提供平臺;
  5. 分析用戶行為數據,通過數據挖掘來降低投入成本,提高投入效果;比如廣告定向精準投放、用戶個性化推薦等;
  6. 開發數據產品,直接或間接為公司盈利;
  7. 建設開放數據平臺,開放公司數據;
  8. 。。。。。。
  9. </ol>

    上面列出的內容看上去和傳統行業數據倉庫用途差不多,并且都要求數據倉庫/數據平臺有很好的穩定性、可靠性;但在互聯網行業,除了數據量大之外,越 來越多的業務要求時效性,甚至很多是要求實時的 ,另外,互聯網行業的業務變化非常快,不可能像傳統行業一樣,可以使用自頂向下的方法建立數據倉庫,一勞永逸,它要求新的業務很快能融入數據倉庫中來,老 的下線的業務,能很方便的從現有的數據倉庫中下線;

    其實,互聯網行業的數據倉庫就是所謂的敏捷數據倉庫,不但要求能快速的響應數據,也要求能快速的響應業務;

    建設敏捷數據倉庫,除了對架構技術上的要求之外,還有一個很重要的方面,就是數據建模,如果一上來就想著建立一套能兼容所有數據和業務的數據模型, 那就又回到傳統數據倉庫的建設上了,很難滿足對業務變化的快速響應。應對這種情況,一般是先將核心的持久化的業務進行深度建模(比如:基于網站日志建立的 網站統計分析模型和用戶瀏覽軌跡模型;基于公司核心用戶數據建立的用戶模型),其它的業務一般都采用維度+寬表的方式來建立數據模型。這塊是后話。

     

    整體架構

    下面的圖是我們目前使用的數據平臺架構圖,其實大多公司應該都差不多:

    大數據環境下互聯網行業數據倉庫/數據平臺的架構之漫談

    邏輯上,一般都有數據采集層、數據存儲與分析層、數據共享層、數據應用層。可能叫法有所不同,本質上的角色都大同小異。

    我們從下往上看:

           華麗的分割線:您可以關注 lxw的大數據田地 ,或者 加入郵件列表 ,隨時接收博客更新的通知郵件。


    數據采集

    數據采集層的任務就是把數據從各種數據源中采集和存儲到數據存儲上,期間有可能會做一些簡單的清洗。

    數據源的種類比較多:

    • 網站日志:
    • </ul>

      作為互聯網行業,網站日志占的份額最大,網站日志存儲在多臺網站日志服務器上,

      一般是在每臺網站日志服務器上部署flume agent,實時的收集網站日志并存儲到HDFS上;

      • 業務數據庫:
      • </ul>

        業務數據庫的種類也是多種多樣,有Mysql、Oracle、SqlServer等,這 時候,我們迫切的需要一種能從各種數據庫中將數據同步到HDFS上的工具,Sqoop是一種,但是Sqoop太過繁重,而且不管數據量大小,都需要啟動 MapReduce來執行,而且需要Hadoop集群的每臺機器都能訪問業務數據庫;應對此場景,淘寶開源的DataX,是一個很好的解決方案(可參考文 章 《異構數據源海量數據交換工具-Taobao DataX 下載和使用》),有資源的話,可以基于DataX之上做二次開發,就能非常好的解決,我們目前使用的DataHub也是。

        當然,Flume通過配置與開發,也可以實時的從數據庫中同步數據到HDFS。

        • 來自于Ftp/Http的數據源:
        • </ul>

          有可能一些合作伙伴提供的數據,需要通過Ftp/Http等定時獲取,DataX也可以滿足該需求;

          • 其他數據源:
          • </ul>

            比如一些手工錄入的數據,只需要提供一個接口或小程序,即可完成;

            數據存儲與分析

            毋庸置疑,HDFS是大數據環境下數據倉庫/數據平臺最完美的數據存儲解決方案。

            離線數據分析與計算,也就是對實時性要求不高的部分,在我看來,Hive還是首當其沖的選擇,豐富的數據類型、內置函數;壓縮比非常高的ORC文件 存儲格式;非常方便的SQL支持,使得Hive在基于結構化數據上的統計分析遠遠比MapReduce要高效的多,一句SQL可以完成的需求,開發MR可 能需要上百行代碼;

            當然,使用Hadoop框架自然而然也提供了MapReduce接口,如果真的很樂意開發Java,或者對SQL不熟,那么也可以使用MapReduce來做分析與計算;

            Spark是這兩年非常火的,經過實踐,它的性能的確比MapReduce要好很多,而且和Hive、Yarn結合的越來越好,因此,必須支持使用 Spark和SparkSQL來做分析和計算。因為已經有Hadoop Yarn,使用Spark其實是非常容易的,不用單獨部署Spark集群,關于Spark On Yarn的相關文章,可參考:《Spark On Yarn系列文章

            實時計算部分,后面單獨說。

             

            華麗的分割線:您可以關注 lxw的大數據田地 ,或者 加入郵件列表 ,隨時接收博客更新的通知郵件。


            數據共享

            這里的數據共享,其實指的是前面數據分析與計算后的結果存放的地方,其實就是關系型數據庫和NOSQL數據庫;

            前面使用Hive、MR、Spark、SparkSQL分析和計算的結果,還是在HDFS上,但大多業務和應用不可能直接從HDFS上獲取數據,那么就需要一個數據共享的地方,使得各業務和產品能方便的獲取數據;

             

            和數據采集層到HDFS剛好相反,這里需要一個從HDFS將數據同步至其他目標數據源的工具,同樣,DataX也可以滿足。

             

            另外,一些實時計算的結果數據可能由實時計算模塊直接寫入數據共享。

             

            數據應用

            • 業務產品
            • </ul>

              業務產品所使用的數據,已經存在于數據共享層,他們直接從數據共享層訪問即可;

              • 報表
              • </ul>

                同業務產品,報表所使用的數據,一般也是已經統計匯總好的,存放于數據共享層;

                • 即席查詢
                • </ul>

                  即席查詢的用戶有很多,有可能是數據開發人員、網站和產品運營人員、數據分析人員、甚至是部門老大,他們都有即席查詢數據的需求;

                  這種即席查詢通常是現有的報表和數據共享層的數據并不能滿足他們的需求,需要從數據存儲層直接查詢。

                  即席查詢一般是通過SQL完成,最大的難度在于響應速度上,使用Hive有點慢,目前我的解決方案是SparkSQL,它的響應速度較Hive快很多,而且能很好的與Hive兼容。

                  當然,你也可以使用Impala,如果不在乎平臺中再多一個框架的話。

                  • OLAP
                  • </ul>

                    目前,很多的OLAP工具不能很好的支持從HDFS上直接獲取數據,都是通過將需要的數據同步到關系型數據庫中做OLAP,但如果數據量巨大的話,關系型數據庫顯然不行;

                    這時候,需要做相應的開發,從HDFS或者HBase中獲取數據,完成OLAP的功能;

                    比如:根據用戶在界面上選擇的不定的維度和指標,通過開發接口,從HBase中獲取數據來展示。

                    • 其它數據接口
                    • </ul>

                      這種接口有通用的,有定制的。比如:一個從Redis中獲取用戶屬性的接口是通用的,所有的業務都可以調用這個接口來獲取用戶屬性。

                       

                      華麗的分割線:您可以關注 lxw的大數據田地 ,或者 加入郵件列表 ,隨時接收博客更新的通知郵件。


                      實時計算

                      現在業務對數據倉庫實時性的需求越來越多,比如:實時的了解網站的整體流量;實時的獲取一個廣告的曝光和點擊;在海量數據下,依靠傳統數據庫和傳統 實現方法基本完成不了,需要的是一種分布式的、高吞吐量的、延時低的、高可靠的實時計算框架;Storm在這塊是比較成熟了,但我選擇Spark Streaming,原因很簡單,不想多引入一個框架到平臺中,另外,Spark Streaming比Storm延時性高那么一點點,那對于我們的需要可以忽略。

                       

                      我們目前使用Spark Streaming實現了實時的網站流量統計、實時的廣告效果統計兩塊功能。

                      做法也很簡單,由Flume在前端日志服務器上收集網站日志和廣告日志,實時的發送給Spark Streaming,由Spark Streaming完成統計,將數據存儲至Redis,業務通過訪問Redis實時獲取。

                       

                      任務調度與監控

                      在數據倉庫/數據平臺中,有各種各樣非常多的程序和任務,比如:數據采集任務、數據同步任務、數據分析任務等;

                      這些任務除了定時調度,還存在非常復雜的任務依賴關系,比如:數據分析任務必須等相應的數據采集任務完成后才能開始;數據同步任務需要等數據分析任務完成后才能開始;

                       

                      這就需要一個非常完善的任務調度與監控系統,它作為數據倉庫/數據平臺的中樞,負責調度和監控所有任務的分配與運行。

                       

                      前面有寫過文章,《大數據平臺中的任務調度與監控》,這里不再累贅。

                      元數據管理

                      這塊想要做好,非常復雜,我覺得是且價值小于成本,因此我們暫不考慮這塊。目前只有每天任務運行的元數據。

                      總結

                      在我看來,架構,并不是技術越多越新越好,而是在可以滿足需求的情況下,越簡單越穩定越好。目前在我們的數據平臺中,開發更多的是關注業務,而不是 技術,他們把業務和需求搞清楚了,基本上只需要做簡單的SQL開發,然后配置到調度系統就可以了,如果任務異常,會收到告警。這樣,可以使更多的資源專注 于業務之上。

                      相關閱讀:

                      大數據平臺任務調度與監控系統

                      Spark On Yarn系列文章

                      異構數據源海量數據交換工具-Taobao DataX 下載和使用

                       

                      好了,就這些吧,后面想到了再漫談吧。碼字很累的,希望多多支持我的博客。

                      轉載請注明: lxw的大數據田地 ? 大數據環境下互聯網行業數據倉庫/數據平臺的架構之漫談

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!