亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

大數據spark經典面試題目與參考答案總結

  發(fā)布時間:2019-10-24 14:23:09   作者:佚名   我要評論
這篇文章主要介紹了大數據spark經典面試題目,整理總結了大數據spark面試中遇到的比較經典的簡答題與選擇題,涉及spark概念、原理、配置、使用等相關知識點,需要的朋友可以參考下

一、簡答題

1.Spark master使用zookeeper進行HA的,有哪些元數據保存在Zookeeper?
答:spark通過這個參數spark.deploy.zookeeper.dir指定master元數據在zookeeper中保存的位置,包括Worker,Driver和Application以及Executors。standby節(jié)點要從zk中,獲得元數據信息,恢復集群運行狀態(tài),才能對外繼續(xù)提供服務,作業(yè)提交資源申請等,在恢復前是不能接受請求的。另外,Master切換需要注意2點
1)在Master切換的過程中,所有的已經在運行的程序皆正常運行!因為Spark Application在運行前就已經通過Cluster Manager獲得了計算資源,所以在運行時Job本身的調度和處理和Master是沒有任何關系的!
2) 在Master的切換過程中唯一的影響是不能提交新的Job:一方面不能夠提交新的應用程序給集群,因為只有Active Master才能接受新的程序的提交請求;另外一方面,已經運行的程序中也不能夠因為Action操作觸發(fā)新的Job的提交請求;

2.Spark master HA 主從切換過程不會影響集群已有的作業(yè)運行,為什么?
答:因為程序在運行之前,已經申請過資源了,driver和Executors通訊,不需要和master進行通訊的。

3.Spark on Mesos中,什么是的粗粒度分配,什么是細粒度分配,各自的優(yōu)點和缺點是什么?
答:1)粗粒度:啟動時就分配好資源, 程序啟動,后續(xù)具體使用就使用分配好的資源,不需要再分配資源;好處:作業(yè)特別多時,資源復用率高,適合粗粒度;不好:容易資源浪費,假如一個job有1000個task,完成了999個,還有一個沒完成,那么使用粗粒度,999個資源就會閑置在那里,資源浪費。2)細粒度分配:用資源的時候分配,用完了就立即回收資源,啟動會麻煩一點,啟動一次分配一次,會比較麻煩。

4.如何配置spark master的HA?
1)配置zookeeper
2)修改spark_env.sh文件,spark的master參數不在指定,添加如下代碼到各個master節(jié)點
export SPARK_DAEMON_JAVA_OPTS="-Dspark.deploy.recoveryMode=ZOOKEEPER -Dspark.deploy.zookeeper.url=zk01:2181,zk02:2181,zk03:2181 -Dspark.deploy.zookeeper.dir=/spark"
3) 將spark_env.sh分發(fā)到各個節(jié)點
4)找到一個master節(jié)點,執(zhí)行./start-all.sh,會在這里啟動主master,其他的master備節(jié)點,啟動master命令: ./sbin/start-master.sh
5)提交程序的時候指定master的時候要指定三臺master,例如
./spark-shell --master spark://master01:7077,master02:7077,master03:7077

5.Apache Spark有哪些常見的穩(wěn)定版本,Spark1.6.0的數字分別代表什么意思?
答:常見的大的穩(wěn)定版本有Spark 1.3,Spark1.6, Spark 2.0 ,Spark1.6.0的數字含義
1)第一個數字:1
major version : 代表大版本更新,一般都會有一些 api 的變化,以及大的優(yōu)化或是一些結構的改變;
2)第二個數字:6
minor version : 代表小版本更新,一般會新加 api,或者是對當前的 api 就行優(yōu)化,或者是其他內容的更新,比如說 WEB UI 的更新等等;
3)第三個數字:0
patch version , 代表修復當前小版本存在的一些 bug,基本不會有任何 api 的改變和功能更新;記得有一個大神曾經說過,如果要切換 spark 版本的話,最好選 patch version 非 0 的版本,因為一般類似于 1.2.0, … 1.6.0 這樣的版本是屬于大更新的,有可能會有一些隱藏的 bug 或是不穩(wěn)定性存在,所以最好選擇 1.2.1, … 1.6.1 這樣的版本。
通過版本號的解釋說明,可以很容易了解到,spark2.1.1的發(fā)布時是針對大版本2.1做的一些bug修改,不會新增功能,也不會新增API,會比2.1.0版本更加穩(wěn)定。

6.driver的功能是什么?
答: 1)一個Spark作業(yè)運行時包括一個Driver進程,也是作業(yè)的主進程,具有main函數,并且有SparkContext的實例,是程序的人口點;2)功能:負責向集群申請資源,向master注冊信息,負責了作業(yè)的調度,,負責作業(yè)的解析、生成Stage并調度Task到Executor上。包括DAGScheduler,TaskScheduler。

7.spark的有幾種部署模式,每種模式特點?
1)本地模式
Spark不一定非要跑在hadoop集群,可以在本地,起多個線程的方式來指定。將Spark應用以多線程的方式直接運行在本地,一般都是為了方便調試,本地模式分三類
• local:只啟動一個executor
• local[k]:啟動k個executor
• local[*]:啟動跟cpu數目相同的 executor
2)standalone模式
分布式部署集群, 自帶完整的服務,資源管理和任務監(jiān)控是Spark自己監(jiān)控,這個模式也是其他模式的基礎,
3)Spark on yarn模式
分布式部署集群,資源和任務監(jiān)控交給yarn管理,但是目前僅支持粗粒度資源分配方式,包含cluster和client運行模式,cluster適合生產,driver運行在集群子節(jié)點,具有容錯功能,client適合調試,dirver運行在客戶端
4)Spark On Mesos模式。官方推薦這種模式(當然,原因之一是血緣關系)。正是由于Spark開發(fā)之初就考慮到支持Mesos,因此,目前而言,Spark運行在Mesos上會比運行在YARN上更加靈活,更加自然。用戶可選擇兩種調度模式之一運行自己的應用程序:
1) 粗粒度模式(Coarse-grained Mode):每個應用程序的運行環(huán)境由一個Dirver和若干個Executor組成,其中,每個Executor占用若干資源,內部可運行多個Task(對應多少個“slot”)。應用程序的各個任務正式運行之前,需要將運行環(huán)境中的資源全部申請好,且運行過程中要一直占用這些資源,即使不用,最后程序運行結束后,回收這些資源。
2) 細粒度模式(Fine-grained Mode):鑒于粗粒度模式會造成大量資源浪費,Spark On Mesos還提供了另外一種調度模式:細粒度模式,這種模式類似于現在的云計算,思想是按需分配。

8.Spark技術棧有哪些組件,每個組件都有什么功能,適合什么應用場景?
答:可以畫一個這樣的技術棧圖先,然后分別解釋下每個組件的功能和場景

1)Spark core:是其它組件的基礎,spark的內核,主要包含:有向循環(huán)圖、RDD、Lingage、Cache、broadcast等,并封裝了底層通訊框架,是Spark的基礎。
2)SparkStreaming是一個對實時數據流進行高通量、容錯處理的流式處理系統(tǒng),可以對多種數據源(如Kdfka、Flume、Twitter、Zero和TCP 套接字)進行類似Map、Reduce和Join等復雜操作,將流式計算分解成一系列短小的批處理作業(yè)。
3)Spark sql:Shark是SparkSQL的前身,Spark SQL的一個重要特點是其能夠統(tǒng)一處理關系表和RDD,使得開發(fā)人員可以輕松地使用SQL命令進行外部查詢,同時進行更復雜的數據分析
4)BlinkDB :是一個用于在海量數據上運行交互式 SQL 查詢的大規(guī)模并行查詢引擎,它允許用戶通過權衡數據精度來提升查詢響應時間,其數據的精度被控制在允許的誤差范圍內。
5)MLBase是Spark生態(tài)圈的一部分專注于機器學習,讓機器學習的門檻更低,讓一些可能并不了解機器學習的用戶也能方便地使用MLbase。MLBase分為四部分:MLlib、MLI、ML Optimizer和MLRuntime。
6)GraphX是Spark中用于圖和圖并行計算

9.Spark中Work的主要工作是什么?
答:主要功能:管理當前節(jié)點內存,CPU的使用狀況,接收master分配過來的資源指令,通過ExecutorRunner啟動程序分配任務,worker就類似于包工頭,管理分配新進程,做計算的服務,相當于process服務。需要注意的是:1)worker會不會匯報當前信息給master,worker心跳給master主要只有workid,它不會發(fā)送資源信息以心跳的方式給mater,master分配的時候就知道work,只有出現故障的時候才會發(fā)送資源。2)worker不會運行代碼,具體運行的是Executor是可以運行具體appliaction寫的業(yè)務邏輯代碼,操作代碼的節(jié)點,它不會運行程序的代碼的。

10.Spark為什么比mapreduce快?
答:1)基于內存計算,減少低效的磁盤交互;2)高效的調度算法,基于DAG;3)容錯機制Linage,精華部分就是DAG和Lingae

11.簡單說一下hadoop和spark的shuffle相同和差異?
答:1)從 high-level 的角度來看,兩者并沒有大的差別。 都是將 mapper(Spark 里是 ShuffleMapTask)的輸出進行 partition,不同的 partition 送到不同的 reducer(Spark 里 reducer 可能是下一個 stage 里的 ShuffleMapTask,也可能是 ResultTask)。Reducer 以內存作緩沖區(qū),邊 shuffle 邊 aggregate 數據,等到數據 aggregate 好以后進行 reduce() (Spark 里可能是后續(xù)的一系列操作)。
2)從 low-level 的角度來看,兩者差別不小。 Hadoop MapReduce 是 sort-based,進入 combine() 和 reduce() 的 records 必須先 sort。這樣的好處在于 combine/reduce() 可以處理大規(guī)模的數據,因為其輸入數據可以通過外排得到(mapper 對每段數據先做排序,reducer 的 shuffle 對排好序的每段數據做歸并)。目前的 Spark 默認選擇的是 hash-based,通常使用 HashMap 來對 shuffle 來的數據進行 aggregate,不會對數據進行提前排序。如果用戶需要經過排序的數據,那么需要自己調用類似 sortByKey() 的操作;如果你是Spark 1.1的用戶,可以將spark.shuffle.manager設置為sort,則會對數據進行排序。在Spark 1.2中,sort將作為默認的Shuffle實現。
3)從實現角度來看,兩者也有不少差別。 Hadoop MapReduce 將處理流程劃分出明顯的幾個階段:map(), spill, merge, shuffle, sort, reduce() 等。每個階段各司其職,可以按照過程式的編程思想來逐一實現每個階段的功能。在 Spark 中,沒有這樣功能明確的階段,只有不同的 stage 和一系列的 transformation(),所以 spill, merge, aggregate 等操作需要蘊含在 transformation() 中。
如果我們將 map 端劃分數據、持久化數據的過程稱為 shuffle write,而將 reducer 讀入數據、aggregate 數據的過程稱為 shuffle read。那么在 Spark 中,問題就變?yōu)樵趺丛?job 的邏輯或者物理執(zhí)行圖中加入 shuffle write 和 shuffle read 的處理邏輯?以及兩個處理邏輯應該怎么高效實現?
Shuffle write由于不要求數據有序,shuffle write 的任務很簡單:將數據 partition 好,并持久化。之所以要持久化,一方面是要減少內存存儲空間壓力,另一方面也是為了 fault-tolerance。

12.Mapreduce和Spark的都是并行計算,那么他們有什么相同和區(qū)別
答:兩者都是用mr模型來進行并行計算:
1)hadoop的一個作業(yè)稱為job,job里面分為map task和reduce task,每個task都是在自己的進程中運行的,當task結束時,進程也會結束。
2)spark用戶提交的任務成為application,一個application對應一個sparkcontext,app中存在多個job,每觸發(fā)一次action操作就會產生一個job。這些job可以并行或串行執(zhí)行,每個job中有多個stage,stage是shuffle過程中DAGSchaduler通過RDD之間的依賴關系劃分job而來的,每個stage里面有多個task,組成taskset有TaskSchaduler分發(fā)到各個executor中執(zhí)行,executor的生命周期是和app一樣的,即使沒有job運行也是存在的,所以task可以快速啟動讀取內存進行計算。
3)hadoop的job只有map和reduce操作,表達能力比較欠缺而且在mr過程中會重復的讀寫hdfs,造成大量的io操作,多個job需要自己管理關系。
spark的迭代計算都是在內存中進行的,API中提供了大量的RDD操作如join,groupby等,而且通過DAG圖可以實現良好的容錯。

13.RDD機制?
答:rdd分布式彈性數據集,簡單的理解成一種數據結構,是spark框架上的通用貨幣。
所有算子都是基于rdd來執(zhí)行的,不同的場景會有不同的rdd實現類,但是都可以進行互相轉換。
rdd執(zhí)行過程中會形成dag圖,然后形成lineage保證容錯性等。 從物理的角度來看rdd存儲的是block和node之間的映射。

14、spark有哪些組件?
答:主要有如下組件:
1)master:管理集群和節(jié)點,不參與計算。
2)worker:計算節(jié)點,進程本身不參與計算,和master匯報。
3)Driver:運行程序的main方法,創(chuàng)建spark context對象。
4)spark context:控制整個application的生命周期,包括dagsheduler和task scheduler等組件。
5)client:用戶提交程序的入口。

15、spark工作機制?
答:用戶在client端提交作業(yè)后,會由Driver運行main方法并創(chuàng)建spark context上下文。
執(zhí)行add算子,形成dag圖輸入dagscheduler,按照add之間的依賴關系劃分stage輸入task scheduler。 task scheduler會將stage劃分為task set分發(fā)到各個節(jié)點的executor中執(zhí)行。

16、spark的優(yōu)化怎么做?
答: spark調優(yōu)比較復雜,但是大體可以分為三個方面來進行,1)平臺層面的調優(yōu):防止不必要的jar包分發(fā),提高數據的本地性,選擇高效的存儲格式如parquet,2)應用程序層面的調優(yōu):過濾操作符的優(yōu)化降低過多小任務,降低單條記錄的資源開銷,處理數據傾斜,復用RDD進行緩存,作業(yè)并行化執(zhí)行等等,3)JVM層面的調優(yōu):設置合適的資源量,設置合理的JVM,啟用高效的序列化方法如kyro,增大off head內存等等

17.簡要描述Spark分布式集群搭建的步驟
1)準備linux環(huán)境,設置集群搭建賬號和用戶組,設置ssh,關閉防火墻,關閉seLinux,配置host,hostname
2)配置jdk到環(huán)境變量
3)搭建hadoop集群,如果要做master ha,需要搭建zookeeper集群
修改hdfs-site.xml,hadoop_env.sh,yarn-site.xml,slaves等配置文件
4)啟動hadoop集群,啟動前要格式化namenode
5)配置spark集群,修改spark-env.xml,slaves等配置文件,拷貝hadoop相關配置到spark conf目錄下
6)啟動spark集群。

18.什么是RDD寬依賴和窄依賴?
RDD和它依賴的parent RDD(s)的關系有兩種不同的類型,即窄依賴(narrow dependency)和寬依賴(wide dependency)。
1)窄依賴指的是每一個parent RDD的Partition最多被子RDD的一個Partition使用
2)寬依賴指的是多個子RDD的Partition會依賴同一個parent RDD的Partition

19.spark-submit的時候如何引入外部jar包
方法一:spark-submit –jars
根據spark官網,在提交任務的時候指定–jars,用逗號分開。這樣做的缺點是每次都要指定jar包,如果jar包少的話可以這么做,但是如果多的話會很麻煩。
命令:spark-submit --master yarn-client --jars .jar,.jar
方法二:extraClassPath
提交時在spark-default中設定參數,將所有需要的jar包考到一個文件里,然后在參數中指定該目錄就可以了,較上一個方便很多:
spark.executor.extraClassPath=/home/hadoop/wzq_workspace/lib/* spark.driver.extraClassPath=/home/hadoop/wzq_workspace/lib/*
需要注意的是,你要在所有可能運行spark任務的機器上保證該目錄存在,并且將jar包考到所有機器上。這樣做的好處是提交代碼的時候不用再寫一長串jar了,缺點是要把所有的jar包都拷一遍。

20.cache和pesist的區(qū)別
答:1)cache和persist都是用于將一個RDD進行緩存的,這樣在之后使用的過程中就不需要重新計算了,可以大大節(jié)省程序運行時間;2) cache只有一個默認的緩存級別MEMORY_ONLY ,cache調用了persist,而persist可以根據情況設置其它的緩存級別;3)executor執(zhí)行的時候,默認60%做cache,40%做task操作,persist最根本的函數,最底層的函數

二、選擇題

1.Spark 的四大組件下面哪個不是 (D )
A.Spark Streaming B. Mlib
C Graphx D.Spark R

2.下面哪個端口不是 spark 自帶服務的端口 (C )
A.8080 B.4040 C.8090 D.18080
備注:8080:spark集群web ui端口,4040:sparkjob監(jiān)控端口,18080:jobhistory端口

3.spark 1.4 版本的最大變化 (B )
A spark sql Release 版本 B .引入 Spark R
C DataFrame D.支持動態(tài)資源分配

4.Spark Job 默認的調度模式 (A )
A FIFO B FAIR
C 無 D 運行時指定

5.哪個不是本地模式運行的個條件 ( D)
A spark.localExecution.enabled=true
B 顯式指定本地運行
C finalStage 無父 Stage
D partition默認值

6.下面哪個不是 RDD 的特點 (C )
A. 可分區(qū) B 可序列化 C 可修改 D 可持久化

7.關于廣播變量,下面哪個是錯誤的 (D )
A 任何函數調用 B 是只讀的
C 存儲在各個節(jié)點 D 存儲在磁盤或 HDFS

8.關于累加器,下面哪個是錯誤的 (D )
A 支持加法 B 支持數值類型
C 可并行 D 不支持自定義類型

9.Spark 支持的分布式部署方式中哪個是錯誤的 (D )
A standalone B spark on mesos
C spark on YARN D Spark on local

10.Stage 的 Task 的數量由什么決定 (A )
A Partition B Job C Stage D TaskScheduler

11.下面哪個操作是窄依賴 (B )
A join B filter
C group D sort

12.下面哪個操作肯定是寬依賴 (C )
A map B flatMap
C reduceByKey D sample

13.spark 的 master 和 worker 通過什么方式進行通信的? (D )
A http B nio C netty D Akka

14 默認的存儲級別 (A )
A MEMORY_ONLY B MEMORY_ONLY_SER
C MEMORY_AND_DISK D MEMORY_AND_DISK_SER

15 spark.deploy.recoveryMode 不支持那種 (D )
A.ZooKeeper B. FileSystem
D NONE D Hadoop

16.下列哪個不是 RDD 的緩存方法 (C )
A persist() B Cache()
C Memory()

17.Task 運行在下來哪里個選項中 Executor 上的工作單元 (C )
A Driver program B. spark master
C.worker node D Cluster manager

18.hive 的元數據存儲在 derby 和 MySQL 中有什么區(qū)別 (B )
A.沒區(qū)別 B.多會話
C.支持網絡環(huán)境 D數據庫的區(qū)別

19.DataFrame 和 RDD 最大的區(qū)別 (B )
A.科學統(tǒng)計支持 B.多了 schema
C.存儲方式不一樣 D.外部數據源支持

20.Master 的 ElectedLeader 事件后做了哪些操作 (D )
A. 通知 driver B.通知 worker
C.注冊 application D.直接 ALIVE

相關文章

  • 大數據相關常見面試題與答案整理

    這篇文章主要介紹了大數據相關常見面試題與答案,總結分析了大數據相關的概念、技術、原理,需要的朋友可以參考下
    2019-10-21
  • 大數據spark精華面試題與參考答案集錦

    這篇文章主要介紹了大數據spark精華面試題與參考答案,整理總結了大數據spark面試中經常遇到的各類問題、概念與知識點,需要的朋友可以參考下
    2019-10-15
  • 大數據工程師面試題與參考答案集錦

    這篇文章主要介紹了大數據工程師面試題與參考答案,總結整理了大數據相關的基本概念、原理、知識點與注意事項,需要的朋友可以參考下
    2019-09-16
  • 大數據基礎面試題考點與知識點整理

    這篇文章主要介紹了大數據基礎面試題考點與知識點,總結整理了大數據常見的各種知識點、難點、考點以及相關注意事項,需要的朋友可以參考下
    2019-09-09
  • BAT面試中的大數據相關問題筆記

    這篇文章主要介紹了BAT面試中的大數據相關問題,涉及大數據相關的概念、原理、知識點與算法等問題,需要的朋友可以參考下
    2019-08-30
  • BAT大數據面試題與參考答案小結

    這篇文章主要介紹了BAT大數據面試題與參考答案,總結分析了大數據常見的各種知識點、疑難問題與參考答案,需要的朋友可以參考下
    2019-08-16
  • 數據挖掘常見面試題與參考答案簡析

    這篇文章主要介紹了數據挖掘常見面試題與參考答案,簡單分析了數據挖掘面試中比較常見的概念、知識點與解答技巧,需要的朋友可以參考下
    2019-10-17
  • 華為云計算電話面試與參考答案總結

    這篇文章主要介紹了華為云計算電話面試與參考答案,總結分析了華為云計算電話面試中所遇到的各種問題與相應的參考答案,包括云計算相關的常見概念、原理與考察知識點,需要的
    2019-10-12
  • 云計算常見面試題及參考答案集錦

    這篇文章主要介紹了云計算常見面試題及參考答案,涉及云計算常見的概念、原理、知識點與相關注意事項,需要的朋友可以參考下
    2019-10-11
  • 百度面試算法題目與參考答案總結

    這篇文章主要介紹了百度面試算法題目與參考答案,總結分析了位圖、排序、鏈表、二叉樹等操作的原理與相關實現技巧,需要的朋友可以參考下
    2019-09-06

最新評論