目錄
spark是大資料分析引擎,集批處理,實時流計算處理分布式資料集。
spark實現了一種分布式的記憶體抽象,稱為彈性分布式資料集(resilient distributed dataset,rdd)。它支援基於工作集的應用,同時具有資料流模型的特點:自動容錯、位置感知性排程和可伸縮性。
rdd允許使用者在執行多個查詢時顯式地將工作集快取在記憶體中,後續的查詢能夠重用工作集,這極大地提公升了查詢速度。
spark vs mapreduce 記憶體 vs 磁碟
spark 和 mapreduce 計算都是發生在記憶體中,區別在於:mapreduce 需要將中間計算的結果寫入磁碟,然後再讀取磁碟,從而導致了頻繁的磁碟io。
spark則不需要將中間計算結果儲存在磁碟,得益於rdd(彈性分布式資料集)和dag(有向無環圖)
dag記錄了job的stage以及在job執行過程中父rdd和子rdd之間的依賴關係。
中間結果能夠以rdd的形式存放在記憶體中,且能夠從dag中恢復,大大減少了磁碟io。
spark和mapreduce shuffle,兩者至少有一點不同:
mapreduce在shuffle時需要花費大量時間進行排序,排序在mapreduce的shuffle中似乎是不可避免的;
spark在shuffle時則只有部分場景才需要排序,支援基於hash的分布式聚合,更加省時;
多程序模型 vs 多執行緒模型的區別
mapreduce採用了多程序模型,而spark採用了多執行緒模型。
多程序模型的好處是便於細粒度控制每個任務占用的資源,但每次任務的啟動都會消耗一定的啟動時間。就是說mapreduce的map task和reduce task是程序級別的,而spark task則是基於執行緒模型的。
mapreduce 中的 map 和 reduce 都是 jvm 程序,每次啟動都需要重新申請資源,消耗了不必要的時間(假設容器啟動時間大概1s,如果有1200個block,那麼單獨啟動map程序事件就需要20分鐘)
spark則是通過復用執行緒池中的執行緒來減少啟動、關閉task所需要的開銷。
driver是使用者編寫的資料處理邏輯,這個邏輯中包含使用者建立的sparkcontext。
sparkcontext是使用者邏輯與spark集群主要的互動介面,它會和cluster manager互動,包括向它申請計算資源等。
clustermanager負責集群的資源管理和排程,現在支援standalone、apache mesos和hadoop的yarn。
workernode是集群中可以執行計算任務的節點。
executor是在乙個worker node上為某應用啟動的乙個程序,該程序負責執行任務,並且負責將資料存在記憶體或者磁碟上。
task是被送到某個executor上的計算單元。每個應用都有各自獨立的executor,計算最終在計算節點的executor中執行。
使用者程式建立sparkcontext時,新建立的sparkcontext例項會連線到cluster manager。cluster manager會根據使用者提交時設定的cpu和記憶體等資訊為本次提交分配計算資源,啟動executor。
driver會將使用者程式劃分為不同的執行階段,每個執行階段由一組完全相同的task組成,這些task分別作用於待處理資料的不同分割槽。在階段劃分完成和task建立後,driver會向executor傳送task。
driver會根據收到的task的執行狀態來處理不同的狀態更新。task分為兩種:一種是shuffle map task,它實現資料的重新洗牌,洗牌的結果儲存到executor所在節點的檔案系統中;另外一種是result task,它負責生成結果資料。
driver會不斷地呼叫task,將task傳送到executor執行,在所有的task都正確執行或者超過執行次數的限制仍然沒有執行成功時停止。
Visual C 技術內幕學習筆記 第一章 簡介
幾個重要概念 1.net框架 net框架不僅僅是一組類庫。它以使用多種語言的編譯器為目標,並負責為這些語言建立的程式提供乙個共享的基礎平台。該平台包括公共語言執行庫。2.公共語言執行庫 common language runtime clr的任務是管理和執行為.net框架編寫的 執行於clr上的 稱...
第一章總結
動態網頁是指在伺服器端執行的程式或者網頁,它們會隨不同客戶,不同時間,返回不同的內容,隨著internet技術的興起,b s架構是對c s架構的一種變化或者改進的結構,在這種結構下,程式完全放在應用伺服器上,通過應用伺服器同資料庫服務進行通訊。url意思為統一資源定位符,也稱為網頁位址。是inter...
第一章總結
第一章的學習已經結束了。主要是學習了一些基礎的執行緒api操作,了解了執行緒的一些問題 執行緒api操作 currentthread getname setpriority interrupt isinterrupted interrupted suspend resume isalive slee...