Hadoop大資料面試題全版本,必看跳槽指南!
以下資料來源於網際網路,很多都是面試者們去面試的時候遇到的問題,我對其中有的問題做了稍許修改了並回答了部分空白問題,有些考題出的的確不是很好,但也不乏有很好的題目,這些都是基於真實面試而來,希望對即將面試或想繼續學習hadoop,大資料等方向的朋友有所幫助!
1.0 簡要描述如何安裝配置apache的一個開源hadoop,只描述即可,無需列出具體步驟,列出具體步驟更好。
1使用root賬戶登入
2 修改IP
3 修改host主機名
4 配置SSH免密碼登入
5 關閉防火牆
6 安裝JDK
6 解壓hadoop安裝包
7 配置hadoop的核心檔案 hadoop-env.sh,core-site.xml , mapred-site.xml , hdfs-site.xml
8 配置hadoop環境變數
9 格式化 hadoop namenode-format
10 啟動節點start-all.sh
2.0 請列出正常的hadoop叢集中hadoop都分別需要啟動 哪些程式,他們的作用分別都是什麼,請儘量列的詳細一些。
答:namenode:負責管理hdfs中檔案塊的後設資料,響應客戶端請求,管理datanode上檔案block的均衡,維持副本數量
Secondname:主要負責做checkpoint操作;也可以做冷備,對一定範圍內資料做快照性備份。
Datanode:儲存資料塊,負責客戶端對資料塊的io請求
Jobtracker :管理任務,並將任務分配給 tasktracker。
Tasktracker: 執行JobTracker分配的任務。
Resourcemanager
Nodemanager
Journalnode
Zookeeper
Zkfc
3.0請寫出以下的shell命令
(1)殺死一個job
(2)刪除hdfs上的 /tmp/aaa目錄
(3)加入一個新的儲存節點和刪除一個節點需要執行的命令
答:(1)hadoop job –list 得到job的id,然後執 行 hadoop job -kill jobId就可以殺死一個指定jobId的job工作了。
(2)hadoopfs -rmr /tmp/aaa
(3) 增加一個新的節點在新的幾點上執行
Hadoop daemon.sh start datanode
Hadooop daemon.sh start tasktracker/nodemanager
下線時,要在conf目錄下的excludes檔案中列出要下線的datanode機器主機名
然後在主節點中執行 hadoop dfsadmin -refreshnodes à下線一個datanode
刪除一個節點的時候,只需要在主節點執行
hadoop mradmin -refreshnodes ---à下線一個tasktracker/nodemanager
4.0 請列出你所知道的hadoop排程器,並簡要說明其工作方法
答:Fifo schedular :預設,先進先出的原則
Capacity schedular :計算能力排程器,選擇佔用最小、優先順序高的先執行,依此類推。
Fair schedular:公平排程,所有的 job 具有相同的資源。
5.0 請列出你在工作中使用過的開發mapreduce的語言
答:java,hive,(python,c++)hadoop streaming
6.0 當前日誌取樣格式為
a , b , c , d
b , b , f , e
a , a , c , f
請你用最熟悉的語言編寫mapreduce,計算第四列每個元素出現的個數
答:
public classWordCount1 {
public static final String INPUT_PATH ="hdfs://hadoop0:9000/in";
public static final String OUT_PATH ="hdfs://hadoop0:9000/out";
public static void main(String[] args)throws Exception {
Configuration conf = newConfiguration();
FileSystem fileSystem =FileSystem.get(conf);
if(fileSystem.exists(newPath(OUT_PATH))){}
fileSystem.delete(newPath(OUT_PATH),true);
Job job = newJob(conf,WordCount1.class.getSimpleName());
//1.0讀取檔案,解析成key,value對
FileInputFormat.setInputPaths(job,newPath(INPUT_PATH));
//2.0寫上自己的邏輯,對輸入的可以,value進行處理,轉換成新的key,value對進行輸出
job.setMapperClass(MyMapper.class);
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(LongWritable.class);
//3.0對輸出後的資料進行分割槽
//4.0對分割槽後的資料進行排序,分組,相同key的value放到一個集合中
//5.0對分組後的資料進行規約
//6.0對通過網路將map輸出的資料拷貝到reduce節點
//7.0 寫上自己的reduce函式邏輯,對map輸出的資料進行處理
job.setReducerClass(MyReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(LongWritable.class);
FileOutputFormat.setOutputPath(job,new Path(OUT_PATH));
job.waitForCompletion(true);
}
static class MyMapper extendsMapper{
@Override
protected void map(LongWritablek1, Text v1,
org.apache.hadoop.mapreduce.Mapper.Contextcontext)
throws IOException,InterruptedException {
String[] split =v1.toString().split("\t");
for(String words :split){
context.write(split[3],1);
}
}
}
static class MyReducer extends Reducer{
protected void reduce(Text k2,Iterable v2,
org.apache.hadoop.mapreduce.Reducer.Contextcontext)
throws IOException,InterruptedException {
Long count = 0L;
for(LongWritable time :v2){
count += time.get();
}
context.write(v2, newLongWritable(count));
}
}
}
7.0 你認為用java , streaming , pipe方式開發map/reduce , 各有哪些優點
就用過 java 和 hiveQL。
Java 寫 mapreduce 可以實現複雜的邏輯,如果需求簡單,則顯得繁瑣。
HiveQL 基本都是針對 hive 中的表資料進行編寫,但對複雜的邏輯(雜)很難進行實現。寫起來簡單。
8.0 hive有哪些方式儲存後設資料,各有哪些優點
三種:自帶內嵌資料庫derby,挺小,不常用,只能用於單節點
mysql常用
上網上找了下專業名稱:single user mode..multiuser mode...remote user mode
9.0 請簡述hadoop怎樣實現二級排序(就是對key和value雙排序)
第一種方法是,Reducer將給定key的所有值都快取起來,然後對它們再做一個Reducer內排序。但是,由於Reducer需要儲存給定key的所有值,可能會導致出現記憶體耗盡的錯誤。
第二種方法是,將值的一部分或整個值加入原始key,生成一個組合key。這兩種方法各有優勢,第一種方法編寫簡單,但併發度小,資料量大的情況下速度慢(有記憶體耗盡的危險),
第二種方法則是將排序的任務交給MapReduce框架shuffle,更符合Hadoop/Reduce的設計思想。這篇文章裡選擇的是第二種。我們將編寫一個Partitioner,確保擁有相同key(原始key,不包括新增的部分)的所有資料被髮往同一個Reducer,還將編寫一個Comparator,以便資料到達Reducer後即按原始key分組。
10.簡述hadoop實現jion的幾種方法
Map side join----大小表join的場景,可以藉助distributed cache
Reduce side join
11.0 請用java實現非遞迴二分查詢
12.0 請簡述mapreduce中的combine和partition的作用
答:combiner是發生在map的最後一個階段,其原理也是一個小型的reducer,主要作用是減少輸出到reduce的資料量,緩解網路傳輸瓶頸,提高reducer的執行效率。
partition的主要作用將map階段產生的所有kv對分配給不同的reducer task處理,可以將reduce階段的處理負載進行分攤
13.0 hive內部表和外部表的區別
Hive 向內部表匯入資料時,會將資料移動到資料倉儲指向的路徑;若是外部表,資料的具體存放目錄由使用者建表時指定
在刪除表的時候,內部表的後設資料和資料會被一起刪除,
而外部表只刪除後設資料,不刪除資料。
這樣外部表相對來說更加安全些,資料組織也更加靈活,方便共享源資料。
14. Hbase的rowKey怎麼建立比較好?列簇怎麼建立比較好?
答:
rowKey最好要建立有規則的rowKey,即最好是有序的。
經常需要批量讀取的資料應該讓他們的rowkey連續;
將經常需要作為條件查詢的關鍵片語織到rowkey中;
列族的建立:
按照業務特點,把資料歸類,不同類別的放在不同列族
15. 用mapreduce怎麼處理資料傾斜問題
本質:讓各分割槽的資料分佈均勻
可以根據業務特點,設定合適的partition策略
如果事先根本不知道資料的分佈規律,利用隨機抽樣器抽樣後生成partition策略再處理
16. hadoop框架怎麼來優化
可以從很多方面來進行:比如hdfs怎麼優化,mapreduce程式怎麼優化,yarn的job排程怎麼優化,hbase優化,hive優化。。。。。。。
17. hbase內部機制是什麼
Hbase是一個能適應聯機業務的資料庫系統
物理儲存:hbase的持久化資料是存放在hdfs上
儲存管理:一個表是劃分為很多region的,這些region分散式地存放在很多regionserver上
Region內部還可以劃分為store,store內部有memstore和storefile
版本管理:hbase中的資料更新本質上是不斷追加新的版本,通過compact操作來做版本間的檔案合併
Region的split
叢集管理:zookeeper + hmaster(職責) + hregionserver(職責)
18. 我們在開發分散式計算job的時候,是否可以去掉reduce階段
答:可以,例如我們的叢集就是為了儲存檔案而設計的,不涉及到資料的計算,就可以將mapReduce都省掉。
比如,流量運營專案中的行為軌跡增強功能部分
怎麼樣才能實現去掉reduce階段
去掉之後就不排序了,不進行shuffle操作了
19 hadoop中常用的資料壓縮演算法
Lzo
Gzip
Default
Snapyy
如果要對資料進行壓縮,最好是將原始資料轉為SequenceFile 或者 Parquet File(spark)
20. mapreduce的排程模式(題意模糊,可以理解為yarn的排程模式,也可以理解為mr的內部工作流程)
答: appmaster作為排程主管,管理maptask和reducetask
Appmaster負責啟動、監控maptask和reducetask
Maptask處理完成之後,appmaster會監控到,然後將其輸出結果通知給reducetask,然後reducetask從map端拉取檔案,然後處理;
當reduce階段全部完成之後,appmaster還要向resourcemanager登出自己
21. hive底層與資料庫互動原理
Hive的查詢功能是由hdfs + mapreduce結合起來實現的
Hive與mysql的關係:只是借用mysql來儲存hive中的表的後設資料資訊,稱為metastore
22. hbase過濾器實現原則
可以說一下過濾器的父類(比較過濾器,專用過濾器)
過濾器有什麼用途:
增強hbase查詢資料的功能
減少服務端返回給客戶端的資料量
23. reduce之後資料的輸出量有多大(結合具體場景,比如pi)
Sca階段的增強日誌(1.5T---2T)
過濾性質的mr程式,輸出比輸入少
解析性質的mr程式,輸出比輸入多(找共同朋友)
24. 現場出問題測試mapreduce掌握情況和hive的ql語言掌握情況
25.datanode在什麼情況下不會備份資料
答:在客戶端上傳檔案時指定檔案副本數量為1
26.combine出現在哪個過程
答:shuffle過程中
具體來說,是在maptask輸出的資料從記憶體溢位到磁碟,可能會調多次
Combiner使用時候要特別謹慎,不能影響最後的邏輯結果
27. hdfs的體系結構
答:
叢集架構:
namenode datanode secondarynamenode
(active namenode ,standby namenode)journalnode zkfc
內部工作機制:
資料是分散式儲存的
對外提供一個統一的目錄結構
對外提供一個具體的響應者(namenode)
資料的block機制,副本機制
Namenode和datanode的工作職責和機制
讀寫資料流程
28. flush的過程
答:flush是在記憶體的基礎上進行的,首先寫入檔案的時候,會先將檔案寫到記憶體中,當記憶體寫滿的時候,一次性的將檔案全部都寫到硬碟中去儲存,並清空快取中的檔案,
29. 什麼是佇列
答:是一種排程策略,機制是先進先出
30. List與set的區別
答:List和Set都是介面。他們各自有自己的實現類,有無順序的實現類,也有有順序的實現類。
最大的不同就是List是可以重複的。而Set是不能重複的。
List適合經常追加資料,插入,刪除資料。但隨即取數效率比較低。
Set適合經常地隨即儲存,插入,刪除。但是在遍歷時效率比較低。
31.資料的三正規化
答:
第一正規化()無重複的列
第二正規化(2NF)屬性完全依賴於主鍵 [消除部分子函式依賴]
第三正規化(3NF)屬性不依賴於其它非主屬性 [消除傳遞依賴]
32.三個datanode中當有一個datanode出現錯誤時會怎樣?
答:
Namenode會通過心跳機制感知到datanode下線
會將這個datanode上的block塊在叢集中重新複製一份,恢復檔案的副本數量
會引發運維團隊快速響應,派出同事對下線datanode進行檢測和修復,然後重新上線
33.sqoop在匯入資料到mysql中,如何不重複匯入資料,如果存在資料問題,sqoop如何處理?
答:FAILED java.util.NoSuchElementException
此錯誤的原因為sqoop解析檔案的欄位與MySql資料庫的表的欄位對應不上造成的。因此需要在執行的時候給sqoop增加引數,告訴sqoop檔案的分隔符,使它能夠正確的解析檔案欄位。
hive預設的欄位分隔符為'\001'
34.描述一下hadoop中,有哪些地方使用到了快取機制,作用分別是什麼?
答:
Shuffle中
Hbase----客戶端/regionserver
35.MapReduce優化經驗
答:(1.)設定合理的map和reduce的個數。合理設定blocksize
(2.)避免出現資料傾斜
(3.combine函式
(4.對資料進行壓縮
(5.小檔案處理優化:事先合併成大檔案,combineTextInputformat,在hdfs上用mapreduce將小檔案合併成SequenceFile大檔案(key:檔名,value:檔案內容)
(6.引數優化
36.請列舉出曾經修改過的/etc/下面的檔案,並說明修改要解決什麼問題?
答:/etc/profile這個檔案,主要是用來配置環境變數。讓hadoop命令可以在任意目錄下面執行。
/ect/sudoers
/etc/hosts
/etc/sysconfig/network
/etc/inittab
37.請描述一下開發過程中如何對上面的程式進行效能分析,對效能分析進行優化的過程。
38. 現有 1 億個整數均勻分佈,如果要得到前 1K 個最大的數,求最優的演算法。
參見《海量資料演算法面試大全》
39.mapreduce的大致流程
答:主要分為八個步驟
1/對檔案進行切片規劃
2/啟動相應數量的maptask程式
3/呼叫FileInputFormat中的RecordReader,讀一行資料並封裝為k1v1
4/呼叫自定義的map函式,並將k1v1傳給map
5/收集map的輸出,進行分割槽和排序
6/reduce task任務啟動,並從map端拉取資料
7/reduce task呼叫自定義的reduce函式進行處理
8/呼叫outputformat的recordwriter將結果資料輸出
40.用mapreduce實現sql語 select count (x) from a group by b;
41.搭建hadoop叢集 , master和slaves都執行哪些服務
答:master主要是執行我們的主節點,slaves主要是執行我們的從節點。
42. hadoop引數調優
43. pig , latin , hive語法有什麼不同
44. 描述Hbase,ZooKeeper搭建過程
45.hadoop執行原理
答:hadoop的主要核心是由兩部分組成,HDFS和mapreduce,首先HDFS的原理就是分散式的檔案儲存系統,將一個大的檔案,分割成多個小的檔案,進行儲存在多臺伺服器上。
Mapreduce的原理就是使用JobTracker和TaskTracker來進行作業的執行。Map就是將任務展開,reduce是彙總處理後的結果。
46.mapreduce的原理
答:mapreduce的原理就是將一個MapReduce框架由一個單獨的master JobTracker和每個叢集節點一個slave TaskTracker共同組成。master負責排程構成一個作業的所有任務,這些的slave上,master監控它們的執行,重新執行已經失敗的任務。而slave僅負責執行由maste指派的任務。
47.HDFS儲存機制
答:HDFS主要是一個分散式的檔案儲存系統,由namenode來接收使用者的操作請求,然後根據檔案大小,以及定義的block塊的大小,將大的檔案切分成多個block塊來進行儲存
48.舉一個例子說明mapreduce是怎麼執行的。
Wordcount
49.如何確認hadoop叢集的健康狀況
答:有完善的叢集監控體系(ganglia,nagios)
Hdfs dfsadmin –report
Hdfs haadmin –getServiceState nn1
50.mapreduce作業,不讓reduce輸出,用什麼代替reduce的功能。
51.hive如何調優
答:hive最終都會轉化為mapreduce的job來執行,要想hive調優,實際上就是mapreduce調優,可以有下面幾個方面的調優。解決收據傾斜問題,減少job數量,設定合理的map和reduce個數,對小檔案進行合併,優化時把握整體,單個task最優不如整體最優。按照一定規則分割槽。
52.hive如何控制許可權
我們公司沒做,不需要
53.HBase寫資料的原理是什麼?
答:
54.hive能像關係型資料庫那樣建多個庫嗎?
答:當然能了。
55.HBase當機如何處理
答:當機分為HMaster當機和HRegisoner當機,如果是HRegisoner當機,HMaster會將其所管理的region重新分佈到其他活動的RegionServer上,由於資料和日誌都持久在HDFS中,該操作不會導致資料丟失。所以資料的一致性和安全性是有保障的。
如果是HMaster當機,HMaster沒有單點問題,HBase中可以啟動多個HMaster,通過Zookeeper的Master Election機制保證總有一個Master執行。即ZooKeeper會保證總會有一個HMaster在對外提供服務。
56.假設公司要建一個資料中心,你會如何處理?
先進行需求調查分析
設計功能劃分
架構設計
吞吐量的估算
採用的技術型別
軟硬體選型
成本效益的分析
專案管理
擴充套件性
安全性,穩定性
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31542492/viewspace-2156224/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 資料庫面試題(開發者必看)資料庫面試題
- java面試題-大學畢業必看Java面試題
- RabbitMQ面試專題,面試必看MQ面試
- java面試題大合集(開發者必看)Java面試題
- 大資料面試問題大資料面試
- 大資料面試題——場景題大資料面試題
- defer問題——面試Go必看面試Go
- 雲端計算大資料面試題,雲端計算大資料面試題集錦大資料面試題
- Python面試50題!面試鞏固必看!【轉】Python面試
- 大資料面試常見的面試題總結大資料面試題
- 【面試題】大資料開發第1輪面試面試題大資料
- Hadoop面試題總結Hadoop面試題
- Hadoop常見面試題Hadoop面試題
- Hadoop面試題之HDFSHadoop面試題
- Hadoop叢集面試題Hadoop面試題
- Hadoop面試題之MapReduceHadoop面試題
- Hadoop面試題(四)——YARNHadoop面試題Yarn
- 寶蘭德大資料面試題大資料面試題
- 知道創宇大資料面試題大資料面試題
- 大資料測試之hadoop初探大資料Hadoop
- Web前端開發必看的100道大廠面試題Web前端面試題
- Hadoop二十道面試問題Hadoop面試
- Hadoop 管理員面試問題Hadoop面試
- 大資料某公司面試題-附答案大資料面試題
- 大資料面試題以及答案整理(一)大資料面試題
- 大資料hadoop資料大資料Hadoop
- 大資料類工程師面試題集錦附指南:網際網路公司篇!大資料工程師面試題
- 跳槽季,Java面試大綱,你值得擁有Java面試
- 金三銀四跳槽季,Java面試大綱Java面試
- Hadoop二十道面試問題(2)Hadoop面試
- 面試Hadoop DBA的重要問題面試Hadoop
- Hadoop面試題總結(三)——MapReduceHadoop面試題
- 跳槽可閱!網際網路公司DBA面試指南集錦!面試
- 小白學習大資料測試之hadoop大資料Hadoop
- 資料庫面試題資料庫面試題
- 2019 必看 Android 高階面試題總結Android面試題
- 必看Android500道高薪面試題集Android高薪面試題
- 著名網際網路大廠PM面試指南資料清單面試