Hadoop大數據面試題

一、hadoop操做命令mv 對比copy?算法

mv 性能更高,copy會改變時間屬性,mv不會。數據庫

 

二、操做HDFS有哪幾種方式?apache

JAVA API 、Web UI 、Shell數組

 

三、MR的執行流程(yarn的工做流程、做業執行過程)?緩存

客戶端提交一個做業,ResourceManager爲該做業分配第一個Container,並與對應的NodeManager通訊,要求NodeManager在這個Container內啓動做業的APPlicationMaster。安全

APPlicationMaster首先向ResourceManager註冊本身,而後便採用輪詢的方式經過RPC協議向ResourceManager申請資源。一旦成功便會與對應的NodeManager通訊,要求它啓動Container來運行Maptask和Reducetask。架構

NodeManager經過腳本啓動任務後,任務會經過RPC協議向APPlicationMaster報告本身的進度和執行狀況,客戶端能夠經過APPlicationMaster來獲知任務信息。app

任務完成後,APPlicationMaster向ResourceManager註銷並關閉本身。框架

四、yarn的幾個重要命令?機器學習

yarn application --list   列出任務

yarn application -kill 任務id  殺死任務

yarn application -status 任務id  查看任務狀態

 

五、MR1對比MR2?

MR1 :計算+資源調度  兩個進程 JobTracker  TaskTracker(Map Task  /Reduce Task)

MR2 :計算  寫代碼打成jar包提交到yarn上運行

 

六、Reduce任務開始運行時Map任務必定運行完了?

否 有些任務的Map任務和Reduce任務會共同運行的

 

七、一個MR任務完成,任務輸出目錄下輸出文件有多少個?

一個_SUCCESS文件,代表任務執行成功

一個Reduce任務對應一個輸出文件(假設輸出文件都小於128MB),Reudce任務數量能夠調整

故輸出目錄下文件個數爲Reduce任務的數量加一

 

八、Hive中控制Map數?

一個input split分片對應一個Map,默認狀況下,input split分片大小和hdfs上的blocksize同樣大,分片存儲的是否是數據自己,而是記錄數據的位置的數組和分片長度

小文件太多將小文件合併後下降Map數提升效率

文件大小合適但可能只有一兩個字段,每一個字段對應千萬條記錄,將該文件拆分,增長Map數提升效率。

 

九、Hive中控制Reduce數?

Reduce多少個輸出文件就有多少個

set hive.exec.reducers.bytes.per.reducer=100000000; 設置每一個Reduce處理的數據量爲100兆(默認爲1G),這意味着120兆的Map輸出文件會被拆分紅兩個Reduce

set mapred.reduce.tasks = 15; 設置任務的Reduce數量

 

十、什麼狀況下只有一個Reduce?

Reduce輸入數據量小於每一個Reduce處理的數據量、設置的Reduce數爲一、沒有groupby彙總、用了Order by 、有笛卡爾積

 

十一、shuffle過程?

shuffle在MapReduce中有,在spark中也有,其實他們兩個是不一樣的。
MapReduce中的shuffle是Map以後Reduce以前的一個操做。Map結束後數據會首先寫入一個環形緩衝區中,這個環形緩衝區默認100M,每次當環形緩衝區達到80%滿的時候,會先將數據進行一個二次快速排序(先按分區排,再按key排),而後將數據都會溢寫到磁盤上生成一個新文件,每個map對應的新文件可能有多個,在reduce開始前,會先將全部溢寫生成的小文件進行一個merge操做,將它們合併成一個大文件,在這個大文件內包括數據索引和數據自己。若是在Reducer以前有Combiner操做的話,數據送入到Reducer以前還會進行Combiner操做。
Spark與Hadoop之間的Shuffle過程大體相似,Spark的Shuffle的先後也各有一次聚合操做。可是也有很明顯的差異:Hadoop的shuffle過程是明顯的幾個階段:map,spill,merge,shuffle,sort,reduce等,是按照流程順次執行的,而Spark不同,由於Spark的Shuffle沒有這麼明確的功能階段,全部的這些功能都依靠算子完成。Spark與Hadoop的Shuffle之間第二個明顯的差異是:Hadoop的Shuffle是sort-based類型的,而Spark的Shuffle是hash-based類型的,這意味着數據進入Reduce端時不會進行預排序。

十二、hdfs文件讀流程?
a、客戶端打開dfs文件系統,dfs文件系統創建與NN的RPC通訊機制,NN查詢所需讀取文件的元信息並將其返回給客戶端。

    b、客戶端打開一個輸入流,輸入流經過文件元信息在DN上查找對應數據塊,查找完畢調用關閉輸入流並將數據塊拼成文件返回給客戶端。

 

1三、hdfs文件寫流程?
 a、客戶端打開dfs文件系統,dfs文件系統創建與NN的RPC通訊機制,向NN請求寫入文件,NN此時會建立一個空白文件條目。
      b、客戶端打開一個輸出流,輸出流對文件進行切塊,再按照特定算法將數據塊循環上傳到DN上(DN經過水平地址是數據塊到達冗餘度要求),上傳完畢關閉輸出流並刷新緩存。
      c、上傳完畢後客戶端經過DFS文件系統RPC通訊機制告知NN文件上傳完畢。

 

1四、談一談你對hadoop的瞭解。
對hadoop能夠分爲廣義上的和狹義上的兩種。
狹義上的hadoop只是個hadoop這個開源軟件自己,它包括支持其餘hadoop模塊的通用應用程序hadoop common、分佈式文件系統hdfs、做業調度和集羣資源管理框架yarn以及基於yarn的分佈式計算系統mapreduce。

廣義上的hadoop則知道的hadoop的生態圈,不只包括狹義上的hadoop,還包括可擴展的、支持大表的結構化數據存儲分佈式數據庫HBase,分佈式協調服務框架ZooKeeper、基於內存的數據處理框架Spark、數據倉庫軟件Hive、可擴展的機器學習和數據挖掘框架Mahout等。

 

1五、hadoop1.x和hadoop2.x的區別。
只要有兩個大的區別:
1、hadoop1.x中沒有提供單點故障的解決方案,一旦集羣的最高層管理JobTracker掛掉,那麼整個集羣就癱瘓了。而在hadoop2.x中,咱們能夠經過Zookeeper來實現hadoop的HA,這樣就完美地解決了單點故障問題。

2、hadoop1.x中做業調度與集羣的資源管理由MapReduce來完成,這樣就限制了hadoop的發展。在Hadoop2.x版本中,做業調度與集羣的資源管理功能從MapReduce中剝離出來造成了yarn,這就使得hadoop能被完美地兼容Spark和Storm。

 

1六、yarn的架構設計?

 

RM: 

        Resource Scheduler:爲應用程序分配資源,資源以Container爲單位,有多種Container,如FIFO Scheduler(先進先出,默認)、Capacity Scheduler(容器調度)、Fair Scheduler(公平調度,每一個任務有相同的優先級)

        APPlications Manager:管理yarn集羣的全部應用程序,有多個

NM: 

     Container:一個NM能夠運行多個Container,一個Container只能夠運行一個Container,能夠是APPcalication Master|map task | reduce task三者之一,Container中封裝有內存和CPU,分配資源以Container爲單位。

APPcalication Master:

       一個應用程序只有一個APPcalication Master,運行在Container之中,負責爲任務申請資源,監控任務的運行,任務失敗時重啓任務

 

1七、虛擬內存與物理內存

 

A.高度計算 容許掛 不容許慢時,將vm.swappiness 的值設置較大,使yarn使用虛擬內存的積極性下降

B.通常計算 容許慢 不容許掛時,將vm.swappiness 的值可設置較小,使yarn使用虛擬內存的積極性增長

 

1八、yarn的調優

 

 

1九、cdh版本的hadoop和apache版本的hadoop有什麼區別。
apache的hadoop是原生的hadoop,而cdh則是cloudera公司的hadoop發行版。CDH對Hadoop版本的
劃分很是清晰,Apache版本則混亂得多。CDH比Apache在兼容性,安全性,穩定性上有加強。CDH支持Kerberos安全認證,Apache則使用簡陋的用戶

名匹配認證.CDH支持多種方式安裝,Apache 只支持Tar包安裝。

 

 

20、hdfs的啓動順序。
進程方面:NN->DN->SNN->RM->NM

 

啓動過程:加載文件元信息->加載操做日誌->保存檢查點->進入安全模式->退出安全模式,啓動完成

 

2一、safemode?