大數據面試題整理


  • 1、fsimage和edit的區別?
大家都知道namenode與secondary namenode 的關系,當他們要進行數據同步時叫做checkpoint時就用到了fsimage與edit,fsimage是保存最新的元數據的信息,當fsimage數據到一定的大小事會去生成一個新的文件來保存元數據的信息,這個新的文件就是edit,edit會回滾最新的數據。

 

 

  • 2、列舉幾個配置文件優化? --發揮
1)Core-site.xml 文件的優化
    a、fs.trash.interval,默認值: 0;說明: 這個是開啟hdfs文件刪除自動轉移到垃圾箱的選項,值為垃圾箱文件清除時間。一般開啟這個會比較好,以防錯誤刪除重要文件。單位是              分鍾。
    b、dfs.namenode.handler.count,默認值:10;說明:hadoop系統里啟動的任務線程數,這里改為40,同樣可以嘗試該值大小對效率的影響變化進行最合適的值的設定。
    c、mapreduce.tasktracker.http.threads,默認值:40;說明:map和reduce是通過http進行數據傳輸的,這個是設置傳輸的並行線程數。

 

 

  • 3、datanode 首次加入 cluster 的時候,如果 log 報告不兼容文件版本,那需要namenode 執行格式化操作,這樣處理的原因是?
  1)這樣處理是不合理的,因為那么 namenode 格式化操作,是對文件系統進行格式化,namenode 格式化時清空 dfs/name 下空兩個目錄下的所有文件,之后,會在目錄 dfs.name.dir 下創建文件。
  2)文本不兼容,有可能時 namenode 與 datanode 的 數據里的 namespaceID、clusterID 不一致,找到兩個 ID 位置,修改為一樣即可解決。

 

  • 4、MapReduce 中排序發生在哪幾個階段?這些排序是否可以避免?為什么?
  1)一個 MapReduce 作業由 Map 階段和 Reduce 階段兩部分組成,這兩階段會對數據排序,從這個意義上說,MapReduce 框架本質就是一個 Distributed Sort。
  2)在 Map 階段,Map Task 會在本地磁盤輸出一個按照 key 排序(采用的是快速排序)的文件(中間可能產生多個文件,但最終會合並成一個),在 Reduce 階段,每個 Reduce Task 會對收到的數據排序,這樣,數據便按照 Key 分成了若干組,之后以組為單位交給 reduce()處理。
  3)很多人的誤解在 Map 階段,如果不使用 Combiner便不會排序,這是錯誤的,不管你用不用 Combiner,Map Task 均會對產生的數據排序(如果沒有 Reduce Task,則不會排序,實際上 Map 階段的排序就是為了減輕 Reduce端排序負載)。
  4)由於這些排序是 MapReduce 自動完成的,用戶無法控制,因此,在hadoop 1.x 中無法避免,也不可以關閉,但 hadoop2.x 是可以關閉的。

 

  • 5、hadoop的優化?
  1)優化的思路可以從配置文件和系統以及代碼的設計思路來優化
  2)配置文件的優化:調節適當的參數,在調參數時要進行測試
  3)代碼的優化:combiner的個數盡量與reduce的個數相同,數據的類型保持一致,可以減少拆包與封包的進度
  4)系統的優化:可以設置linux系統打開最大的文件數預計網絡的帶寬MTU的配置
  5)為 job 添加一個 Combiner,可以大大的減少shuffer階段的maoTask拷貝過來給遠程的   reduce task的數據量,一般而言combiner與reduce相同。
  6)在開發中盡量使用stringBuffer而不是string,string的模式是read-only的,如果對它進行修改,會產生臨時的對象,二stringBuffer是可修改的,不會產生臨時對象。
  7)修改一下配置:以下是修改 mapred-site.xml 文件
    a、修改最大槽位數:槽位數是在各個 tasktracker 上的 mapred-site.xml 上設置的,默認都是 2
<property>
<name>mapred.tasktracker.map.tasks.maximum</name>
<value>2</value>
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>2</value>
</property>
    b、調整心跳間隔:集群規模小於 300 時,心跳間隔為 300 毫秒
mapreduce.jobtracker.heartbeat.interval.min 心跳時間
mapred.heartbeats.in.second 集群每增加多少節點,時間增加下面的值
mapreduce.jobtracker.heartbeat.scaling.factor 集群每增加上面的個數,心跳增多少
    c、啟動帶外心跳
mapreduce.tasktracker.outofband.heartbeat 默認是 false
    d、配置多塊磁盤
mapreduce.local.dir
    e、配置 RPC hander 數目
mapred.job.tracker.handler.count 默認是 10,可以改成 50,根據機器的能力
    f、配置 HTTP 線程數目
tasktracker.http.threads 默認是 40,可以改成 100 根據機器的能力
    g、選擇合適的壓縮方式,以 snappy 為例:
<property>
<name>mapred.compress.map.output</name>
<value>true</value>
</property>
<property>
<name>mapred.map.output.compression.codec</name>
<value>org.apache.hadoop.io.compress.SnappyCodec</value>
</property>

 

 

 

  • 6.  請列出你所知道的 hadoop 調度器,並簡要說明其工作方法?
解答:

1.FIFO schedular:默認,先進先出的原則

2.Capacity schedular:計算能力調度器,選擇占用最小,優先級高的先執行,以此類推。

3.Fair schedular:公平調度,所有的job具有相同的資源。

 

 

 

 7.請簡述 mapreduce 中,combiner,partition 作用?

 

解答:

combiner是reduce的實現,在map端運行計算任務,減少map端的輸出數據。

作用就是優化。

但是combiner的使用場景是mapreduce的map輸出結果和reduce輸入輸出一樣。

 

partition的默認實現是hashpartition,是map端將數據按照reduce個數取余,進行分區,不同的reduce來copy自己的數據。

partition的作用是將數據分到不同的reduce進行計算,加快計算效果。

 

 

1、combiner最基本是實現本地key的聚合,對map輸出的key排序,value進行迭代。如下所示:

  map: (K1, V1) → list(K2, V2)

  combine: (K2, list(V2)) → list(K2, V2)

  reduce: (K2, list(V2)) → list(K3, V3)

  2、combiner還具有類似本地的reduce功能.

  例如hadoop自帶的wordcount的例子和找出value的最大值的程序,combiner和reduce完全一致。如下所示:

  map: (K1, V1) → list(K2, V2)

  combine: (K2, list(V2)) → list(K3, V3)

  reduce: (K3, list(V3)) → list(K4, V4)

  3、如果不用combiner,那么,所有的結果都是reduce完成,效率會相對低下。使用combiner,先完成的map會在本地聚合,提升速度。

  4、對於hadoop自帶的wordcount的例子,value就是一個疊加的數字,所以map一結束就可以進行reduce的value疊加,而不必要等到所有的map結束再去進行reduce的value疊加。

  combiner使用的合適,可以在滿足業務的情況下提升job的速度,如果不合適,則將導致輸出的結果不正確。

 

  • 8.  相比於 HDFS1.0,HDFS 2.0 最主要的改進在哪幾方面?

 

 

  •  9.MapReduce 2.0 中,MRAppMaster 主要作用是什么,MRAppMaster如何實現任務容錯的?

 

 

  • 10.  mr 的工作原理

解答:

Map—combiner—partition—sort—copy—sort—grouping—reduce

 

 

  •  11.hive 有哪些方式保存元數據,各有哪些特點?
解答:

1、內存數據庫derby,安裝小,但是數據存在內存,不穩定

2、mysql數據庫,數據存儲模式可以自己設置,持久化好,查看方便

 

  • 12.生產環境中為什么建議使用外部表?
解答:

1、因為外部表不會加載數據到hive,減少數據傳輸、數據還能共享。

2、hive不會修改數據,所以無需擔心數據的損壞

3、刪除表時,只刪除表結構、不刪除數據。

 

 
  • 13.假如一個分區的數據主部錯誤怎么通過hivesql刪除hdfs

解答:

alter table ptable drop partition (daytime='20140911',city='bj');

元數據,數據文件都刪除,但目錄daytime= 20140911還在


畫出你們的大數據架構,並說一下如和做到精准一次、小文件的規避


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM