錯題

1.簡單描述Shuffle過程環形緩衝區的做用?java

key,value從map()方法輸出,被outputcollector收集經過getpartitioner()方法獲取分區號,在進入環形緩衝區。默認狀況下,環形緩衝區大小值爲100MB。當map輸入的數據進入環形緩衝區的量達到80MB以上時,那麼開始執行溢寫過程,溢寫過程當中若是有其餘數據進入,那麼由剩餘的百分之20反向寫入。溢寫過程會根據key,value先進行分區,後進行排序,最終maptask溢寫文件通過歸併排序後落入本地磁盤,reduceTask將多個mapTask下相同分區的數據copy到不一樣的reduceTask中進行歸併排序後一次讀取一組數據給reduce()函數。node

2.HDFS默認的Block塊大小是多少?爲何塊的大小不能設置過小,也不能設置太大?sql

(1)默認的塊大小是128M,(2)由於HDFS的塊設置過小,會增長尋址時間,程序一直在找塊的開始位置;若是塊設置的太大,從磁盤傳輸數據的時間會明顯大於定位這個塊開始位置所需的時間。致使程序在處理這塊數據時,會很是慢。其實HDFS塊的大小設置主要取決於磁盤傳輸速率。編程

3.簡述Hdfs的默認副本策略?這樣作有什麼好處?緩存

(1)第一個副本在客戶端所處的節點上。若是客戶端在集羣外(意思就是執行上傳的服務器不屬於集羣的節點),則隨機再機架上選一個; (2)第二個副本和第一個副本位於相同機架隨機節點上; (3)第三個副本位於不一樣機架,隨機節點。 優勢:該策略減小了機架間的寫流量,一般能夠提升寫性能。機架故障的機會遠小於節點故障的機會。因此此策略不會影響數據的可靠性和可用性保證。安全

4.簡單描述你對Hadoop集羣SafeMode模式的理解?服務器

集羣處於安全模式,不能執行重要操做(寫操做),集羣屬於只讀狀態。可是嚴格來講,只是保證HDFS元數據信息的訪問,而不保證文件的訪問。集羣啓動完成後,自動退出安全模式, 若是集羣處於安全模式,想要完成寫操做,須要離開安全模式。網絡

(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式狀態)併發

(2)bin/hdfs dfsadmin -safemode enter (功能描述:進入安全模式狀態)app

(3)bin/hdfs dfsadmin -safemode leave (功能描述:離開安全模式狀態)

(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式狀態)。

對於全新建立的HDFS集羣,NameNode啓動後不會進入安全模式,由於沒有Block信息。 

5.用一句話總結Combiner的做用和意義,使用它有什麼前提?

Combiner的意義就是對每個MapTask的輸出進行局部彙總,以減少網絡傳輸量。

6.簡述HDFS的文件上傳流程?

1)客戶端經過Distributed FileSystem模塊向NameNode請求上傳文件,NameNode檢查目標文件是否已存在,父目錄是否存在。

2)NameNode返回是否能夠上傳。

3)客戶端請求第一個 Block上傳到哪幾個DataNode服務器上。

4)NameNode返回3個DataNode節點,分別爲dn一、dn二、dn3。

5)客戶端經過FSDataOutputStream模塊請求dn1上傳數據,dn1收到請求會繼續調用dn2,而後dn2調用dn3,將這個通訊管道創建完成。 6)dn一、dn二、dn3逐級應答客戶端。

7)客戶端開始往dn1上傳第一個Block(先從磁盤讀取數據放到一個本地內存緩存),以Packet爲單位,dn1收到一個Packet就會傳給dn2,dn2傳給dn3;dn1每傳一個packet會放入一個應答隊列等待應答。

8)當一個Block傳輸完成以後,客戶端再次請求NameNode上傳第二個Block的服務器。

8[判斷題]Hadoop 2.x版本中的數據塊副本數能夠設置爲1024( b )

A. 對

B. 錯

9[判斷題]NodeManager主動向ResourceManager發送心跳,namenode也是主動向datanode發送心跳(b  )

A. 對

B. 錯

解析:datanode向namenode發送心跳

18.下列哪些是對reduceTask階段任務正確理解(  )

A. 對多個mapTask任務輸出key,value,按照不一樣的分區經過網絡copy到不一樣的reduceTask節點處理。

B. 對多個mapTask任務的輸出進行合併、排序。再reduce函數中實現本身的邏輯,對輸入的key、value處理,轉換成新的key、value輸出。

C. outputformat把reducer輸出的key,value保存到文件中。

D. reduceTask階段不會根據key進行分組和排序

[答案]A,B,C

解析:d是會

21[多選題]下面對Combiner描述正確的是(  )

A. 合理利用Combiner能夠提升程序執行效率

B. Combiner的做用能夠減小對本地磁盤的訪問次數。

C. Combiner過程設置則執行,不然不執行,默認過程當中沒有執行Combiner

D. 任何狀況下咱們都可以使用Combiner,不會對業務又任何影響

[答案]A,B,C

解析:d用combiner的前提是不影響最終的業務邏輯

 

24[多選題]下列說法正確的是()

A. mapreduce整體上分爲maptask階段和reducetask階段

B. shfflue階段由maptask的後半部分和reducetask的前半部分組成

C. shfflue階段可能會形成數據傾斜

D. shfflue階段不會對數據進行排序和分區

[答案]A,B,C

解析:d是shfflue會對數據進行排序和分區

25[多選題]下列說法正確的是 ( )

A. inputformat階段會對文件進行切片,切片過程是物理上的切片

B. inputformat階段會對文件進行切片切片規則,單個文件切一片,當單個文件的大小超過128M的1.1倍時,默認按照128M進行切片

C. 切片的數量決定了maptask的數量,maptask任務並行執行

D. inputformat會將文件轉換爲key value輸出到mapper類的map()方法

[答案]B,C,D

26[多選題]關於hadoop的序列化,下列描述正確的是()

A. 序列化就是把內存中的對象,轉換成字節序列(或其餘數據傳輸協議)以便於存儲到磁盤(持久化)和網絡傳輸。

B. 使用hadoop的序列化時咱們必須實現Writable接口

C. hadoop序列化的優勢緊湊、快速、支持多語言操做,只對必要的數據進行序列化

D. hadoop序列化是一個重量級的序列化框架,會附帶不少額外的信息

[答案]A,B,C   

解析:D是java的序列化,Hadoop的序列化是把內存中的對象,轉換成字節序列,以便於存儲到磁盤和網絡傳輸。

27[多選題]下列描述正確的是( )

A. ReduceTask默認值就是1,因此輸出文件個數爲一個

B. 若是數據分佈不均勻,就有可能在Reduce階段產生數據傾斜

C. 具體多少個ReduceTask,須要根據集羣性能而定。

D. ReduceTask的數量越多越好,這樣處理數據執行的效率越高

[答案]A,B,C

解析:d中reducerTask的數量越多,處理數據執行效率會下降

29[單選題]下面描述正確的是(  )

A. NameNode是一箇中心服務器(master端),負責管理文件系統的名字空間、元數據的存儲、以及客戶端對文件的訪問

B. DataNode負責元數據操做,文件內容相關的數據流通過會DataNode.

C. 副本存放在那些DataNode上由NameNode和DataNode協商控制分配

D. DataNode全權管理數塊的存儲,接受心跳信號和塊狀態報告

[答案]A

 

38[單選題]Hadoop項目主要包括四個模塊,下面那個是描述錯誤(  )

A. Hadoop Common :爲其餘Hadoop模塊提供基礎設施,是其餘模塊的公共部分。

B. Hadoop DFS:高可靠、高吞吐量的分佈式文件系統,解決海量數據的存儲問題

C. Hadoop MapReduce:分佈式的離線並行計算框架,解決海量數據的分析和計算問題

D. Hadoop YARN:新的MapReduce框架,監控DFS

[答案]D

44[單選題]下面對fsimage和edits描述錯誤的是(  )

A. FsImage文件:HDFS文件系統元數據的一個永久性的檢查點,其中包含HDFS文件系統的全部目錄和文件inode的序列化信息。

B. Edits文件:存放HDFS文件系統的全部更新操做的路徑,文件系統客戶端執行的全部寫操做首先會被記錄到Edits文件中。

C. DataNode啓動時會加載fsimage和edits文件到內存.

D. SecondaryNode實時的輔助備份fsimage和edits,輔助NameNode,協助其完成元數據和編輯文件的合併工做

[答案]C

周總結

1.mapreduce定義和優缺點?
MapReduce是一個分佈式運算程序的編程框架,是用戶開發「基於Hadoop的數據分析應用」的核心框架
MapReduce核心功能是將用戶編寫的業務邏輯代碼和自帶默認組件整合成一個完整的分佈式運算程序,併發行在一個Hadoop集羣上。
優勢:
1).MapReduce易於編程
它簡單的實現一些接口,就能夠完成一個分佈式程序,這個分佈式程序能夠分佈到大量廉價的PC機器上運行。
2).良好的擴展性
當你的計算資源不能獲得知足的時候,你能夠經過簡單的增長機器來擴展它的計算能力。
3).高容錯性
其中一臺機器掛了,它能夠把上面的計算任務轉移到另外一個節點上運行,不至於這個任務運行失敗,並且這個過程不須要人工參與,而徹底是由Hadoop內部完成的。
4).適合PB級以上海量數據的離線處理
能夠實現上千臺服務器集羣併發工做,提供數據處理能力。
缺點
1)不擅長實時計算
MapReduce沒法像Mysql同樣,在毫秒或秒級返回結果。
2)不擅長流式計算
流式計算的輸入數據是動態的,而MapReduce的輸入數據是靜態的,不能動態變化。這是由於MapReduce自身的設計特色決定了數據源必須是靜態的。
3)不擅長DAG計算
多個應用程序存在依賴關係,後一個應用程序的輸入爲前一個的輸出。在這種狀況下,MapReduce並非不能作,而是使用後,每個MapReduce做業的輸出結果都會寫入磁盤,會形成大量的磁盤IO,致使性能很是低下。
2.mapreduce的數據類型
Java類型    Hadoop Writable類型
Boolean        BooleanWritable
Byte        ByteWritable
Int            IntWritable
Float        FloatWritable
Long        LongWritable
Double        DoubleWritable
String        Text
Map            MapWritable
Array        ArrayWritable

mapreducer工做流程:

 

 

 

 

 

 

 

1MapTask收集咱們的map()方法輸出的kv對,放到內存緩衝區中

2)從內存緩衝區不斷溢出本地磁盤文件,可能會溢出多個文件

3)多個溢出文件會被合併成大的溢出文件

4)在溢出過程及合併的過程當中,都要調用Partitioner進行分區和針對key進行排序

5ReduceTask根據本身的分區號,去各個MapTask機器上取相應的結果分區數據

6ReduceTask會取到同一個分區的來自不一樣MapTask的結果文件,ReduceTask會將這些文件再進行合併(歸併排序)

7)合併成大文件後,Shuffle的過程也就結束了,後面進入ReduceTask的邏輯運算過程(從文件中取出一個一個的鍵值對Group,調用用戶自定義的reduce()方法)

Shuffle機制

 

combiner合併

combiner意義:對每個MapTask的輸出進行局部彙總,以減小網絡傳輸量。

combiner前提:不能影響最終的業務邏輯。

 

MapTask工做機制

 

 

 

 

 

1Read階段:MapTask經過用戶編寫的RecordReader從輸入InputSplit解析出一個個key/value

2Map階段:該節點主要是將解析出的key/value交給用戶編寫map()函數處理,併產生一系列新的key/value

3Collect收集階段:在用戶編寫map()函數中,當數據處理完成後,通常會調用OutputCollector.collect()輸出結果。在函數內部,它會生成的key/value分區調用Partitioner並寫入一個環形內存緩衝區中。

4Spill階段:即當環形緩衝區滿後,MapReduce將數據寫到本地磁盤上,生成一個臨時文件。須要注意的是,將數據寫入本地磁盤以前,先要對數據進行一次本地排序,並在必要對數據進行合併壓縮等操做

ReduceTask工做機制

 

 

1Copy階段:ReduceTask各個MapTask上遠程拷貝一片數據,並針對某一片數據,若是其大小超過必定閾值,則寫到磁盤上,不然直接放到內存中。

2Merge階段:在遠程拷貝數據的同時,ReduceTask啓動了兩個後臺線程對內存和磁盤上的文件進行合併,以防止內存使用過多或磁盤上文件過多。

3Sort階段:按照MapReduce語義,用戶編寫reduce()函數輸入數據是按key進行彙集的一組數據。爲了key相同的數據聚在一塊兒,Hadoop採用了基於排序的策略。因爲各個MapTask已經實現對本身的處理結果進行了局部排序,所以,ReduceTask只需對全部數據進行一次歸併排序便可。

4Reduce階段:reduce()函數將計算結果寫到HDFS上。

自定義OutputFormat

1)自定義一個類繼承FileOutputFormat.

2)改寫RecordWriter,具體改寫輸出數據的方法writer();

 

自定義InputFormat

1)自定義一個類繼承FileInputFormat.

2)改寫RecordReducer,實現一次讀取一個完整文件封裝爲kv

3)在輸出時使用SequenceFileOutPutFormat輸出合併文件。

相關文章
相關標籤/搜索