1、寬依賴:乙個分割槽對應多個分割槽,這就表明有shuffle過程,父分割槽資料經過shuffle過程的hash分割槽器劃分子rdd。
例如:groupbykey reducebykey sortbykey等操作,shuffle可以理解為資料從原分割槽打亂重組到新分割槽
2、窄依賴:乙個分割槽對應乙個分割槽,這個過程沒有shuffle過程
例如 map filter等
spark的stage就是按照shuffle來劃分的
1、transformation 變換、轉換運算元,這種變化並不會觸發提交作業,完成作業過程處理,transformation操作是延遲計算的。
也就是說從rdd到另乙個rdd的轉換並不會馬上執行,需要遇到action操作才會觸發計算
2、action行動運算元,這類運算元會真正的觸發spark 提交job作業
1、去重distanct
2、groupbykey reducebykey
3、重分割槽 repartition coalesce
4、join運算元【分情況討論】
兩個rdd的分割槽數相同,在join的時候設定的分割槽數也相同,則在join階段不會產生shuffle
兩個rdd的分割槽數不同,在join的時候設定的分割槽數不同,則在join階段都會產生shuffle
兩個rdd的分割槽數不同,在join的時候設定的分割槽數和其中乙個相同,則在join階段不同的會產生shuffle
也就是說,當兩個rdd分割槽數和分割槽方式一樣時做join就不會產生shuffle
1、乙個分割槽列表,rdd的資料都存在乙個分割槽列表中
2、rdd的依賴關係
3、作用在每乙個分割槽上的函式
4、rdd的key value結構,決定資料的**和已經資料處理後的去向
5、資料本地性,移動計算
1、action操作觸發job
2、dagscheduler根據rdd的寬窄依賴關係進行劃分乙個乙個的stage,遇到寬依賴劃分成乙個stage,最後將整個job都劃分成多個stage,而各個stage之間又存在依賴關係。
1、driver的記憶體溢位
可以增加driver的記憶體引數,預設1g
在spark程式中,sparkcontext、dagscheduler都是執行在driver端的,對應的rdd的stage切分也是在driver端進行,如果使用者的**有很多stage,這部分消耗的是driver的記憶體,這時候就需要調大driver的記憶體
2、map過程中產生大量的物件導致溢位
這個原因是在單個map中產生了大量的物件導致的,例如 rdd.map(x=>for(i<- 1 to 10000) yield i.tostring ),這個操作在rdd中,每個物件都產生了10000個物件,肯定容易造成記憶體溢位的問題,針對這種問題,在不增大記憶體的情況下,可以減少task的大小,以便能達到每個task的executor能裝下大量的物件,具體可以在產出大量物件之前進行repartition草,分割槽成更小的塊傳入map
3、資料不平衡導致的記憶體溢位
呼叫repartition重新分割槽
4、shuffle後記憶體溢位
shuffle記憶體溢位的情況可以說都是shuffle後,單個檔案過大導致的,在spark中,join reducebykey這一型別的運算元,都會有shuffle過程,在shuffle過程,需要傳入乙個partitioner
5、使用rdd的persist(storagelevel.memeory_adn_disk_ser)代替rdd.cache
rdd.cache和rdd.persist(storagelevel.memeory_adn_disk_ser)是等價的,在記憶體不足的情況下,rdd.cache的資料會丟失,再次使用的時候會重新計算,而rdd.persist會再記憶體不足的情況下儲存在磁碟,避免重新計算,只是消耗點io時間
1、本地模式
local:只啟動乙個executor
local[k]:啟動k個executor
2、standalone模式
分布式部署集群,自帶有完整的服務,資源管理和任務監控
3、spark on yarn模式
分布式部署集群,資源和任務管理交給yarn管理
1、cluster模式 driver執行在集群子節點,具有容錯功能
2、client模式,driver執行在客戶端,適合除錯
4、spark on mesos
1、fifo scheduler 預設的排程器,先進先出
2、capacity scheduler 計算能力排程,選擇占用記憶體小,優先級別高的
3、fair scheduler 公平排程,所有jbo的占用相同資源
經典面試題
1.以下三條輸出語句分別輸出什麼?char str1 abc char str2 abc const char str3 abc const char str4 abc const char str5 abc const char str6 abc cout boolalpha str1 str2 ...
經典面試題
我的老同學現在富得流油。他開創了乙個軟體公司,開發了一系列軟體,生意越做越大。今天他來到這個城市後馬上打 給我。是我啊!聽出來了嗎?是這樣的,我到這兒的大學招畢業生,要在這兒呆上五天,咱哥們趁這個時間好好聚一聚。我做東!既然他要做東,我理所當然順水推舟。人家是老闆,不吃白不吃!我來到他下榻的賓館,看...
經典面試題
分兩個情況 perfork模式 worker模式 前者程序模式 後者執行緒模式 故檢視方法也有區別 oldboy.log 參考 分析 此類問題是運維工作中最常見的問題。可以演變成分析日誌,檢視tcp各個狀態連線數,檢視單ip連線數排名等等 第一類 過濾網域名稱方法 方法很多 這裡給出六種為例。還可以...