摘要:太多的計算如果我們開始增加一個單線程來加載數據管道,那么這種操作最終肯定是會失敗的。優點所有上述的優點調度和可擴展性缺點由于功能的強大,所有學習門檻有點高總結最后,我們可以畫出我們一整個數據工程架構圖。
作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
簡書地址:http://www.jianshu.com/p/7a72...
在我們深入討論這個 “數據工程” 業務細節之前,我們需要先知道標準(PyData)機器學習數據管道的局限性,如下圖所示:
典型的 PyData 機器學習數據管道設計,通過 Python 腳本完成鏈接(通常是單線程)
低門檻
快速部署
模型的缺點可擴展性差
對于機器學習可擴展性差問題的解釋,可以查看這篇文章,有非常詳細的解釋。在這里,我們將采用一個更加簡單的方式來說明這3個問題,為什么這個數據管道的加載是如此的重。
1) 太多的計算如果我們開始增加一個單線程來加載 PyData 數據管道,那么這種操作最終肯定是會失敗的。我們不能將這種操作擴展到單個節點之外,也就是說,如果你的數據太巨大以至于不能在內存中操作,那么你需要對其進行批量處理,否則你將無法進行處理。如果你沒有足夠的CPU資源去訓練一個模型,那么你只能去購買一個更好的處理器來解決這個問題,但是如果你已經擁有了一個很好的處理器,那么接下來又會發生什么呢?更糟糕的是,因為模型的數據輸入請求是由一定的速率要求的,如果模型不能按照一定的速率得到預測結果,那么這將成為整一個系統的性能瓶頸。Python 中的多線程是有限的,如果一個線程失敗了,那么系統是沒有辦法優雅的去切換到默認值,所以我們只能失敗。
上述所有的問題都可以通過拆分 - 應用 - 組合的策略來解決,該策略允許將一個任務分割成多個子任務然后并行子啊不同的線程或者節點上面去計算,最后將計算結果進行合并,加快數據管道的處理效率。MapReduce 的思想就是來解決這個問題的,我們可以用任何的語言來實現這一個算法,但是你會度過幾小時的痛苦時間,因為從零開始編寫 MapReduce 是一件非常瘋狂的事。一個可行的方式是我們利用 Hadoop 的 MapReduce 或者 Spark 的。Hadoop 的操作可能會慢一點,因為它每次操作之后都會發生磁盤讀寫操作(所以現在幾乎沒有人使用它),但是 Spark 所有的計算都是發生在內存中,加快了機器學習算法的迭代速度,甚至比一般的流水式數據管道還要快(但是你需要一個很大的內存空間)。
由于 Spark 不但提供了數據批處理和流處理,它還提供了 Spark ML 這一個強大的包。這個包允許你進行分布式機器學習操作,用 Spark jobs 可以完全替代 Python 腳本中的 PyData 數據管道和模塊之間的連接器,而且可以很方便的在分布式集群上面運行,線程失敗了可以正常重啟。
2) 太多的數據讓我們試想一下,我們已經用 Spark jobs 和 Spark ML 模塊替代了典型模型 PyData ML Pipeline 中的中間腳本,如下圖所示:
Improved pipeline
在這個數據管道中還存在一個弱點:DB。當處理的數據量超過 5TB 的時候,關系數據庫的處理能力表現不佳。關系數據庫的分片和復制是一個本身就存在的大問題,如果你想要去支持如此大的數據量,那么這必將是一個昂貴的冒險行為。所以當我們的數據量在達到 5TB 的天花板之前,可能需要放棄關系型數據庫。
那么,對于大數據來說,還有那些其他的數據存儲方案可以選擇呢?首先,需要一個分布式數據存儲系統,它能夠對抗如下問題:
硬件故障導致的數據丟失問題
需要一個高的吞吐量
可以擴展到很多的數據平臺
Hadoop 分布式文件系統(HDFS)滿足于以上所有特性,這是 Apache Hadoop 項目中的一部分。而且這個可以在本地硬件集群上面設置 HDFS,如果你有幾個 DevOps 專家,那么你就可以部署到任何你喜歡的地方了。為了存儲一些冷數據,我們可以考慮 AWS S3 作為存儲器。但是如果你考慮到速度性能,建議不要把 S3 作為整個模型的一部分。最好將這些熱數據存放在計算資源的附近,比如計算資源是在云服務器上面,那么最好將數據存放在本地的 HDFS 集群或者云 HDFS 集群中。
但是這個只是分布式數據的基礎設施,那么存儲數據的方式呢?
正如我們已經想到的那樣,利用關系型數據庫是一個糟糕的選擇。那么,采用純文本的方式呢?令人驚喜的是,.csv 或 .tsv 文件通常是可以被存儲在 HDFS 系統上的,作為快速和不加判斷的方式來存儲從外部服務中提交的數據(比如,腳本批量接受的數據)。
優點快速存儲
缺點最大容量是有限的
需要去讀取整個文件
查詢不是很容易
那么 NoSQL 數據庫呢?請注意,并不是所有的 NoSQL 數據庫都是分布式的。
優點查詢方便
高吞吐量
缺點維護成本高
Cassandra 是分布式 NoSQL 數據庫的一個典型選擇,但是他仍然需要一個專門的 DevOps 來設置,維護,監視,擴展等等。因此,分布式 NoSQL 是存儲數據的默認選項,因為我們需要一個可以方便查詢的數據庫。
對于那些想要減少 DevOps 人員工作量的人來說,有一個簡單的解決方案就是使用 Parquet。
優點與 Spark 能很好的結合
Columnar,這可以讓分析人員加快查詢速度
不是分布式數據庫,只是一些文件,較少維護工作
讀取速度很快
存儲效率很高
缺點架構混亂
迭代困難
我們把上面講的架構設計都反應在一張圖中,如下圖:
3) 雜亂的數據管道隨著 spark jobs 數量的增加,數據管道變得雜亂無章,所以有很多的事情需要去處理:
作業調度
時間依賴型的作業
邏輯相關的作業(任務鏈)
監控和報警
故障轉移恢復(重試失敗的作業,而不是整個數據管道)
作業可視化(儀表盤)
其他工作流的管理方式
有一些解決方案可以去管理重新編排這些數據管道,我們來重點來介紹其中的 2 個。
LuigiPython 開發的一個簡單的工作流管理解決方案,由 Spotify 開源。
優點低門檻
依賴管理(鏈式結構)
具有狀態和錯誤跟蹤的 WEB UI 集中式作業管理器
故障恢復
缺點沒有調度
沒有流媒體
難以擴展
Airflow更加復雜和有效的工作流管理工具,由 Airbnb 開發和開源。
優點所有上述的優點 + 調度和可擴展性
缺點由于功能的強大,所有學習門檻有點高
總結最后,我們可以畫出我們一整個數據工程架構圖。如下圖所示:
CoderPai 是一個專注于算法實戰的平臺,從基礎的算法到人工智能算法都有設計。如果你對算法實戰感興趣,請快快關注我們吧。加入AI實戰微信群,AI實戰QQ群,ACM算法微信群,ACM算法QQ群。長按或者掃描如下二維碼,關注 “CoderPai” 微信號(coderpai)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41064.html
摘要:所以,我們主要來講架構是如何進行演化的。此前,我提到同城最初的技術選型是,應該是在年的時候,整個網站的性能變得非常之低。對技術的要求越來越高,任何一個站點都不能掛,對站點的可用性要求也是越來越高。 【編者按】對很多創業公司而言,隨著業務的增長,網站的流量也會經歷不同的階段。從十萬流量到一百萬流量,再從一百萬流量跨越到一千萬甚至上億的流量,網站的架構需要經歷哪些變化?我們一起聽聽 58 ...
摘要:以下將分別從五大技術專場維度介紹本屆峰會的部分聯席主席與精選案例。天時間集中分享年最值得學習的個研發案例實踐。 從萬維網到物聯網,從信息傳播到人工智能,20年間軟件研發行業趨勢發生了翻天覆地的變化。大數據、云計算、AI等新興領域逐漸改變我們的生活方式,Devops、容器、深度學習、敏捷等技術方式和工作理念對軟件研發從業者提出更高要求。 由麥思博(msup)有限公司主辦的第六屆全球軟件案...
摘要:的演進按照上述的說明,在一個單體服務中,隨著業務的不斷迭代,可能會發生什么嚴重的問題。個人認為造成這個原因的主要原因還是在于長期以來的這種模式只有縱向切分導致。摘要 mvc是一種軟件設計模式,最早由Trygve Reenskaug在1978年提出,他有效的解決了表示層,控制器層,邏輯層的代碼混合在一起的問題,很好的做到了職責分離。但是在實際的編碼實踐過程中,你會發現這個模式隨著業務的擴展,變...
某熊的技術之路指北 ? 當我們站在技術之路的原點,未來可能充滿了迷茫,也存在著很多不同的可能;我們可能成為 Web/(大)前端/終端工程師、服務端架構工程師、測試/運維/安全工程師等質量保障、可用性保障相關的工程師、大數據/云計算/虛擬化工程師、算法工程師、產品經理等等某個或者某幾個角色。某熊的技術之路系列文章/書籍/視頻/代碼即是筆者蹣跚行進于這條路上的點滴印記,包含了筆者作為程序員的技術視野、...
閱讀 2556·2023-04-25 20:05
閱讀 2885·2023-04-25 17:56
閱讀 2195·2021-10-14 09:49
閱讀 2679·2019-08-29 15:10
閱讀 2922·2019-08-29 12:25
閱讀 416·2019-08-28 18:23
閱讀 756·2019-08-26 13:26
閱讀 1370·2019-08-23 18:21