天天看點

大資料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

  CeraManager

  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 節點動态上線下線怎麼操作?

  節點上線操作:

  當要新上線資料節點的時候,需要把資料節點的名字追加在 dfss 檔案中

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

  二,在 NameNode 節點的 hosts 檔案中加入新增資料節點的 hostname

  三,在每個新增資料節點的 hosts 檔案中加入 NameNode 的 hostname

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

  五,在 NameNode 節點上的 dfss 中追加上新增節點的 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的數量.