1. 程式人生 > >大資料工程師面試題—1

大資料工程師面試題—1

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。

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來處理的資料集(或任務)必須具備這樣的特點:待處理的資料集可以分解成許多小的資料集,而且每一個小資料集都
可以完全並行地進行處理。

 

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函式。