鎖屏面試題百日百刷-Spark篇(九)
?鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.Spark 機器學(xué)習(xí)和 Spark 圖計算接觸過沒有,能舉例說明你用它做過什么嗎?
Spark 提供了很多機器學(xué)習(xí)庫,我們只需要填入數(shù)據(jù),設(shè)置參數(shù)就可以用了。使用起來非常方便。另外一方面,由于它把所有的東西都寫到了內(nèi)部,我們無法修改其實現(xiàn)過程。要想修改里面的某個環(huán)節(jié),還的修改源碼,重新編譯。比如 kmeans 算法,如果沒有特殊需求,很方便。但是spark內(nèi)部使用的兩個向量間的距離是歐式距離。如果你想改為余弦或者馬氏距離,就的重新編譯源碼了。Spark 里面的機器學(xué)習(xí)庫都是一些經(jīng)典的算法,這些代碼網(wǎng)上也好找。這些代碼使用起來叫麻煩,但是很靈活。Spark 有一個很大的優(yōu)勢,那就是 RDD。模型的訓(xùn)練完全是并行的。
2.Spark 的 ML 和 MLLib 兩個包區(qū)別和聯(lián)系
技術(shù)角度上,面向的數(shù)據(jù)集類型不一樣: ML 的 API 是面向 Dataset 的(Dataframe 是 Dataset 的子集,也就是 Dataset[Row]),mllib 是面對 RDD 的。Dataset 和 RDD 有啥不一樣呢?Dataset 的底端是 RDD。Dataset對 RDD 進行了更深一層的優(yōu)化,比如說有 sql 語言類似的黑魔法,Dataset 支持靜態(tài)類型分析所以在 compile time 就能報錯,各種 combinators(map,foreach 等)性能會更好,等等。
編程過程上,構(gòu)建機器學(xué)習(xí)算法的過程不一樣: ML 提倡使用 pipelines,把數(shù)據(jù)想成水,水從管道的一段流入,從另一端流出。ML 是1.4比 Mllib 更高抽象的庫,它解決如果簡潔的設(shè)計一個機器學(xué)習(xí)工作流的問題,而不是具體的某種機器學(xué)習(xí)算法。未來這兩個庫會并行發(fā)展。
3.Spark master使用zookeeper進行HA的,有哪些元數(shù)據(jù)保存在Zookeeper?
答:spark通過這個參數(shù)spark.deploy.zookeeper.dir指定master元數(shù)據(jù)在zookeeper中保存的位置,包括Worker,Driver和Application以及Executors。standby節(jié)點要從zk中,獲得元數(shù)據(jù)信息,恢復(fù)集群運行狀態(tài),才能對外繼續(xù)提供服務(wù),作業(yè)提交資源申請等,在恢復(fù)前是不能接受請求的。另外,Master切換需要注意2點
1)在Master切換的過程中,所有的已經(jīng)在運行的程序皆正常運行!因為Spark Application在運行前就已經(jīng)通過Cluster Manager獲得了計算資源,所以在運行時Job本身的調(diào)度和處理和Master是沒有任何關(guān)系的!
2) 在Master的切換過程中唯一的影響是不能提交新的Job:一方面不能夠提交新的應(yīng)用程序給集群,因為只有Active Master才能接受新的程序的提交請求;另外一方面,已經(jīng)運行的程序中也不能夠因為Action操作觸發(fā)新的Job的提交請求;
4.Spark master HA 主從切換過程不會影響集群已有的作業(yè)運行,為什么?
因為程序在運行之前,已經(jīng)申請過資源了,driver和Executors通訊,不需要和master進行通訊的。