大數據技術面試題整理(持續更新)

基礎類

Java

  • Java中抽象類
    抽象類不能實例化,繼承的關鍵字仍然是extends,而且繼承過後可以不覆蓋方法,只是使用繼承而來的方法;
    抽象類和抽象方法必須用abstract關鍵字修飾;抽象類中不一定有抽象方法,但是有抽象方法的類必須定義爲抽象類;
    抽象類不能直接實例化;通過子類重寫方法多態方式實例化:它不是具體的;抽象類有構造方法,用於子類訪問父類數據的初始化;
    抽象類的子類: 如果不想重寫抽象方法,該子類必須是抽象類;成爲具體類則必須重寫所有的抽象方法;

平臺類

HDFS

  • 分佈式文件系統, 主:namenode,secondarynamenode; 從:datanode
  • NameNode
    管理元數據信息,給子節點分配任務(FSImage是主節點啓動時對整個文件系統的快照,Edits是修改記錄)
  • DataNode
    負責數據存儲,實時上報心跳給主節點
  • SecondaryNameNode
    首先,它定時到NameNode去獲取edit logs,並更新到fsimage上。一旦它有了新的fsimage文件,它將其拷貝回NameNode中。
    NameNode在下次重啓時會使用這個新的fsimage文件,從而減少重啓的時間。
  • Hdfs和Yarn有什麼區別
    Hdfs是分佈式文件存儲系統,是用來存儲文件的;
    Yarn是一個資源管理系統,可爲上層應用提供統一的資源管理和調度,它的引入爲集羣在利用率、資源統一管理和數據共享等方面帶來了巨大好處;
  • Hdfs的塊的大小多少能不能改成10M
    不能,假如數據塊設置過少,那需要讀取的數據塊就比較多,由於數據塊在硬盤上非連續存儲,普通硬盤因爲需要移動磁頭,所以隨機尋址較慢,讀越多的數據塊就增大了總的硬盤尋道時間。
    當硬盤尋道時間比io時間還要長的多時,那硬盤尋道時間就成了系統的一個瓶頸.
  • Hive中的內表和外表的區別
    在刪除內部表的時候,Hive將會把屬於表的元數據和數據全部刪掉;
    而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的;
  • hdfs 讀寫流程
    在這裏插入圖片描述

YARN

  • 分佈式資源管理系統,用於同一管理集羣中的資源
  • 主:ResourceManager, 從:NodeManager

MapReduce

  • MapReduce的shuffle過程
    • 從Map產生輸出開始到Reduce取得數據作爲輸入之前的過程稱作shuffle。
    • Collect階段: 將MapTask的結果輸出到默認大小爲100M的環形緩衝區,保存的是key/value,Partition分區信息等
    • Spill階段: 當內存中的數據量達到一定的閥值的時候,就會將數據寫入本地磁盤,在將數據寫入磁盤之前需要對數據進行一次排序的操作,如果配置了combiner,還會將有相同分區號和key的數據進行排序。
    • Merge階段: 把所有溢出的臨時文件進行一次合併操作,以確保一個MapTask最終只產生一箇中間數據文件.
    • Copy階段: ReduceTask啓動Fetcher線程到已經完成MapTask的節點上覆制一份屬於自己的數據,這些數據默認會保存在內存的緩衝區中,當內存的緩衝區達到一定的閥值的時候,就會將數據寫到磁盤之上。
    • Merge階段: 在ReduceTask遠程複製數據的同時,會在後臺開啓兩個線程對內存到本地的數據文件進行合併操作。
  • MapReduce的Partition和Combine有什麼區別
    • combine: 分爲map端和reduce端,作用是把同一個key的鍵值對合並在一起,可以自定義,該類的主要功能是合併相同的key鍵
    • partition: 是分割map每個節點的結果,按照key分別映射給不同的reduce,也是可以自定義的,partition的作用就是把這些數據歸類

Zookeeper

  • Zookeeper是開源的分佈式應用協調系統;官方定義: ZooKeeper: A Distributed Coordination Service for Distributed Applications
  • 主:QuorumPeerMain

Hive

Hbase

  • 主:HMaster,HRegionserver 從: Region
  • 分佈式數據倉庫,本質是數據分析工具,把Hive SQL 解釋成 MapReduce來執行.
    • Hive中的表爲純邏輯表,僅僅對錶的元數據進行定義。Hive沒有物理存儲的功能,它完全依賴HDFS和MapReduce。HBase表則是物理表,適合存放非結構化的數據。
    • Hive是在MapReduce的基礎上對數據進行處理;而HBase爲列模式,這樣使得對海量數據的隨機訪問變得可行。
    • HBase的存儲表存儲密度小,因而用戶可以對行定義成不同的列;而Hive是邏輯表,屬於稠密型,即定義列數,每一行對列數都有固定的數據。
    • Hive使用Hadoop來分析處理數據,而Hadoop系統是批處理系統,所以數據處理存在延時的問題;而HBase是準實時系統,可以實現數據的實時查詢。
    • Hive沒有row-level的更新,它適用於大量append-only數據集(如日誌)的批任務處理。而基於HBase的查詢,支持和row-level的更新。
    • Hive全面支持SQL,一般可以用來進行基於歷史數據的挖掘、分析。而HBase不適用於有join,多級索引,表關係 複雜的應用場景。

Sqoop

  • Sqoop的底層原理
    是用來實現結構型數據(如關係數據庫)和Hadoop之間進行數據遷移的工具。使用MapReduce來提高併發和容錯能力.

Spark

  • 主:Master, 從:Worker

Kafka

  • Topic : 消息根據Topic進行歸類
  • Producer: 發送消息者
  • Consumer: 消息接受者
  • Broker: 每個kafka實例(server)
  • Zookeeper: 依賴集羣保存meta信息

Flume

  • Agent, Source, Channel, Sink
    在這裏插入圖片描述

數倉類

  • order by ,sort by ,destribute by,cluster by 區別

    • order by會對輸入做全局排序,因此只有一個Reducer(多個Reducer無法保證全局有序),然而只有一個Reducer,會導致當輸入規模較大時,消耗較長的計算時間
    • sort by不是全局排序,其在數據進入reducer前完成排序,sort by只會保證每個reducer的輸出有序,並不保證全局有序。sort by的數據只能保證在同一個reduce中的數據可以按指定字段排序。
    • distribute by是控制在map端如何拆分數據給reduce端的。hive會根據distribute by後面列,對應reduce的個數進行分發,默認是採用hash算法。sort by爲每個reduce產生一個排序文件。在有些情況下,你需要控制某個特定行應該到哪個reducer,這通常是爲了進行後續的聚集操作。distribute by剛好可以做這件事。因此,distribute by經常和sort by配合使 用
    • cluster by除了具有distribute by的功能外還兼具sort by的功能。但是排序只能是倒敘排序,不能指定排序規則爲ASC或者DESC。
  • where和having的區別

    • Where是一個約束聲明,使用Where來約束來自數據庫的數據,Where是在結果返回之前起作用的,且Where中不能使用聚合函數。
    • Having是一個過濾聲明,是在查詢返回結果集以後對查詢結果進行的過濾操作,在Having中可以使用聚合函數。
  • Hive中的內表和外表的區別
    在刪除內部表的時候,Hive將會把屬於表的元數據和數據全部刪掉;而刪除外部表的時候,Hive僅僅刪除外部表的元數據,數據是不會刪除的.

  • 分區表和分桶表有什麼區別

    • 分區就是分文件夾,在表文件夾下多一個文件夾,分區字段是虛擬的,用於標識文件,分區字段一定不是表中存 在的字段,否則會便宜報錯;
    • 分桶功能默認不開啓,需要手動開啓,分桶個數自定義,是相對於分區更細粒度的劃分,是分文件;

產品類

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