該檔案為人們選擇
dask
提供了高層次的動機。
python
在資料科學中的作用
首先由於
numpy
、pandas
和scikit learn
等計算庫和大量視覺化、互動式
notebook
、協作庫等推動了
python
發展。
然而,這些包並不是為了多台機器設計的。
dask
的開發是為了擴充套件這些包和周圍的生態系統。它與現有的
python
生態系統協作,將其擴充套件到多核機器和分布式集群。
熟悉的api
分析人員經常在個人計算機上使用
pandas
、scikit learn
、numpy
和python
生態系統的其他工具來分析他們的資料。他們喜歡這些工具,因為它們是高效、直觀和廣泛受信任的。然而,當他們選擇將他們的分析應用於更大的資料集時,他們發現這些工具並沒有設計在多台機器上執行。因此,分析者不得不使用乙個更具可擴充套件性的工具來重寫他們的計算,通常使用另一種語言。這個重寫過程會減慢開發速度並使之受到挫折
dask
提供了pandas
、scikit-learn
和numpy
使用最少的修改,就能完成工作的方法。它與這些工具很好地整合,因此它可以複製它們的大部分
api,並在內部使用它們的資料結構。此外,
dask
與這些庫共同開發,以確保它們一致發展,最大限度地減少從本地膝上型電腦上的工作負載過渡到多核工作站和分布式集群所造成的摩擦。熟悉
pandas/scikit-learn/numpy
的分析師將立即熟悉它們的
dask
等價物,並將大部分**轉化為可擴充套件的應用上。
擴充套件到群集
由於資料集和計算的擴充套件速度快於
cpu和
ram,因此我們需要找到跨多台計算機擴充套件計算的方法。這帶來了許多新的問題:
雖然可以在內部構建這些系統(實際上存在許多系統),但許多組織越來越依賴於開源社群內開發的解決方案。這些裝置往往更堅固、更安全、功能齊全,而無需內部員工的維護。
dask
解決了這些問題。它通常在數千個機器集群上執行,以高效地處理數百兆位元組的資料。它有關於如何在內部、雲端或
hpc超級計算機上部署的實用程式和文件。它支援使用
tls/ssl
證書進行加密和身份驗證。它具有彈性,可以很好地處理工作節點的故障,具有彈性,因此可以利用動態新增的新節點。
dask
包括幾個使用者
api,全球數千名在不同領域工作的研究人員都在使用和簡化這些
api。
小到一台計算機
大規模集群並不總是正確的選擇
今天的膝上型電腦和工作站功能驚人,如果使用得當,通常可以處理資料集和計算,我們以前依賴於集群。現代膝上型電腦有乙個多核
cpu、
32gb
的ram
和基於快閃儲存器的硬碟驅動器,這些硬碟驅動器的資料傳輸速度甚至比一兩年前的
hdd或
ssd快幾倍。
因此,分析師通常可以在膝上型電腦上操作
100gb
以上的資料集,或者在工作站上操作
1tb以上的資料集,而根本不用擔心集群。他們有時喜歡這樣做,原因如下:
他們可以使用自己的本地軟體環境,而不是受集群上可用資源的約束。
他們可以更容易地在運輸途中、咖啡店或在遠離
vpn的家中工作。
除錯錯誤和分析效能通常在一台機器上更容易,而不必通過日誌進行分析。
一般來說,它們的迭代週期更快。
由於所有資料都是本地的,不需要通過網路或在不同的程序之間流動,因此它們的計算效率可能更高。
dask
可以通過利用多核
cpu和從磁碟高效地傳輸資料,在單台機器上實現高效的平行計算。它可以在分布式集群上執行,但不必。
dask
允許您將集群換成單機器排程程式,這種排程程式非常輕,不需要設定,並且可以完全在與使用者會話相同的程序中執行。
為了避免過多的記憶體使用,
dask
擅長在可能的情況下通過從磁碟中提取資料塊、進行必要的處理以及盡可能快地丟棄中間值來尋找在低記憶體占用下評估計算的方法。這使得分析師可以在中等大的資料集(
100gb
以上)上執行計算,即使是在相對低功耗的膝上型電腦上。這不需要配置,也不需要設定,這意味著將
dask
新增到單個機器計算中只會增加很少的記憶體開銷 與
python
生態系統整合
python
包括計算庫,如
numpy
、pandas
和scikit-learn
,以及在資料訪問、繪圖、統計、影象和訊號處理等方面的數千個其他庫。這些庫無縫地協作,生成乙個具有凝聚力的軟體包生態系統,這些軟體包共同進化,以滿足許多領域的分析師的需求。
這個生態系統是由每個人都遵循的共同標準和協議連線在一起的,這使得這些包以令人驚訝和愉快的方式相互受益。
dask
是從這個生態系統進化而來的。它遵守這些標準和議定書,積極參與社群推動新的標準和議定書。這使得生態系統的其餘部分能夠以最小的協調性從並行和分布式計算中受益。
dask
並不試圖破壞或取代現有的生態系統,而是從內部補充和受益。
因此,dask
的開發由
pandas
、numpy
、scikit-learn
、scikit-image
、jupyter
等開發社群推動。更廣泛的社群增長帶來的這種參與有助於使用者信任專案,並有助於確保
python
生態系統將繼續以平穩和可持續的方式發展。
支援複雜的應用程式
有些平行計算很簡單,只需將相同的例程應用於許多輸入,而不需要任何協調。它們很容易與任何系統並行。 使用
hadoop
和spark
的mapreduce
模式作為計算還是有點更複雜。
dask
通常足以完成大多數資料清理任務、資料庫風格的查詢以及一些輕量級的機器學習演算法。
然而,現有的複雜平行計算並不符合這些正規化,因此很難用傳統的大資料技術來執行。其中包括用於統計或機器學習的更高階演算法、時間序列或本地操作,或者通常在大型企業系統中發現的定製並行性。
如今,許多公司和機構都存在可並行的問題,但不清楚如何轉換為大資料計算。如今,這些公司往往通過使用低階系統(如
mpi、
zeromq
)或tcp
和複雜的佇列系統編寫自定義**,希望將這些問題通過使用標準的大資料技術(如
mapreduce
或spark
)來解決問題
dask
通過向內部任務排程程式公開低階
api來幫助解決這些問題,它能夠執行非常高階的計算。這使機構內的工程師能夠使用同乙個引擎來構建他們自己的平行計算系統,該引擎支援
dask
的array
、dataframe
和機器學習演算法,但現在有了機構自己的自定義邏輯。允許工程師在內部保留複雜的業務邏輯,同時仍然依賴
dask
來處理網路通訊、負載平衡、恢復能力、診斷等。 反響
因為所有事情都是遠端進行的,互動式平行計算可能會讓使用者感到沮喪。他們沒有很好的理解計算是如何進行的,可能出了什麼問題,或者他們應該關注**的哪些部分來提高效能。使用者和他們的計算之間增加的距離會極大地影響他們識別和解決錯誤和效能問題的速度,這會極大地增加他們解決問題的時間。
dask
通過一套有用的診斷和調查工具(包括以下工具)向使用者提供資訊和內容:
顯示當前進度、通訊成本、記憶體使用等的實時響應儀錶盤,每100毫秒更新一次。
在每10毫秒對每個執行緒進行一次輪詢的每個工作執行緒上安裝乙個統計探查器,以確定**中的哪些行在整個計算過程中占用的時間最多。
每個worker和排程程式中都有乙個嵌入式的ipython核心,允許使用者使用彈出式終端直接調查他們的計算狀態。
在本地重新評估錯誤的能力,以便他們可以使用他們習慣的傳統除錯工具,即使在遠端發生錯誤時也是如此。
我們為什麼需要睡眠
隨著時光的消逝,你是否發覺眼角的皺紋逐漸加深?變得越來越粗糙黯淡?記憶力也開始衰退?這個時候很多人都會感慨 時光易逝,容顏易老 並且開始習慣接受自己已慢慢變老,提前加入老人的行列。其實,這一切也許只是因為你長時間睡眠不足造成的。如果能夠早些了解這些常識,並引起足夠重視,你的青春也許還能保留十年。睡眠...
我們為什麼需要睡眠
隨著時光的消逝,你是否發覺眼角的皺紋逐漸加深?變得越來越粗糙黯淡?記憶力也開始衰退?這個時候很多人都會感慨 時光易逝,容顏易老 並且開始習慣接受自己已慢慢變老,提前加入老人的行列。其實,這一切也許只是因為你長時間睡眠不足造成的。如果能夠早些了解這些常識,並引起足夠重視,你的青春也許還能保留十年。睡眠...
我們為什麼需要Map Reduce?
在討論我們是否真的需要map reduce這一分布式計算技術之前,我們先面對乙個問題,這可以為我們討論這個問題提供乙個直觀的背景。我們先從最直接和直觀的方式出發,來嘗試解決這個問題 先偽一下這個問題 select count distinct surname from big name file 我...