Spark基礎(chǔ)知識

原文鏈接:https://blog.csdn.net/zuolixiangfisher/article/details/88973159
1浩聋、什么是寬依賴,什么是窄依賴湃崩?哪些算子是寬依賴惶我,哪些是窄依賴?
窄依賴就是一個父RDD分區(qū)對應(yīng)一個子RDD分區(qū)冠骄,如map伪煤,filter
或者多個父RDD分區(qū)對應(yīng)一個子RDD分區(qū),如co-partioned join

寬依賴是一個父RDD分區(qū)對應(yīng)非全部的子RDD分區(qū)凛辣,如groupByKey抱既,ruduceByKey
或者一個父RDD分區(qū)對應(yīng)全部的子RDD分區(qū),如未經(jīng)協(xié)同劃分的join
http://www.reibang.com/p/736a4e628f0f

2扁誓、Transformation和action算子有什么區(qū)別防泵?舉例說明
Transformation 變換/轉(zhuǎn)換:這種變換并不觸發(fā)提交作業(yè),完成作業(yè)中間過程處理蝗敢。Transformation 操作是延遲計算的捷泞,也就是說從一個RDD 轉(zhuǎn)換生成另一個 RDD 的轉(zhuǎn)換操作不是馬上執(zhí)行,需要等到有 Action 操作的時候才會真正觸發(fā)運算

map, filter

Action 行動算子:這類算子會觸發(fā) SparkContext 提交 Job 作業(yè)寿谴。
Action 算子會觸發(fā) Spark 提交作業(yè)(Job)锁右。

count

3、講解spark shuffle原理和特性讶泰?shuffle write 和 shuffle read過程做些什么咏瑟?
https://blog.csdn.net/zhanglh046/article/details/78360762

4、Shuffle數(shù)據(jù)塊有多少種不同的存儲方式痪署?分別是什么

RDD數(shù)據(jù)塊:用來存儲所緩存的RDD數(shù)據(jù)响蕴。
Shuffle數(shù)據(jù)塊:用來存儲持久化的Shuffle數(shù)據(jù)。
廣播變量數(shù)據(jù)塊:用來存儲所存儲的廣播變量數(shù)據(jù)惠桃。
任務(wù)返回結(jié)果數(shù)據(jù)塊:用來存儲在存儲管理模塊內(nèi)部的任務(wù)返回結(jié)果浦夷。通常情況下任務(wù)返回結(jié)果隨任務(wù)一起通過Akka返回到Driver端。但是當任務(wù)返回結(jié)果很大時辜王,會引起Akka幀溢出劈狐,這時的另一種方案是將返回結(jié)果以塊的形式放入存儲管理模塊,然后在Driver端獲取該數(shù)據(jù)塊即可呐馆,因為存儲管理模塊內(nèi)部數(shù)據(jù)塊的傳輸是通過Socket連接的肥缔,因此就不會出現(xiàn)Akka幀溢出了。
流式數(shù)據(jù)塊:只用在Spark Streaming中汹来,用來存儲所接收到的流式數(shù)據(jù)塊
5续膳、哪些spark算子會有shuffle改艇?

去重,distinct
排序坟岔,groupByKey谒兄,reduceByKey等
重分區(qū),repartition社付,coalesce
集合或者表操作承疲,interection,join
https://kuncle.github.io/spark/2017/03/13/Spark的shuffle算子.html

6鸥咖、講解spark schedule(任務(wù)調(diào)度)燕鸽?

https://www.cnblogs.com/missmzt/p/6734078.html

7、Spark stage是如何劃分的啼辣?

從hdfs中讀取文件后啊研,創(chuàng)建 RDD 對象
DAGScheduler模塊介入運算,計算RDD之間的依賴關(guān)系鸥拧。RDD之間的依賴關(guān)系就形成了DAG
每一個JOB被分為多個Stage悲伶,劃分Stage的一個主要依據(jù)是當前計算因子的輸入是否是確定的,如果是則將其分在同一個Stage住涉,避免多個Stage之間的消息傳遞開銷麸锉。
因此spark劃分stage的整體思路是:從后往前推,遇到寬依賴就斷開舆声,劃分為一個stage花沉;遇到窄依賴就將這個RDD加入該stage中。

8媳握、Spark cache一定能提升計算性能么碱屁?說明原因?
不一定啊蛾找,cache是將數(shù)據(jù)緩存到內(nèi)存里娩脾,當小數(shù)據(jù)量的時候是能提升效率,但數(shù)據(jù)大的時候內(nèi)存放不下就會報溢出打毛。

9柿赊、Cache和persist有什么區(qū)別和聯(lián)系?
cache調(diào)用了persist方法幻枉,cache只有一個默認的緩存級別MEMORY_ONLY 碰声,而persist可以根據(jù)情況設(shè)置其它的緩存級別。
https://blog.csdn.net/houmou/article/details/52491419

10熬甫、RDD是彈性數(shù)據(jù)集胰挑,“彈性”體現(xiàn)在哪里呢?你覺得RDD有哪些缺陷?

自動進行內(nèi)存和磁盤切換
基于lineage的高效容錯
task如果失敗會特定次數(shù)的重試
stage如果失敗會自動進行特定次數(shù)的重試瞻颂,而且只會只計算失敗的分片
checkpoint【每次對RDD操作都會產(chǎn)生新的RDD豺谈,如果鏈條比較長,計算比較笨重贡这,就把數(shù)據(jù)放在硬盤中】和persist 【內(nèi)存或磁盤中對數(shù)據(jù)進行復(fù)用】(檢查點茬末、持久化)
數(shù)據(jù)調(diào)度彈性:DAG TASK 和資源管理無關(guān)
數(shù)據(jù)分片的高度彈性repartion
缺陷:
惰性計算的缺陷也是明顯的:中間數(shù)據(jù)默認不會保存,每次動作操作都會對數(shù)據(jù)重復(fù)計算藕坯,某些計算量比較大的操作可能會影響到系統(tǒng)的運算效率

11、RDD有多少種持久化方式噪沙?memory_only如果內(nèi)存存儲不了炼彪,會怎么操作?
cache和persist
memory_and_disk正歼,放一部分到磁盤
MEMORY_ONLY_SER:同MEMORY_ONLY辐马,但是會使用Java序列化方式,將Java對象序列化后進行持久化局义∠惨可以減少內(nèi)存開銷,但是需要進行反序列化萄唇,因此會加大CPU開銷檩帐。
MEMORY_AND_DSK_SER:同MEMORY_AND_DSK。但是使用序列化方式持久化Java對象另萤。
DISK_ONLY:使用非序列化Java對象的方式持久化湃密,完全存儲到磁盤上。
MEMORY_ONLY_2或者MEMORY_AND_DISK_2等:如果是尾部加了2的持久化級別四敞,表示會將持久化數(shù)據(jù)復(fù)用一份泛源,保存到其他節(jié)點,從而在數(shù)據(jù)丟失時忿危,不需要再次計算达箍,只需要使用備份數(shù)據(jù)即可。

12铺厨、RDD分區(qū)和數(shù)據(jù)塊有啥聯(lián)系缎玫?

13、當GC時間占比很大可能的原因有哪些解滓?對應(yīng)的優(yōu)化方法是碘梢?
垃圾回收的開銷和對象合數(shù)成正比,所以減少對象的個數(shù)伐蒂,就能大大減少垃圾回收的開銷煞躬。序列化存儲數(shù)據(jù),每個RDD就是一個對象。緩存RDD占用的內(nèi)存可能跟工作所需的內(nèi)存打架恩沛,需要控制好

14在扰、Spark中repartition和coalesce異同?coalesce什么時候效果更高雷客,為什么

repartition(numPartitions:Int):RDD[T]
coalesce(numPartitions:Int, shuffle:Boolean=false):RDD[T]
1
2
以上為他們的定義芒珠,區(qū)別就是repartition一定會觸發(fā)shuffle,而coalesce默認是不觸發(fā)shuffle的搅裙。

他們兩個都是RDD的分區(qū)進行重新劃分皱卓,repartition只是coalesce接口中shuffle為true的簡易實現(xiàn),(假設(shè)RDD有N個分區(qū)部逮,需要重新劃分成M個分區(qū))

減少分區(qū)提高效率

15娜汁、Groupbykey和reducebykey哪個性能更高,為什么兄朋?
reduceByKey性能高掐禁,更適合大數(shù)據(jù)集
http://www.reibang.com/p/0c6705724cff

16、你是如何理解caseclass的颅和?
https://blog.csdn.net/hellojoy/article/details/81034528

17傅事、Scala里trait有什么功能,與class有何異同峡扩?什么時候用trait什么時候該用class
它可以被繼承蹭越,而且支持多重繼承,其實它更像我們熟悉的接口(interface)教届,但它與接口又有不同之處是:
trait中可以寫方法的實現(xiàn)般又,interface不可以(java8開始支持接口中允許寫方法實現(xiàn)代碼了),這樣看起來trait又很像抽象類

18巍佑、Scala 語法中to 和 until有啥區(qū)別
to 包含上界茴迁,until不包含上界

19、講解Scala伴生對象和伴生類
單例對象與類同名時萤衰,這個單例對象被稱為這個類的伴生對象堕义,而這個類被稱為這個單例對象的伴生類。伴生類和伴生對象要在同一個源文件中定義脆栋,伴生對象和伴生類可以互相訪問其私有成員倦卖。不與伴生類同名的單例對象稱為孤立對象。

import scala.collection.mutable.Map
 
class ChecksumAccumulator {
  private var sum = 0
  def add(b: Byte) {
    sum += b
  }
  def checksum(): Int = ~(sum & 0xFF) + 1
}
 
object ChecksumAccumulator {
  private val cache = Map[String, Int]()
  def calculate(s: String): Int =
    if (cache.contains(s))
    cache(s)
  else {
      val acc = new ChecksumAccumulator
      for (c <- s)
        acc.add(c.toByte)
      val cs = acc.checksum()
      cache += (s -> cs)
      println("s:"+s+" cs:"+cs)
      cs
    }
 
  def main(args: Array[String]) {
    println("Java 1:"+calculate("Java"))
    println("Java 2:"+calculate("Java"))
    println("Scala :"+calculate("Scala"))
  }
}

20椿争、spark作業(yè)執(zhí)行流程

客戶端提交作業(yè)
Driver啟動流程
Driver申請資源并啟動其余Executor(即Container)
Executor啟動流程
作業(yè)調(diào)度怕膛,生成stages與tasks。
Task調(diào)度到Executor上秦踪,Executor啟動線程執(zhí)行Task邏輯
Driver管理Task狀態(tài)
Task完成褐捻,Stage完成掸茅,作業(yè)完成
————————————————

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市柠逞,隨后出現(xiàn)的幾起案子昧狮,更是在濱河造成了極大的恐慌,老刑警劉巖板壮,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逗鸣,死亡現(xiàn)場離奇詭異,居然都是意外死亡绰精,警方通過查閱死者的電腦和手機撒璧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來笨使,“玉大人卿樱,你說我怎么就攤上這事≮灞恚” “怎么了殿如?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵贡珊,是天一觀的道長最爬。 經(jīng)常有香客問我,道長门岔,這世上最難降的妖魔是什么爱致? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮寒随,結(jié)果婚禮上糠悯,老公的妹妹穿的比我還像新娘。我一直安慰自己妻往,他們只是感情好互艾,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著讯泣,像睡著了一般纫普。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上好渠,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天昨稼,我揣著相機與錄音,去河邊找鬼拳锚。 笑死假栓,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的霍掺。 我是一名探鬼主播匾荆,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼拌蜘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棋凳?” 一聲冷哼從身側(cè)響起拦坠,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剩岳,沒想到半個月后贞滨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡拍棕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年晓铆,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片绰播。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡骄噪,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蠢箩,到底是詐尸還是另有隱情链蕊,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布谬泌,位于F島的核電站滔韵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏掌实。R本人自食惡果不足惜陪蜻,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望贱鼻。 院中可真熱鬧宴卖,春花似錦、人聲如沸邻悬。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽父丰。三九已至肝谭,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間础米,已是汗流浹背分苇。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留屁桑,地道東北人医寿。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像蘑斧,于是被迫代替她去往敵國和親靖秩。 傳聞我的和親對象是個殘疾皇子须眷,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349

推薦閱讀更多精彩內(nèi)容