大資料面試題總結(附答案)
目錄
最近由於要準備面試就開始提早看些面試、筆試題。以下是自己總結的一些經常出現、有價值的試題,包含hadoop、hive、hbase、storm、spark等。答案僅供參考,如有錯誤,請指出。試題不定時更新。
hadoop相關試題
- MapTask並行機度是由什麼決定的?
由切片數量決定的。 - MR是幹什麼的?
MR將使用者編寫的業務邏輯程式碼和自帶的預設元件結合起來組成一個完整的分散式應用程式放到hadoop叢集上執行。 - MR的例項程序:
driver(mr的job提交客戶端)
MRAppMaster
MapTask
ReduceTask - combiner和partition的作用:
combiner的意義就是對每一個maptask的輸出進行區域性彙總,以減小網路傳輸量
partition的預設實現是hashpartition,是map端將資料按照reduce個數取餘,進行分割槽,不同的reduce來copy自己的資料。
partition的作用是將資料分到不同的reduce進行計算,加快計算效果。 - 什麼是shuffle
map階段處理的資料如何傳遞給reduce階段,是mapreduce框架中最關鍵的一個流程,這個流程就叫shuffle;
shuffle: 洗牌、發牌——(核心機制:資料分割槽,排序,快取);
具體來說:就是將maptask輸出的處理結果資料,分發給reducetask,並在分發的過程中,對資料按key進行了分割槽和排序; - MR原理(詳細解釋參照:MR執行原理剖析):
InputFormat來讀取資料,按行讀取,返回KV值傳到map方法中,
context.write方法將處理後資料輸出到outputCollector中,
當outputCollector中的資料累計到一定數量後再將資料傳到記憶體的環形緩衝區做處理,
當環形緩衝區中的資料累積到一定數量後再將資料通過Splier多次溢位到本地磁碟的多個檔案中,期間會對各個溢位的資料進行分割槽、排序
然後對多個檔案進行merge(歸併排序)形成一個輸出結果大檔案
ruduceTask根據自己的分割槽號去各個mapTask機器上取輸出結果檔案
將得到的各個結果檔案進行merge,然後進入reduce階段,
context.write將最終結果輸出到outPutformat上,進而輸出到本地檔案中。 - 舉一個簡單的例子說明mapreduce是怎麼來執行的 ?
wd例子。詳細解釋參考:Wd詳解 - 什麼是yarn?
Yarn是一個資源排程平臺,負責為運算程式提供伺服器運算資源,相當於一個分散式的作業系統平臺,而mapreduce等運算程式則相當於運行於作業系統之上的應用程式。 namenode的safemode是怎麼回事?如何才能退出safemode?
namenode在剛啟動的時候元資料只有檔案塊資訊,沒有檔案所在datanode的資訊,需要datanode自己向namenode彙報。如果namenode發現datanode彙報的檔案塊資訊沒有達到namenode記憶體中所有檔案塊的總閾值的一個百分比,namenode就會處於safemode。
只有達到這個閾值,namenode才會推出safemode。也可手動強制退出。secondarynamenode的主要職責是什麼?簡述其工作機制
sn的主要職責是執行checkpoint操作
每隔一段時間,會由secondary namenode將namenode上積累的所有edits和一個最新的fsimage下載到本地,並載入到記憶體進行merge(這個過程稱為checkpoint)- 如果namenode宕機,datanode節點是否也會跟著掛掉?
否 - 一個datanode 宕機,怎麼一個流程恢復?
Datanode宕機了後,如果是短暫的宕機,可以實現寫好指令碼監控,將它啟動起來。如果是長時間宕機了,那麼datanode上的資料應該已經被備份到其他機器了,
那這臺datanode就是一臺新的datanode了,刪除他的所有資料檔案和狀態檔案,重新啟動 - hadoop 的 namenode 宕機,怎麼解決?
先分析宕機後的損失,宕機後直接導致client無法訪問,記憶體中的元資料丟失,但是硬碟中的元資料應該還存在,如果只是節點掛了,
重啟即可,如果是機器掛了,重啟機器後看節點是否能重啟,不能重啟就要找到原因修復了。
但是最終的解決方案應該是在設計叢集的初期就考慮到這個問題,做namenode的HA。 簡述hadoop安裝
改IP,修改Host檔案;
裝JDK配置環境變數;
裝Hadoop配置環境變數;
修改hadoop的配置檔案如core-site、marp-site、yarn-site、dfs-site等;
namenode進行格式化;
start-all;請列出hadoop正常工作時要啟動那些程序,並寫出各自的作用。
namenode:管理叢集並記錄datanode的元資料,相應客戶端的請求。
seconder namenode:對namenode一定範圍內的資料做一份快照性備份。
datanode:儲存資料。
jobTracker:管理客戶端提交的任務,並將任務分配給TaskTracker。
TaskTracker:執行各個Task。JobTracker和TaskTracker的功能
JobTracker是一個master服務,軟體啟動之後JobTracker接收Job,負責排程Job的每一個子任務task運行於TaskTracker上,
並監控它們,如果發現有失敗的task就重新執行它。一般情況應該把JobTracker部署在單獨的機器上。
TaskTracker是執行在多個節點上的slaver服務。TaskTracker主動與JobTracker通訊,接收作業,並負責直接執行每一個任務。用mapreduce怎麼處理資料傾斜問題?
資料傾斜:map /reduce程式執行時,reduce節點大部分執行完畢,但是有一個或者幾個reduce節點執行很慢,導致整個程式的處理時間很長,
這是因為某一個key的條數比其他key多很多(有時是百倍或者千倍之多),這條key所在的reduce節點所處理的資料量比其他節點就大很多,
從而導致某幾個節點遲遲執行不完,此稱之為資料傾斜。
解決:自己實現partition類,用key和value相加取hash值。Mapreduce 的 map 數量 和 reduce 數量 怎麼確定 ,怎麼配置?
map的數量有資料塊決定,reduce數量隨便配置。hdfs的體系結構
hdfs有namenode、secondraynamenode、datanode組成。
namenode負責管理datanode和記錄元資料
secondraynamenode負責合併日誌
datanode負責儲存資料說下對hadoop 的一些理解,包括哪些元件
詳談hadoop的應用,包括的元件分為三類,分別說明hdfs,yarn,mapreduce。一些傳統的hadoop 問題,mapreduce 他就問shuffle 階段,你怎麼理解的
Shuffle意義在於將不同map處理後的資料進行合理分配,讓reduce處理,從而產生了排序、分割槽。NameNode 負責管理 metadata,client 端每次讀寫請求,它都會從磁碟中讀取或則會寫入 metadata資訊並反饋client 端。(錯誤)
修改後分析:
NameNode 不需要從磁碟讀取 metadata,所有資料都在記憶體中,硬碟上的只是序列化的結果,只有每次
namenode 啟動的時候才會讀取。
Hive相關試題
你的資料庫是不是很大麼,有沒有分表,分割槽,你是怎麼實現的
hive內部表和外部表的區別
內部表:載入資料到hive所在的hdfs目錄,刪除時,元資料和資料檔案都刪除
外部表:不載入資料到hive所在的hdfs目錄,刪除時,只刪除表結構。分桶的作用
最大的作用是提高join的效率。(1)獲得更高的查詢處理效率。(2)使取樣(sampling)更高效。Hive 你們用的是外部表還是內部表,有沒有寫過UDF。
UDF:
1、寫對應的java程式碼自定義函式的邏輯
2、將程式碼打成jar包上傳到hive
3、在hive建立臨時函式與對應的class類相關聯
4、在hive中呼叫臨時函式。
Hbase相關試題
- hbase的rowkey怎麼建立好?列族怎麼建立比較好?(重點)
hbase儲存時,資料按照Row key的字典序(byte order)排序儲存。設計key時,要充分利用排序儲存這個特性,將經常一起讀取的行儲存放到一起。(位置相關性)
一個列族在資料底層是一個檔案,所以將經常一起查詢的列放到一個列族中,列族儘量少,減少檔案的定址時間。 - Redis,傳統資料庫,hbase,hive 每個之間的區別?(問的非常細)
redis:分散式快取,強調快取,記憶體中資料
傳統資料庫:注重關係
hbase:列式資料庫,無法做關係資料庫的主外來鍵,用於儲存海量資料,底層基於hdfs
hive:資料倉庫工具,底層是mapreduce。不是資料庫,不能用來做使用者的互動儲存 - hdfs 和 hbase 各自使用場景。
整理總結:
首先一點需要明白:Hbase 是基於 HDFS 來儲存的。
HDFS:
1、一次性寫入,多次讀取。
2、保證資料的一致性。
3、主要是可以部署在許多廉價機器中,通過多副本提高可靠性,提供了容錯和恢復機制。
Hbase:
1、瞬間寫入量很大,資料庫不好支撐或需要很高成本支撐的場景。
2、資料需要長久儲存,且量會持久增長到比較大的場景
3、hbase 不適用與有 join,多級索引,表關係複雜的資料模型
4、大資料量 (100s TB 級資料) 且有快速隨機訪問的需求。
如:淘寶的交易歷史記錄。資料量巨大無容置疑,面向普通使用者的請求必然要即時響應。
5、容量的優雅擴充套件
大資料的驅使,動態擴充套件系統容量的必須的。例如:webPage DB。
6、業務場景簡單,不需要關係資料庫中很多特性(例如交叉列、交叉表,事務,連線等等)
7、優化方面:合理設計 rowkey。因為 hbase 的查
Storm相關試題
- 公司技術選型可能利用storm 進行實時計算,講解一下storm
描述下storm的設計模式,是基於work、excutor、task的方式執行程式碼,由spout、bolt組成等等。 - 實時流式計算框架,幾個人,多長時間,細節問題,包括講flume ,kafka ,storm
的各個的元件組成,你負責那一塊,如果需要你搭建你可以完成麼?(多次提到)
Spark相關試題
- 你覺得spark 可以完全替代hadoop 麼?
spark會替代mr,不會代替yarn和hdfs. - 公司之後傾向用spark 開發,你會麼(就用java程式碼去寫)
會,spark使用scala開發的,在scala中可以隨意使用jdk的類庫,可以用java開發,但是最好用原生的scala開發,相容性好,scala更靈活。