大數據hadoop面試經典題

0.在Hadoop中定義的主要公用InputFormat中,默認是哪一個?(A)

A、 TextInputFormat

B、 KeyValueInputFormat

C、 SequenceFileInputFormat

1. 下面哪個程序負責 HDFS 數據存儲?(C)

A.NameNode

B.JobTracker

C.DataNode

D.SecondaryNameNode

E.tasktracker

2.HDFS 中的 block 默認保存幾份?(A)

A.3 份

B.2 份

C.1 份

D.不確定

3.下列哪個程序通常與 NameNode 在一個節點啟動?(D)

A.SecondaryNameNode

B.DataNode

C.TaskTracker

D.JobTracker

hadoop的集群是基於master/slave模式,namenode和jobtracker屬於master,datanode和tasktracker屬於slave,master只有一個,而slave有多個.

SecondaryNameNode內存需求和NameNode在一個數量級上,所以通常secondary NameNode(運行在單獨的物理機器上)和 NameNode 運行在不同的機器上。

JobTracker對應於NameNode,TaskTracker對應於DataNode.

DataNode和NameNode是針對數據存放來而言的.JobTracker和TaskTracker是對於MapReduce執行而言的.

mapreduce中幾個主要概念,mapreduce 整體上可以分為這麼幾條執行線索:

jobclient,JobTracker與TaskTracker。

1、JobClient會在用戶端通過JobClient類將已經配置參數打包成jar文件的應用存儲到hdfs,並把路徑提交到Jobtracker,然後由JobTracker創建每一個Task(即 MapTask 和 ReduceTask) 並將它們分發到各個TaskTracker服務中去執行。

2、JobTracker是一master服務,軟件啟動之後JobTracker接收Job,負責調度Job的每一個子任務。task運行於TaskTracker上,並監控它們,如果發現有失敗的task就重新運行它。一般情況應該把JobTracker 部署在單獨的機器上。

3、TaskTracker是運行在多個節點上的slaver服務。TaskTracker主動與JobTracker通信,接收作業,並負責直接執行每一個任務。 TaskTracker 都需要運行在HDFS的DataNode上。

4.關於 SecondaryNameNode 哪項是正確的?(C)

A.它是 NameNode 的熱備

B.它是內存沒有要求

C.他的目的使幫助 NameNode 合併編輯日誌,減少 NameNode 啟動時間

D. SecondaryNameNode 應與 NameNode 部署到一個節點

5、HDFS 默認 BlockSize 是(B)

A.32MB

B.64MB

C.128MB

6、下列哪項通常是集群的最主要瓶頸(C)

A.CPU

B.網絡

C.磁盤 IO

D.內存

7、 下列哪項可以作為集群的管理?(ABC)

A.Puppet

B.Pdsh

C.ClouderaManager

D.Zookeeper

8、Client 端上傳文件的時候下列哪項正確?(BC)

A.數據經過 NameNode 傳遞 DataNode

B.Client 端將文件切分為 Block,依次上傳

C.Client 只上傳數據到一臺 DataNode,然後由 NameNode 負責 Block 複製工作

9、下列哪個是 Hadoop 運行的模式?(ABC)

A.單機版

B.偽分佈式

C.分佈式

10、列舉幾個hadoop生態圈的組件並做簡要描述

Zookeeper:是一個開源的分佈式應用程序協調服務,基於zookeeper可以實現同步服務,配置維護,命名服務。

Flume:一個高可用的,高可靠的,分佈式的海量日誌採集、聚合和傳輸的系統。

Hbase:是一個分佈式的、面向列的開源數據庫, 利用Hadoop HDFS作為其存儲系統.

Hive:基於Hadoop的一個數據倉庫工具,可以將結構化的數據檔映射為一張數據庫表,並提供簡單的sql 查詢功能,可以將sql語句轉換為MapReduce任務進行運行。

Sqoop:將一個關係型數據庫中的數據導進到Hadoop的 HDFS中,也可以將HDFS的數據導進到關係型數據庫中。

11、Hadoop中需要哪些配置文件,其作用是什麼?

1>.Core-site.xml:

(1)fs.defaultFS:hdfs://cluster1(域名),這裡的值指的是默認的HDFS路徑 。

(2)hadoop.tmp.dir:/export/data/hadoop_tmp,這裡的路徑默認是NameNode、DataNode、JournalNode等存放數據的公共目錄。用戶也可以自己單獨指定這三類節點的目錄。

(3)ha.zookeeper.quorum:hadoop101:2181,hadoop102:2181,hadoop103:2181,這裡是ZooKeeper集群的地址和端口。注意,數量一定是奇數,且不少於三個節點 。

2>.Hadoop-env.sh: 只需設置jdk的安裝路徑,如:export JAVA_HOME=/usr/local/jdk 本機j位置

3>.Hdfs-site.xml:

(1) dfs.replication:他決定著系統裡面的文件塊的數據備份個數,默認為3個。

(2) dfs.data.dir:datanode節點存儲在文件系統的目錄 。

(3) dfs.name.dir:是namenode節點存儲hadoop文件系統信息的本地系統路徑 。

4>.Mapred-site.xml:

(1)mapred.job.tracker:是jobtracker的主機和端口配置 。

12、 請列出正常工作的Hadoop集群中Hadoop都分別需要啟動哪些進程,它們的作用分別是什麼?

a) NameNode它是hadoop中的主服務器,管理文件系統名稱空間和對集群中存儲的文件的訪問,保存有 metadate.

b).SecondaryNameNode它不是namenode的冗餘守護進程,而是提供週期檢查點和清理任務。幫助NN合併editslog,減少NN啟動時間。

c)DataNode它負責管理連接到節點的存儲(一個集群中可以有多個節點)。每個存

儲數據的節點運行一個datanode守護進程。

d)ResourceManager(JobTracker)JobTracker負責調度DataNode上的工作。每個DataNode有一個TaskTracker,它們執行實際工作。

e) NodeManager(TaskTracker)執行任務

f) DFSZKFailoverController高可用時它負責監控NN的狀態,並及時的把狀態信息寫入ZK。它通過一個獨立線程週期性的調用NN上的一個特定接口來獲取NN的健康狀態。FC也有選擇誰作為Active NN的權利,因為最多隻有兩個節點,目前選擇策略還比較簡單(先到先得,輪換)。

g) JournalNode 高可用情況下存放namenode的editlog文件.

13、 HDFS的存儲機制?

寫入HDFS過程:

Client調用DistributedFileSystem對象的create方法,創建一個文件輸出流(FSDataOutputStream)對象,通過DistributedFileSystem對象與Hadoop集群的NameNode進行一次RPC遠程調用,在HDFS的Namespace中創建一個文件條目(Entry),該條目沒有任何的Block,通過FSDataOutputStream對象,向DataNode寫入數據,數據首先被寫入FSDataOutputStream對象內部的Buffer中,然後數據被分割成一個個Packet數據包,以Packet最小單位,基於Socket連接發送到按特定算法選擇的HDFS集群中一組DataNode(正常是3個,可能大於等於1)中的一個節點上,在這組DataNode組成的 Pipeline上依次傳輸 Packet, 這組 DataNode 組成的 Pipeline反方向上,發送 ack,最終由 Pipeline 中第一個 DataNode 節點將 Pipeline ack發送給Client,完成向文件寫入數據,Client 在文件輸出流(FSDataOutputStream)對象上調用close方法,關閉流.調用DistributedFileSystem對象的complete 方法,通知 NameNode 文件寫入成功.

讀取文件過程:

使用HDFS提供的客戶端開發庫Client,向遠程的Namenode發起RPC請求;Namenode會視情況返回文件的部分或全部block列表,對於每個block,Namenode都會返回有該block拷貝的DataNode地址;客戶端開發庫Client會選取離客戶端最接近的DataNode來讀取block;如果客戶端本身就是DataNode,那麼將從本地直接獲取數據.讀取完當前block的數據後,關閉與當前的DataNode連接,併為讀取下一個block尋找最佳的DataNode;當讀完列表的block後,且文件讀取還沒有結束,客戶端開發庫會繼續向Namenode獲取下一批的block列表。讀取完一個block都會進行 checksum 驗證,如果讀取 datanode 時出現錯誤,客戶端會通知 Namenode,然後再從下一個擁有該 block 拷貝的 datanode 繼續讀。

14、HDFS的存儲機制是什麼

客戶端通過把請求發送給NameNode active,NN會把文件切成1個到N個固定大小的block(一般默認為128M)並上傳到DN中。當所有block拷貝結束時,NN會立即通知客戶端上傳結果。但此時上傳的流程還未結束。DN還需要根據配置信息的副本數量,在不同的機架節點上通過局域網作數據拷貝工作。

15、Hadoop 是由哪幾個組件組成

hadoop 是一套處理大數據的生態系統,包括文件存儲HDFS ,計算框架MapReduce調度框架Yarn,數據庫Hbase ,數據倉庫Hive,協調與鎖服務zookeeper,關係型數 據庫與Hbase轉換工具sqoop,工作流模塊Oozie,機器學習模塊mahout.

16、hadoop 節點動態上線下線怎麼操作?

節點上線操作:

當要新上線數據節點的時候,需要把數據節點的名字追加在 dfs.hosts 文件中

一,關閉新增節點的防火牆

二,在 NameNode 節點的 hosts 文件中加入新增數據節點的 hostname

三,在每個新增數據節點的 hosts 文件中加入 NameNode 的 hostname

四,在 NameNode 節點上增加新增節點的 SSH 免密碼登錄的操作

五,在 NameNode 節點上的 dfs.hosts 中追加上新增節點的 hostname,

六,在其他節點上執行刷新操作:hdfs dfsadmin -refreshNodes

七,在 NameNode 節點上,更改 slaves 文件,將要上線的數據節點 hostname 追加

到 slaves 文件中

八,啟動 DataNode 節點

九,查看 NameNode 的監控頁面看是否有新增加的節點

節點下線操作:

一,修改/conf/hdfs-site.xml 文件

二,確定需要下線的機器,dfs.osts.exclude 文件中配置好需要下架的機器,這個是阻

止下架的機器去連接 NameNode

三,配置完成之後進行配置的刷新操作./bin/hadoop dfsadmin -refreshNodes,這個

操作的作用是在後臺進行 block 塊的移動

四,當執行三的命令完成之後,需要下架的機器就可以關閉了,可以查看現在集

群上連接的節點,正在執行 Decommission,會顯示:

Decommission Status : Decommission in progress 執行完畢後,會顯示:

Decommission Status : Decommissioned

五,機器下線完畢,將他們從 excludes 文件中移除。

17、Hadoop 中 job 和 task 之間的區別是什麼?

JobTracker 是一個 master 服務,軟件啟動之後 JobTracker 接收 Job,負責調度 Job

的每一個子任務 task 運行於 TaskTracker 上,並監控它們,如果發現有失敗的 task 就重新

運行它。一般情況應該把 JobTracker 部署在單獨的機器上。

TaskTracker 是運行在多個節點上的 slaver 服務。TaskTracker 主動與 JobTracker 通信,

接收作業,並負責直接執行每一個任務11.Hadoop 中通過拆分任務到多個節點運行來實現並行計

算,但某些節點運行較慢會拖慢整個任務的運行,Hadoop

採用何種機制應對這個情況?

答: 推測執行機制是 Hadoop 對“拖後腿”的任務的一種優化機制,當一個作業的某些任務

運行速度明顯慢於同作業的其他任務時,Hadoop 會在另一個節點 上為“慢任務”啟動一

個備份任務,這樣兩個任務同時處理一份數據,而 Hadoop 最終會將優先完成的那個任務

的結果作為最終結果,並將另一個任務殺掉。

18、mapred.job.tracker 命令的作用

連接jobtrack服務器的配置項,默認不寫是local,在本地運行,默認 map 數1,reduce數1。

19、如何決定一個job的map和reduce的數量?

splitSize=max{minSize,min{maxSize,blockSize}}

map數量由處理的數據分成的block數量決定default_num = total_size / split_size;

reduce的數量job.setNumReduceTasks(x);x 為reduce的數量.


分享到:


相關文章: