鎖屏面試題百日百刷-Spark篇(十三)
鎖屏面試題百日百刷,每個(gè)工作日?qǐng)?jiān)持更新面試題。鎖屏面試題app、小程序現(xiàn)已上線,官網(wǎng)地址:https://www.demosoftware.cn。已收錄了每日更新的面試題的所有內(nèi)容,還包含特色的解鎖屏幕復(fù)習(xí)面試題、每日編程題目郵件推送等功能。讓你在面試中先人一步!接下來的是今日的面試題:
1.Spark中Executor啟動(dòng)時(shí),資源通過哪幾個(gè)參數(shù)指定?
1)num-executors是executor的數(shù)量
2)executor-memory 是每個(gè)executor使用的內(nèi)存
3)executor-cores 是每個(gè)executor分配的CPU
2.Spark中列出你所知道的調(diào)度器,說明其工作原理
1)Fifo schedular 默認(rèn)的調(diào)度器 先進(jìn)先出
2)Capacity schedular 計(jì)算能力調(diào)度器 選擇占用內(nèi)存小 優(yōu)先級(jí)高的
3)Fair schedular 調(diào)肚臍 公平調(diào)度器 所有job 占用相同資源
3.YarnClient模式下,執(zhí)行Spark SQL報(bào)這個(gè)錯(cuò),Exception in thread "Thread-2" java.lang.OutOfMemoryError: PermGen space,但是在Yarn Cluster模式下正常運(yùn)行,可能是什么原因?
1)原因查詢過程中調(diào)用的是Hive的獲取元數(shù)據(jù)信息、SQL解析,并且使用Cglib等進(jìn)行序列化反序列化,中間可能產(chǎn)生較多的class文件,導(dǎo)致JVM中的持久代使用較多Cluster模式的持久代默認(rèn)大小是64M,Client模式的持久代默認(rèn)大小是32M,而Driver端進(jìn)行SQL處理時(shí),其持久代的使用可能會(huì)達(dá)到90M,導(dǎo)致OOM溢出,任務(wù)失敗。
yarn-cluster模式下出現(xiàn),yarn-client模式運(yùn)行時(shí)倒是正常的,原來在$SPARK_HOME/bin/spark-class文件中已經(jīng)設(shè)置了持久代大?。?/p>
JAVA_OPTS="-XX:MaxPermSize=256m $OUR_JAVA_OPTS" 2)解決方法:在Spark的conf目錄中的spark-defaults.conf里,增加對(duì)Driver的JVM配置,因?yàn)镈river才負(fù)責(zé)SQL的解
析和元數(shù)據(jù)獲取。配置如下:
spark.driver.extraJavaOptions -XX:PermSize=128M -XX:MaxPermSize=256M
4.spark.driver.extraJavaOptions這個(gè)參數(shù)是什么意思,你們生產(chǎn)環(huán)境配了多少?
傳遞給executors的JVM選項(xiàng)字符串。例如GC設(shè)置或者其它日志設(shè)置。注意,在這個(gè)選項(xiàng)中設(shè)置Spark屬性或者堆大小是不合法的。Spark屬性需要用SparkConf對(duì)象或者spark-submit腳本用到的spark-defaults.conf文件設(shè)置。堆內(nèi)存可以通過spark.executor.memory設(shè)置。
5.導(dǎo)致Executor產(chǎn)生FULL gc 的原因,可能導(dǎo)致什么問題?
答:可能導(dǎo)致Executor僵死問題,海量數(shù)據(jù)的shuffle和數(shù)據(jù)傾斜等都可能導(dǎo)致full gc。以shuffle為例,伴隨著大量的Shuffle寫操作,JVM的新生代不斷GC,Eden Space寫滿了就往Survivor Space寫,同時(shí)超過一定大小的數(shù)據(jù)會(huì)直接寫到老生代,當(dāng)新生代寫滿了之后,也會(huì)把老的數(shù)據(jù)搞到老生代,如果老生代空間不足了,就觸發(fā)FULL GC,還是空間不夠,那就OOM錯(cuò)誤了,此時(shí)線程被Blocked,導(dǎo)致整個(gè)Executor處理數(shù)據(jù)的進(jìn)程被卡住。
6.Spark執(zhí)行任務(wù)時(shí)出現(xiàn)java.lang.OutOfMemoryError: GC overhead limit exceeded和java.lang.OutOfMemoryError: java heap space原因和解決方法?
答:原因:加載了太多資源到內(nèi)存,本地的性能也不好,gc時(shí)間消耗的較多
解決方法:
1)增加參數(shù),-XX:-UseGCOverheadLimit,關(guān)閉這個(gè)特性,同時(shí)增加heap大小,-Xmx1024m
2)下面這個(gè)兩個(gè)參數(shù)調(diào)大點(diǎn)
export SPARK_EXECUTOR_MEMORY=6000M
export SPARK_DRIVER_MEMORY=7000M