成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

如何架構(gòu)一個數(shù)據(jù)工程

GeekQiaQia / 1233人閱讀

摘要:太多的計算如果我們開始增加一個單線程來加載數(shù)據(jù)管道,那么這種操作最終肯定是會失敗的。優(yōu)點所有上述的優(yōu)點調(diào)度和可擴展性缺點由于功能的強大,所有學習門檻有點高總結(jié)最后,我們可以畫出我們一整個數(shù)據(jù)工程架構(gòu)圖。

作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
簡書地址:http://www.jianshu.com/p/7a72...

1. 介紹

在我們深入討論這個 “數(shù)據(jù)工程” 業(yè)務(wù)細節(jié)之前,我們需要先知道標準(PyData)機器學習數(shù)據(jù)管道的局限性,如下圖所示:

     典型的 PyData 機器學習數(shù)據(jù)管道設(shè)計,通過 Python 腳本完成鏈接(通常是單線程)



模型的優(yōu)點

低門檻

快速部署

模型的缺點

可擴展性差

對于機器學習可擴展性差問題的解釋,可以查看這篇文章,有非常詳細的解釋。在這里,我們將采用一個更加簡單的方式來說明這3個問題,為什么這個數(shù)據(jù)管道的加載是如此的重。

1) 太多的計算

如果我們開始增加一個單線程來加載 PyData 數(shù)據(jù)管道,那么這種操作最終肯定是會失敗的。我們不能將這種操作擴展到單個節(jié)點之外,也就是說,如果你的數(shù)據(jù)太巨大以至于不能在內(nèi)存中操作,那么你需要對其進行批量處理,否則你將無法進行處理。如果你沒有足夠的CPU資源去訓練一個模型,那么你只能去購買一個更好的處理器來解決這個問題,但是如果你已經(jīng)擁有了一個很好的處理器,那么接下來又會發(fā)生什么呢?更糟糕的是,因為模型的數(shù)據(jù)輸入請求是由一定的速率要求的,如果模型不能按照一定的速率得到預測結(jié)果,那么這將成為整一個系統(tǒng)的性能瓶頸。Python 中的多線程是有限的,如果一個線程失敗了,那么系統(tǒng)是沒有辦法優(yōu)雅的去切換到默認值,所以我們只能失敗。

上述所有的問題都可以通過拆分 - 應(yīng)用 - 組合的策略來解決,該策略允許將一個任務(wù)分割成多個子任務(wù)然后并行子啊不同的線程或者節(jié)點上面去計算,最后將計算結(jié)果進行合并,加快數(shù)據(jù)管道的處理效率。MapReduce 的思想就是來解決這個問題的,我們可以用任何的語言來實現(xiàn)這一個算法,但是你會度過幾小時的痛苦時間,因為從零開始編寫 MapReduce 是一件非常瘋狂的事。一個可行的方式是我們利用 Hadoop 的 MapReduce 或者 Spark 的。Hadoop 的操作可能會慢一點,因為它每次操作之后都會發(fā)生磁盤讀寫操作(所以現(xiàn)在幾乎沒有人使用它),但是 Spark 所有的計算都是發(fā)生在內(nèi)存中,加快了機器學習算法的迭代速度,甚至比一般的流水式數(shù)據(jù)管道還要快(但是你需要一個很大的內(nèi)存空間)。

由于 Spark 不但提供了數(shù)據(jù)批處理和流處理,它還提供了 Spark ML 這一個強大的包。這個包允許你進行分布式機器學習操作,用 Spark jobs 可以完全替代 Python 腳本中的 PyData 數(shù)據(jù)管道和模塊之間的連接器,而且可以很方便的在分布式集群上面運行,線程失敗了可以正常重啟。

2) 太多的數(shù)據(jù)

讓我們試想一下,我們已經(jīng)用 Spark jobs 和 Spark ML 模塊替代了典型模型 PyData ML Pipeline 中的中間腳本,如下圖所示:

                               Improved pipeline

在這個數(shù)據(jù)管道中還存在一個弱點:DB。當處理的數(shù)據(jù)量超過 5TB 的時候,關(guān)系數(shù)據(jù)庫的處理能力表現(xiàn)不佳。關(guān)系數(shù)據(jù)庫的分片和復制是一個本身就存在的大問題,如果你想要去支持如此大的數(shù)據(jù)量,那么這必將是一個昂貴的冒險行為。所以當我們的數(shù)據(jù)量在達到 5TB 的天花板之前,可能需要放棄關(guān)系型數(shù)據(jù)庫。

那么,對于大數(shù)據(jù)來說,還有那些其他的數(shù)據(jù)存儲方案可以選擇呢?首先,需要一個分布式數(shù)據(jù)存儲系統(tǒng),它能夠?qū)谷缦聠栴}:

硬件故障導致的數(shù)據(jù)丟失問題

需要一個高的吞吐量

可以擴展到很多的數(shù)據(jù)平臺

Hadoop 分布式文件系統(tǒng)(HDFS)滿足于以上所有特性,這是 Apache Hadoop 項目中的一部分。而且這個可以在本地硬件集群上面設(shè)置 HDFS,如果你有幾個 DevOps 專家,那么你就可以部署到任何你喜歡的地方了。為了存儲一些冷數(shù)據(jù),我們可以考慮 AWS S3 作為存儲器。但是如果你考慮到速度性能,建議不要把 S3 作為整個模型的一部分。最好將這些熱數(shù)據(jù)存放在計算資源的附近,比如計算資源是在云服務(wù)器上面,那么最好將數(shù)據(jù)存放在本地的 HDFS 集群或者云 HDFS 集群中。

但是這個只是分布式數(shù)據(jù)的基礎(chǔ)設(shè)施,那么存儲數(shù)據(jù)的方式呢?

正如我們已經(jīng)想到的那樣,利用關(guān)系型數(shù)據(jù)庫是一個糟糕的選擇。那么,采用純文本的方式呢?令人驚喜的是,.csv 或 .tsv 文件通常是可以被存儲在 HDFS 系統(tǒng)上的,作為快速和不加判斷的方式來存儲從外部服務(wù)中提交的數(shù)據(jù)(比如,腳本批量接受的數(shù)據(jù))。

優(yōu)點

快速存儲

缺點

最大容量是有限的

需要去讀取整個文件

查詢不是很容易

那么 NoSQL 數(shù)據(jù)庫呢?請注意,并不是所有的 NoSQL 數(shù)據(jù)庫都是分布式的。

優(yōu)點

查詢方便

高吞吐量

缺點

維護成本高

Cassandra 是分布式 NoSQL 數(shù)據(jù)庫的一個典型選擇,但是他仍然需要一個專門的 DevOps 來設(shè)置,維護,監(jiān)視,擴展等等。因此,分布式 NoSQL 是存儲數(shù)據(jù)的默認選項,因為我們需要一個可以方便查詢的數(shù)據(jù)庫。

對于那些想要減少 DevOps 人員工作量的人來說,有一個簡單的解決方案就是使用 Parquet。

優(yōu)點

與 Spark 能很好的結(jié)合

Columnar,這可以讓分析人員加快查詢速度

不是分布式數(shù)據(jù)庫,只是一些文件,較少維護工作

讀取速度很快

存儲效率很高

缺點

架構(gòu)混亂

迭代困難

我們把上面講的架構(gòu)設(shè)計都反應(yīng)在一張圖中,如下圖:

3) 雜亂的數(shù)據(jù)管道

隨著 spark jobs 數(shù)量的增加,數(shù)據(jù)管道變得雜亂無章,所以有很多的事情需要去處理:

作業(yè)調(diào)度

時間依賴型的作業(yè)

邏輯相關(guān)的作業(yè)(任務(wù)鏈)

監(jiān)控和報警

故障轉(zhuǎn)移恢復(重試失敗的作業(yè),而不是整個數(shù)據(jù)管道)

作業(yè)可視化(儀表盤)

其他工作流的管理方式

有一些解決方案可以去管理重新編排這些數(shù)據(jù)管道,我們來重點來介紹其中的 2 個。

Luigi

Python 開發(fā)的一個簡單的工作流管理解決方案,由 Spotify 開源。

優(yōu)點

低門檻

依賴管理(鏈式結(jié)構(gòu))

具有狀態(tài)和錯誤跟蹤的 WEB UI 集中式作業(yè)管理器

故障恢復

缺點

沒有調(diào)度

沒有流媒體

難以擴展

Airflow

更加復雜和有效的工作流管理工具,由 Airbnb 開發(fā)和開源。

優(yōu)點

所有上述的優(yōu)點 + 調(diào)度和可擴展性

缺點

由于功能的強大,所有學習門檻有點高

總結(jié)

最后,我們可以畫出我們一整個數(shù)據(jù)工程架構(gòu)圖。如下圖所示:


作者:chen_h 微信號 & QQ:862251340 博客地址:http://www.jianshu.com/p/7a72...

CoderPai 是一個專注于算法實戰(zhàn)的平臺,從基礎(chǔ)的算法到人工智能算法都有設(shè)計。如果你對算法實戰(zhàn)感興趣,請快快關(guān)注我們吧。加入AI實戰(zhàn)微信群,AI實戰(zhàn)QQ群,ACM算法微信群,ACM算法QQ群。長按或者掃描如下二維碼,關(guān)注 “CoderPai” 微信號(coderpai


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/41064.html

相關(guān)文章

  • 58同城技術(shù)委員會執(zhí)行主席沈劍:好的架構(gòu)是進化來的,不是設(shè)計來的

    摘要:所以,我們主要來講架構(gòu)是如何進行演化的。此前,我提到同城最初的技術(shù)選型是,應(yīng)該是在年的時候,整個網(wǎng)站的性能變得非常之低。對技術(shù)的要求越來越高,任何一個站點都不能掛,對站點的可用性要求也是越來越高。 【編者按】對很多創(chuàng)業(yè)公司而言,隨著業(yè)務(wù)的增長,網(wǎng)站的流量也會經(jīng)歷不同的階段。從十萬流量到一百萬流量,再從一百萬流量跨越到一千萬甚至上億的流量,網(wǎng)站的架構(gòu)需要經(jīng)歷哪些變化?我們一起聽聽 58 ...

    didikee 評論0 收藏0
  • 2017年TOP100summit15位大咖擔任聯(lián)席主席甄選最值得學習的100個研發(fā)案例

    摘要:以下將分別從五大技術(shù)專場維度介紹本屆峰會的部分聯(lián)席主席與精選案例。天時間集中分享年最值得學習的個研發(fā)案例實踐。 從萬維網(wǎng)到物聯(lián)網(wǎng),從信息傳播到人工智能,20年間軟件研發(fā)行業(yè)趨勢發(fā)生了翻天覆地的變化。大數(shù)據(jù)、云計算、AI等新興領(lǐng)域逐漸改變我們的生活方式,Devops、容器、深度學習、敏捷等技術(shù)方式和工作理念對軟件研發(fā)從業(yè)者提出更高要求。 由麥思博(msup)有限公司主辦的第六屆全球軟件案...

    andot 評論0 收藏0
  • 可落地的DDD的(2)-為什么說MVC工程架構(gòu)已經(jīng)過時

    摘要:的演進按照上述的說明,在一個單體服務(wù)中,隨著業(yè)務(wù)的不斷迭代,可能會發(fā)生什么嚴重的問題。個人認為造成這個原因的主要原因還是在于長期以來的這種模式只有縱向切分導致。摘要 mvc是一種軟件設(shè)計模式,最早由Trygve Reenskaug在1978年提出,他有效的解決了表示層,控制器層,邏輯層的代碼混合在一起的問題,很好的做到了職責分離。但是在實際的編碼實踐過程中,你會發(fā)現(xiàn)這個模式隨著業(yè)務(wù)的擴展,變...

    JowayYoung 評論0 收藏0
  • 某熊的技術(shù)之路指北 ?

    某熊的技術(shù)之路指北 ? 當我們站在技術(shù)之路的原點,未來可能充滿了迷茫,也存在著很多不同的可能;我們可能成為 Web/(大)前端/終端工程師、服務(wù)端架構(gòu)工程師、測試/運維/安全工程師等質(zhì)量保障、可用性保障相關(guān)的工程師、大數(shù)據(jù)/云計算/虛擬化工程師、算法工程師、產(chǎn)品經(jīng)理等等某個或者某幾個角色。某熊的技術(shù)之路系列文章/書籍/視頻/代碼即是筆者蹣跚行進于這條路上的點滴印記,包含了筆者作為程序員的技術(shù)視野、...

    shadowbook 評論0 收藏0

發(fā)表評論

0條評論

GeekQiaQia

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<