我研究大資料有一段時間了。我使用,實際上是在嘗試使用 PySpark :)。但在某些時候我真的很困惑。例如,我知道 spark 根據其 RDD 選項自動進行并行化。那么為什么除了使用這種本地并行化之外,我們還要使用集群呢?或者我們是否對真正的大資料使用集群模式(我不是在談論部署模式,我只說 2 或 3 或 4 個從站)?實際上我想象這樣的并行化,例如我的計算機有 12 個內核,所以我認為這 12 個內核是單獨的計算機,所以我有 12 臺計算機。所以因為這個想法對我來說似乎沒有必要在 emr 一個主節點和 2 個從節點中使用集群。當我有 2 個奴隸時,并行化也在繼續進行。例如,我有 2 個從站,每個從站有 12 個內核,就像我的電腦一樣,那么在這種情況下我有 24 個內核嗎?如果它很復雜并且標題錯誤或不足,我可以編輯。提前致謝。
uj5u.com熱心網友回復:
- CPU 確實決定了 spark 中并行化的單位。
- Spark 可以同時處理每個 CPU 1 個任務
- 因此,無論您擁有一臺 12 核的機器還是 12 臺每臺 1 核的機器,您都將能夠一次處理 12 個 Spark 任務。
擁有多臺機器而不是一臺巨大的機器更好的原因有幾個。但是,除非您開始擴展到 12 個以上的核心,否則您可能不會注意到它
1. 可擴展性
- 橫向擴展(添加更多機器)比垂直擴展(獲得更大的機器)更容易。
- 拿你的 12 核機器來說——假設你很高興使用 12 核一年,然后意識到你的作業變得更大,你現在想用 24 核來完成它。很高興能夠購買另一臺 12 核機器并將這 2 臺機器串在一起,而不必購買全新的 24 核機器。
- 當您向上擴展時,這會復合。如果您有一個 2000 個核心的集群,并且想要更多 10 個核心,那么您寧愿添加一臺具有 10 個核心的機器,而不是購買新的 2010 核心機器(如果它們存在的話)
- 其他資源如 RAM 也是如此
2. 云定價
- 使用 EMR 等云服務,您可以使用一些超可靠的按需實體(昂貴的)以及一些可以隨時離線的超便宜的現貨實體來運行您的作業。
- 一個常見的模式是擁有一個主節點和 2 個按需運行的核心節點。然后用來自現貨市場的 20 個核心節點來補充這一點,這些節點有可能離線
相反的觀點
順便說一句,還有一些原因為什么更多的機器意味著更多的問題
- 單節點集群更易于管理
- 理論上,如果所有磁區都位于同一臺機器上,則在磁區之間混洗資料應該會更快
如果您使用 12 個內核,我認為使用單節點 spark 比嘗試設定機器集群要好得多
uj5u.com熱心網友回復:
一臺計算機不僅僅是它擁有的內核數量。它還具有其他資源,例如 RAM 和磁盤。
在處理大資料時,通常資料量太大,無法容納在單個機器的 RAM 中,這就是為什么我們使用一組機器,以便它們之間有足夠的 RAM 來容納記憶體中的資料集。
此外,如果您的資料被復制到所有這些機器的磁盤,您可以受益于讓多臺機器并行讀取它們的資料子集,這樣您就不必在開始任何計算之前等待磁盤 I/O。這也有助于將計算結果保留回磁盤,因為每臺機器都可以并行寫入其資料。
最后,更多的機器確實意味著更多的 CPU,這意味著比僅從一個 worker 獲得更多的并行計算。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/372902.html
上一篇:Spark.sql按MAX過濾行
下一篇:左連接與聚合函式和連接表上的選擇
