鎖屏面試題百日百刷-Spark篇(十四)
?鎖屏面試題百日百刷,每個工作日堅持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.Spark使用parquet文件存儲格式能帶來哪些好處?
1)如果說HDFS 是大數(shù)據(jù)時代分布式文件系統(tǒng)首選標(biāo)準(zhǔn),那么parquet則是整個大數(shù)據(jù)時代文件存儲格式實時首選標(biāo)準(zhǔn)。
2)速度更快:從使用spark sql操作普通文件CSV和parquet文件速度對比上看,絕大多數(shù)情況會比使用csv等普通文件速度提升10倍左右,在一些普通文件系統(tǒng)無法在spark上成功運行的情況下,使用parquet很多時候可以成功運行。
3)parquet的壓縮技術(shù)非常穩(wěn)定出色,在spark sql中對壓縮技術(shù)的處理可能無法正常的完成工作(例如會導(dǎo)致lost task,lost executor)但是此時如果使用parquet就可以正常的完成。
4)極大的減少磁盤I/o,通常情況下能夠減少75%的存儲空間,由此可以極大的減少spark sql處理數(shù)據(jù)的時候的數(shù)據(jù)輸入內(nèi)容,尤其是在spark1.6x中有個下推過濾器在一些情況下可以極大的減少磁盤的IO和內(nèi)存的占用,(下推過濾器)。
5)spark 1.6x parquet方式極大的提升了掃描的吞吐量,極大提高了數(shù)據(jù)的查找速度spark1.6和spark1.5x相比而言,提升了大約1倍的速度,在spark1.6X中,操作parquet時候cpu也進行了極大的優(yōu)化,有效的降低了cpu消耗。
6)采用parquet可以極大的優(yōu)化spark的調(diào)度和執(zhí)行。我們測試spark如果用parquet可以有效的減少stage的執(zhí)行消耗,同時可以優(yōu)化執(zhí)行路徑。
2.Spark應(yīng)用程序的執(zhí)行過程是什么?
1)構(gòu)建Spark Application的運行環(huán)境(啟動SparkContext),SparkContext向資源管理器(可以是Standalone、Mesos或YARN)注冊并申請運行Executor資源;
2)資源管理器分配Executor資源并啟動StandaloneExecutorBackend,Executor運行情況將隨著心跳發(fā)送到資源管理器上;
3)SparkContext構(gòu)建成DAG圖,將DAG圖分解成Stage,并把Taskset發(fā)送給Task Scheduler。Executor向SparkContext申請Task,Task Scheduler將Task發(fā)放給Executor運行同時SparkContext將應(yīng)用程序代碼發(fā)放給Executor;
4)Task在Executor上運行,運行完畢釋放所有資源。
3.如何理解Standalone模式下,Spark資源分配是粗粒度的?
spark默認情況下資源分配是粗粒度的,也就是說程序在提交時就分配好資源,后面執(zhí)行的時候使用分配好的資源,除非資源出現(xiàn)了故障才會重新分配。比如Spark shell啟動,已提交,一注冊,哪怕沒有任務(wù),worker都會分配資源給executor。
4.FAIR調(diào)度模式的優(yōu)點和缺點?
所有的任務(wù)擁有大致相當(dāng)?shù)膬?yōu)先級來共享集群資源,spark多以輪訓(xùn)的方式為任務(wù)分配資源,不管長任務(wù)還是端任務(wù)都可以獲得資源,并且獲得不錯的響應(yīng)時間,對于短任務(wù),不會像FIFO那樣等待較長時間了,通過參數(shù)spark.scheduler.mode 為FAIR指定。
5.請列舉你碰到的CPU密集型的應(yīng)用場景,你有做哪些優(yōu)化?
1)CPU 密集型指的是系統(tǒng)的 硬盤/內(nèi)存 效能 相對 CPU 的效能 要好很多,此時,系統(tǒng)運作,大部分的狀況是 CPU Loading 100%,CPU 要讀/寫 I/O (硬盤/內(nèi)存),I/O在很短的時間就可以完成,而 CPU 還有許多運算要處理,CPU Loading 很高。->cpu是瓶頸。
I/O 密集型指的是系統(tǒng)的CPU效能相對硬盤/內(nèi)存的效能要好很多,此時,系統(tǒng)運作,大部分的狀況是 CPU 在等 I/O (硬盤/內(nèi)存) 的讀/寫,此時 CPU Loading 不高。->IO是瓶頸。
2)CPU密集型主要特點是要進行大量的計算,常見應(yīng)用場景有:圖計算、大量的邏輯判斷程序,機器學(xué)習(xí)等,Mahout其實就是針對CPU密集的一個apache項目。
優(yōu)化的點主要有,1)降低任務(wù)的并行執(zhí)行,務(wù)越多,花在任務(wù)切換的時間就越多,CPU執(zhí)行任務(wù)的效率就越低,2)優(yōu)化計算邏輯,減少計算邏輯的復(fù)雜度,3)盡量減少使用高強度壓縮方式,對原始數(shù)據(jù)的壓縮和解壓縮會增加CPU的負擔(dān)