隨著大數據技術的快速發展,Apache Spark作為主流的大數據處理框架,已成為眾多企業招聘大數據工程師時的必考內容。本文整理了Spark面試中的核心知識點和常見問題,幫助求職者系統準備。
一、Spark基礎概念
1. Spark與Hadoop MapReduce的主要區別是什么?
Spark基于內存計算,執行速度比MapReduce快10-100倍;提供豐富的API(Scala、Java、Python、R);支持流處理、機器學習等更多計算模式。
2. 解釋Spark的核心組件
? Spark Core:提供基本功能,包含任務調度、內存管理、容錯機制
? Spark SQL:用于處理結構化數據的模塊
? Spark Streaming:實時流數據處理
? MLlib:機器學習算法庫
? GraphX:圖計算庫
二、RDD核心知識點
1. 什么是RDD?其主要特性有哪些?
RDD(彈性分布式數據集)是Spark的基本數據結構,具有:
? 分區性:數據被分割成多個分區
? 容錯性:通過血緣關系實現數據重建
? 不可變性:創建后不能修改
? 并行操作:支持并行處理
2. RDD的兩種操作類型
? 轉換操作(Transformation):懶執行,如map、filter、groupByKey
? 行動操作(Action):觸發計算,如count、collect、saveAsTextFile
三、Spark運行架構
1. Driver Program和Executor的作用
Driver是應用程序的主進程,負責創建SparkContext、調度任務;Executor是工作節點上的進程,負責執行具體任務和存儲數據。
2. Spark任務執行流程
從RDD對象構建DAG圖 → DAGScheduler將DAG劃分為Stage → TaskScheduler將Task分發到Executor執行。
四、性能優化相關問題
1. 如何避免Spark中的shuffle操作?
盡量使用reduceByKey代替groupByKey,因為前者會在map端進行combine操作,減少數據傳輸。
2. 什么情況下會出現數據傾斜?如何解決?
當某個key的數據量遠大于其他key時會發生數據傾斜。解決方案包括:
? 使用隨機前綴進行雙重聚合
? 調整并行度
? 使用廣播變量
五、實戰場景題
1. 假設有1TB的日志文件,如何統計每個IP的訪問次數?
sc.textFile("hdfs://...")
.map(line => (line.split(" ")[0], 1))
.reduceByKey( + )
.saveAsTextFile("output_path")
2. 如何實現Spark Streaming實時統計每5分鐘的PV?
使用window操作,設置窗口長度為5分鐘,滑動間隔為5分鐘。
六、進階問題
1. Spark SQL中DataFrame和Dataset的區別
DataFrame是Dataset[Row]的類型別名,Dataset是強類型的數據集合。
2. Spark on YARN的兩種部署模式
? Client模式:Driver在客戶端運行
? Cluster模式:Driver在YARN集群中運行
備考建議:
除了掌握理論知識外,建議實際編寫Spark代碼,理解不同操作的執行原理。同時關注Spark 3.x的新特性,如動態分區裁剪、自適應查詢執行等優化功能。面試時要準備好項目經驗分享,展示解決實際問題的能力。