1)乙個spark作業執行時包括乙個driver程序,也是作業的主程序,具有main函式和sparkcontext的例項,是程式的人口點;
2)功能:負責向集群申請資源,向master註冊資訊,負責了作業的排程,負責作業的解析、生成stage並排程task到executor上。包括dagscheduler,taskscheduler。
1) 本地模式2) standalone 模式3) spark on yarn 模式4) mesos模式
1)基於記憶體計算,減少低效的磁碟互動;2)高效的排程演算法,基於dag;3)容錯機制linage,精華部分就是dag和lingae
窄依賴就是乙個父( 或多個)rdd分割槽對應乙個子rdd分割槽,如co-partioned join
寬依賴是乙個父rdd分割槽對應(非)全部的子rdd分割槽,如groupbykey,ruducebykey
缺陷:1不支援細粒度的寫和更新操作,粗粒度寫:批量寫入資料,但讀資料細粒度的 2不支援增量迭代計算,flink支援。
1)transformation,rdd由一種轉為另一種rdd 2)action, 3)cronroller,crontroller是控制運算元,cache,persist
transformation 變換/轉換:延遲計算:也就是說從乙個rdd 轉換生成另乙個 rdd 的轉換操作不是馬上執行,需要等到有 action 操作的時候才會真正觸發運算
action 行動運算元:這類運算元會觸發 sparkcontext 提交 job 作業。
使用者在客戶`端提交作業後,會由driver執行main方法並建立sparkcontext上下文,sparkcontext向資源管理器申請資源, 啟動execotor程序, 並通過執行rdd運算元,形成dag有向無環圖,輸入dagscheduler,然後通過dagscheduler排程器, 將dag有向無環圖按照rdd之間的依賴關係劃分為幾個階段,也就是stage,輸入task scheduler, 然後通過任務排程器taskscheduler將stage劃分為task set分發到各個節點的executor中執行。
spark shuffle 處於乙個寬依賴,可以實現類似混洗的功能,將相同的 key 分發至同乙個 reducer上進行處理。
某一部分的資料顯著多於其它部分(木桶效應)。大量不相同的 key 對應的資料被分配到了同乙個 task 上
1. 調整並行度分散同乙個 task 的不同 key:
2. 自定義partitioner:將原本被分配到同乙個 task 的不同 key 分配到不同 task
3. 將 reduce side(側) join 轉變為 map side(側) join: 通過 spark 的 broadcast 機制,將 reduce 側 join 轉化為 map 側 join,避免 shuffle 從而完全消除 shuffle 帶來的資料傾斜。可以看到 rdd2 被載入到記憶體中了。
4. 為 skew 的 key 增加隨機前/字尾 ;5. 大表隨機新增 n 種隨機字首,小表擴大 n 倍
在我們的開發過程中,能避免則盡可能避免使用reducebykey、join、distinct、repartition 等會進行 shuffle 的運算元,盡量使用 map 類的非 shuffle 運算元。這樣的話,沒有 shuffle 操作或者僅有較少 shuffle 操作的 spark 作業,可以大大減少效能開銷。
spark sql 比 hadoop hive 快,是有一定條件的,而且不是 spark sql 的引擎比 hive 的引擎快,相反,hive 的 hql 引擎還比 spark sql 的引擎更快。其實,關鍵還是在於 spark 本身快。
消除了冗餘的 hdfs 讀寫: 讀寫 io 時間
消除了冗餘的 mapreduce 階段: hadoop 的 shuffle 操作一定連著完整的 mapreduce 操作,冗餘繁瑣。而 spark 基於 rdd 提供了豐富的運算元操作,且 reduce 操作產生 shuffle 資料,可以快取在記憶體中。
jvm 的優化: 啟動一次 jvm
streamning筆記:
其他:精華)
(2spark面試題)
常見題目)
spark運算元整理
相當於mapreduce自定義combine,可以提高任務的執行效率,畢竟在map端已經聚合過了 def combinebykeywithclasstag c createcombiner v c,map端,改變 v 的返回值型別 mergevalue c,v c,map端,預聚合 mergecom...
CTF題目整理
最近在整理一些ctf題目,遇到很多很有意思的東西,記錄下來 0x01 柵欄加密 柵欄加密法是一種比較簡單快捷的加密方法。柵欄加密法就是把要被加密的檔案按照一上一下的寫法寫出來,再把第二行的文字排列到第一行的後面。相應的,破譯方法就是把文字從中間分開,分成2行,然後插入。柵欄加密法一般配合其他方法進行...
前端題目整理
聽了冰山工作室的每日一題,整理下來 every和some方法 a.some item a.every item 跑空迴圈 var tag a.foreach item 修改索引 關於foreach裡的陣列長度 在foreach裡使用push等操作並不會使迴圈的次數發生變化,如下例 var a 1,2...