文章目錄
- 前言
- hadoop相關試題
- Hive相關試題
- Hbase相關試題
- Storm相關試題
- Spark相關試題
- Java基礎試題
- 其他
前言
最近由于要準備面試就開始提早看些面試、筆試題。以下是自己總結的一些經常出現、有價值的試題,包含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的設計模式,是基于nimbus、supervisor、work、task的方式運行代碼,由spout、bolt組成等等。 - 實時流式計算框架,幾個人,多長時間,細節問題,包括講flume ,kafka ,storm
的各個的組件組成,你負責那一塊,如果需要你搭建你可以完成么?(多次提到)
Spark相關試題
- 你覺得spark 可以完全替代hadoop 么?
spark會替代mr,不會代替yarn和hdfs. - 公司之后傾向用spark 開發,你會么(就用java代碼去寫)
會,spark使用scala開發的,在scala中可以隨意使用jdk的類庫,可以用java開發,但是最好用原生的scala開發,兼容性好,scala更靈活。 - 介紹下Spark
基于內存的分布式計算框架,基于Master、Worker、Executer模式運行,基本數據抽象為RDD(分布式數據集)。Spark Streaming類似于Apache Storm,用于流式數據的處理
Java基礎試題
請參考
http://blog.csdn.net/qq_16633405/article/details/79211002
其他
- 簡單介紹下flume、sqoop、azkaban
flume:分布式數據采集框架,核心校色agent由source、channel、sink組成。
sqoop:hadoop和關系型數據庫傳送數據的工具。
azkaban:工作流調度器。