大數據工程師面試題(一)

1.   選擇題
1.1.  下面哪一個程序負責 HDFS 數據存儲。
c)Datanode 
答案 C datanode
1.2.  HDfS 中的 block 默認保存幾份?
a)3 份 
答案 A 默認 3 份
1.3.  下列哪一個程序一般與 NameNode 在一個節點啓動?
d)Jobtracker
答案 D
1.4.  HDFS 默認 Block Size
c)128MB
答案:C
1.5.  下列哪項一般是集羣的最主要瓶頸
 c)磁盤 IO  
答案:C 磁盤
首先集羣的目的是爲了節省成本,用廉價的 pc 機,取代小型機及大型機。小型機和大型機有什麼特色?
1.cpu 處理能力強
2.內存夠大,因此集羣的瓶頸不多是 a 和 d
3.若是是互聯網有瓶頸,可讓集羣搭建內網。每次寫入數據都要經過網絡(集羣是內網),而後還要寫入 3 份數據,因此 IO 就會打折扣。
1.6.  關於 SecondaryNameNode 哪項是正確的?
c)它的目的是幫助 NameNode 合併編輯日誌,減小 NameNode 啓動時間
答案 C。
java

1.7.  下列哪項能夠做爲集羣的管理?
a)Puppet b)Pdsh  d)Zookeeper
答案 ABD
具體可查看什麼是 Zookeeper,Zookeeper 的做用是什麼,在 Hadoop 及 hbase 中具體做用是什麼。
1.8.  Client 端上傳文件的時候下列哪項正確
b)Client 端將文件切分爲 Block,依次上傳
答案 B
分析:Client 向 NameNode 發起文件寫入的請求。NameNode 根據文件大小和文件塊配置狀況,返回給 Client 它所管理部分 DataNode 的信息。
Client 將文件劃分爲多個 Block,根據 DataNode 的地址信息,按順序寫入到每個DataNode 塊中。具體查看HDFS 體系結構簡介及優缺點。
1.9.  下列哪一個是 Hadoop 運行的模式
a)單機版 b)僞分佈式 c)分佈式
答案 ABC 單機版,僞分佈式只是學習用的。
2.   面試題
2.1.   Hadoop的核心配置是什麼?
Hadoop的核心配置經過兩個xml文件來完成:1,hadoop-default.xml;2,hadoop-site.xml。這些文件都使用xml格式,所以每一個xml中都有一些屬性,
包括名稱和值,可是當下這些文件都已不復存在。
2.2.  那當下又該如何配置?
Hadoop如今擁有4個配置文件:1,core-site.xml;2,hdfs-site.xml;3,mapred-site.xml;4,yarn-site.xml。這些文件都保存在conf/子目錄下。
2.3.  「jps」命令的用處?
這個命令能夠檢查Namenode、Datanode、Task Tracker、 Job Tracker是否正常工做。
2.4.  mapreduce的原理?
MapReduce採用"分而治之"的思想,把對大規模數據集的操做,分發給一個主節點管理下的各個分節點共同完成,而後經過整合各個節點的中間結果,
獲得最終結果。簡單地說,MapReduce就是"任務的分解與結果的彙總"。
在Hadoop中,用於執行MapReduce任務的機器角色有兩個:一個是JobTracker;另外一個是TaskTracker,JobTracker是用於調度工做的,TaskTracker
是用於執行工做的。一個Hadoop集羣中只有一臺JobTracker。
在分佈式計算中,MapReduce框架負責處理了並行編程中分佈式存儲、工做調度、負載均衡、容錯均衡、容錯處理以及網絡通訊等複雜問題,把處理
過程高度抽象爲兩個函數:map和reduce,map負責把任務分解成多個任務,reduce負責把分解後多任務處理的結果彙總起來。
須要注意的是,用MapReduce來處理的數據集(或任務)必須具有這樣的特色:待處理的數據集能夠分解成許多小的數據集,並且每個小數據集都
能夠徹底並行地進行處理。
node

2.5.   HDFS存儲的機制?
2.5.1.   hdfs寫流程
流程:
 client連接namenode存數據
 namenode記錄一條數據位置信息(元數據),告訴client存哪。
 client用hdfs的api將數據塊(默認是64M)存儲到datanode上。
 datanode將數據水平備份。而且備份完將反饋client。
 client通知namenode存儲塊完畢。
 namenode將元數據同步到內存中。
 另外一塊循環上面的過程。
2.5.2.   讀流程
流程:
 client連接namenode,查看元數據,找到數據的存儲位置。
 client經過hdfs的api併發讀取數據。
 關閉鏈接。
2.6.  舉一個簡單的例子說明mapreduce是怎麼來運行的 ?
MapReduce運行的時候,會經過Mapper運行的任務讀取HDFS中的數據文件,而後調用本身的方法,處理數據,最後輸出。
Reducer任務會接收Mapper任務輸出的數據,做爲本身的輸入數據,調用本身的方法,最後輸出到HDFS的文件中。
Mapper任務的執行過程詳解
每一個Mapper任務是一個Java進程,它會讀取HDFS中的文件,解析成不少的鍵值對,通過咱們覆蓋的map方法處理後,
轉換爲不少的鍵值對再輸出。整個Mapper任務的處理過程又能夠分爲如下六個階段:
第一階段是把輸入文件按照必定的標準分片(InputSplit),每一個輸入片的大小是固定的。默認狀況下,輸入片(InputSplit)
的大小與數據塊(Block)的大小是相同的。若是數據塊(Block)的大小是默認值128MB,輸入文件有兩個,一個是32MB,一個是
172MB。那麼小的文件是一個輸入片,大文件會分爲兩個數據塊,那麼是兩個輸入片。一共產生三個輸入片。每個輸入片由
一個Mapper進程處理。這裏的三個輸入片,會有三個Mapper進程處理。
第二階段是對輸入片中的記錄按照必定的規則解析成鍵值對。有個默認規則是把每一行文本內容解析成鍵值對。「鍵」是每一
行的起始位置(單位是字節),「值」是本行的文本內容。
第三階段是調用Mapper類中的map方法。第二階段中解析出來的每個鍵值對,調用一次map方法。若是有1000個鍵值對,就會
調用1000次map方法。每一次調用map方法會輸出零個或者多個鍵值對。
第四階段是按照必定的規則對第三階段輸出的鍵值對進行分區。比較是基於鍵進行的。好比咱們的鍵表示省份(如北京、上海、
山東等),那麼就能夠按照不一樣省份進行分區,同一個省份的鍵值對劃分到一個區中。默認是隻有一個區。分區的數量就是Reducer
任務運行的數量。默認只有一個Reducer任務。
第五階段是對每一個分區中的鍵值對進行排序。首先,按照鍵進行排序,對於鍵相同的鍵值對,按照值進行排序。好比三個鍵值
對<2,2>、<1,3>、<2,1>,鍵和值分別是整數。那麼排序後的結果是<1,3>、<2,1>、<2,2>。若是有第六階段,那麼進入第六階段;
若是沒有,直接輸出到本地的Linux文件中。
第六階段是對數據進行歸約處理,也就是reduce處理。鍵相等的鍵值對會調用一次reduce方法。通過這一階段,數據量會減小。
歸約後的數據輸出到本地的linxu文件中。本階段默認是沒有的,須要用戶本身增長這一階段的代碼。
Reducer任務的執行過程詳解
每一個Reducer任務是一個java進程。Reducer任務接收Mapper任務的輸出,歸約處理後寫入到HDFS中,能夠分爲三個階段:
第一階段是Reducer任務會主動從Mapper任務複製其輸出的鍵值對。Mapper任務可能會有不少,所以Reducer會複製多個Mapper的輸出。
第二階段是把複製到Reducer本地數據,所有進行合併,即把分散的數據合併成一個大的數據。再對合並後的數據排序。
第三階段是對排序後的鍵值對調用reduce方法。鍵相等的鍵值對調用一次reduce方法,每次調用會產生零個或者多個鍵值對。
最後把這些輸出的鍵值對寫入到HDFS文件中。
在整個MapReduce程序的開發過程當中,咱們最大的工做量是覆蓋map函數和覆蓋reduce函數。
面試