大數據面試題整理彙總(持續更新ING)

Hadoop

1. 下列哪項通常是集羣的最主要瓶頸

A. CPU
B. 網絡
C. 磁盤IO
D. 內存

答案:C

2. 請列出正常工作的Hadoop集羣中Hadoop都分別需要啓動哪些進程,它們的作用分別是什麼?

  • NameNode
    • Hadoop的主服務器,管理文件系統的命名空間
    • 管理數據塊的映射信息(文件 --> BLOCK),(BLOCK --> DataNodes)
    • 處理客戶端的讀寫請求
  • SecondaryNameNode
    • 週期性備份fsimage
    • 輔助NameNode 合併 editslog
  • DataNode
    • 用於實際存儲數據塊
    • 執行數據塊的讀寫操作

3. HDFS讀寫流程

  1. HDFS寫流程

    • 發起請求 Client調用方法,對NameNode發起RPC請求
    • 切割文件 Client將待上傳文件分塊(64M,128M)
    • 異常檢查 NameNode檢查文件是否存在,Client是否有寫入權限
    • 獲取DataNode信息 NameNode 將最近的DataNode節點信息返回給Client
    • 建立寫入通道 Client與DataNode A通信,DataNode A 再一級一級給DataNode B,DataNode C。DataNode C會響應DataNode B,一級級返回響應。若均響應成功,則寫入通道確立
    • 寫入HDFS Client將文件以Packet形式寫入到DataNode A,同時DataNode A也會將數據寫入到DataNode B,DataNode C做備份
    • 重複寫入BLOCK 重複以上流程,將BLOCK全部寫入DataNode
    • 寫入完畢 DataNode 寫入完畢後,回傳消息給 Client
    • 定期更新元數據 DataNode會定期將BLOCK信息更新給NameNode,更新元數據
  2. HDFS讀流程

    • 發起請求 Client調用方法,對NameNode發起RPC請求
    • 異常檢查 檢查文件是否存在
    • 獲取元數據 NameNode回傳該文件對應元數據:1. 文件對應的BLOCK列表,2. 每個BLOCK對應的DataNode地址
    • 建立讀取通道 Client請求DataNode建立讀取通道
    • 讀取HDFS 以Packet形式回傳數據到Client

Spark

1. 對於Spark存在的數據傾斜問題你有什麼好的解決方法嗎?

  • 調整並行度分散Key(一般是增大並行度)
  • 自定義Partitioner(默認HashPartitioner)
  • 處理Key,如增加隨機的前綴

2. 簡述你所理解的 Spark 的 shuffle 過程

Shuffle產生於寬依賴處理時,Spark根據Key值分發到不同的Partition中進行處理(類似,根據撲克牌的點數分成多個牌堆)

3. Spark中的算子分爲哪兩類?

答:分爲Transformation,Action兩類算子個人理解Transformation類算子:map, filter, union等算子,會對RDD有類似變形,轉換的作用,但不產生輸出。 Action類算子:show, count, collect 將產生真正的結果輸出。一般情況下需要儘量避免Shuffle,因爲洗牌,發牌等流程將耗費較大的系統資源。儘量避免使用reduceByKey,Join等可能產生Shuffle的算子。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章