Linux
1. 問題:Linux常用命令
參考答案:find续滋、df衣洁、tar撒璧、ps赐俗、top、netstat等蒙畴。(盡量說一些高級命令)
2. 問題:Linux查看內(nèi)存受楼、磁盤存儲转唉、io 讀寫命迈、端口占用、進程等命令
答案:
1火的、查看內(nèi)存:top
2壶愤、查看磁盤存儲情況:df -h
3、查看磁盤IO讀寫情況:iotop(需要安裝一下:yum install iotop)馏鹤、iotop -o(直接查看輸出比較高的磁盤讀寫程序)
4征椒、查看端口占用情況:netstat -tunlp | grep 端口號
5、查看進程:ps aux
Shell
3. 問題1:使用Linux命令查詢file1中空行所在的行號
答案:
[atguigu@hadoop102 datas]$ awk '/^$/{print NR}' file1.txt
5
4. 問題2:有文件chengji.txt內(nèi)容如下:
張三 40
李四 50
王五 60
使用Linux命令計算第二列的和并輸出
[atguigu@hadoop102 datas]$ cat chengji.txt | awk -F " " '{sum+=$2} END{print sum}'
150
5. 問題3:Shell腳本里如何檢查一個文件是否存在湃累?如果不存在該如何處理勃救?
#!/bin/bash
if [ -f file.txt ]; then
echo "文件存在!"
else
echo "文件不存在!"
fi
6. 問題4:用shell寫一個腳本,對文本中無序的一列數(shù)字排序
[root@CentOS6-2 ~]# sort -n test.txt|awk '{a+=$0;print $0}END{print "SUM="a}'
7. 問題5:請用shell腳本寫出查找當前文件夾(/home)下所有的文本文件內(nèi)容中包含有字符”shen”的文件名稱
[atguigu@hadoop102 datas]$ grep -r "shen" /home | cut -d ":" -f 1
/home/atguigu/datas/sed.txt
/home/atguigu/datas/cut.txt
入門
8. 簡要描述如何安裝配置apache的一個開源Hadoop治力,列出具體步驟蒙秒。
1)使用root賬戶登錄
2)修改IP
3)修改host主機名
4)配置SSH免密碼登錄
5)關(guān)閉防火墻
6)安裝JDK
7)解壓hadoop安裝包
8)配置hadoop的核心文件 hadoop-env.sh,core-site.xml , mapred-site.xml 宵统, hdfs-site.xml
9)配置hadoop環(huán)境變量
10)格式化 hadoop namenode-format
11)啟動節(jié)點start-dfs.sh start-yarn.sh
9. Hadoop中需要哪些配置文件晕讲,其作用是什么?
1)core-site.xml:
(1)fs.defaultFS:hdfs://cluster1(域名),這里的值指的是默認的HDFS路徑 瓢省。
(2)hadoop.tmp.dir:/export/data/hadoop_tmp,這里的路徑默認是NameNode弄息、DataNode、secondaryNamenode等存放數(shù)據(jù)的公共目錄勤婚。用戶也可以自己單獨指定這三類節(jié)點的目錄摹量。
2)hdfs-site.xml:
(1) dfs.replication:他決定著系統(tǒng)里面的文件塊的數(shù)據(jù)備份個數(shù),默認為3個馒胆。
(2) dfs.data.dir:datanode節(jié)點存儲在文件系統(tǒng)的目錄 缨称。
(3) dfs.name.dir:是namenode節(jié)點存儲hadoop文件系統(tǒng)信息的本地系統(tǒng)路徑 。
3)yarn-site.xml
(1)yarn.nodemanager.aux-services: Reducer獲取數(shù)據(jù)的方式為shuffle
(2)yarn.resourcemanager.hostname:指定YARN的ResourceManager的地址
4)mapred-site.xml:
mapreduce.framework.name: yarn指定mr運行在yarn上国章。
10. 請列出正常工作的Hadoop集群中Hadoop都分別需要啟動哪些進程具钥,它們的作用分別是什么?
1)NameNode:負責管理文件系統(tǒng)名稱空間和對集群中存儲的文件的訪問,保存有元數(shù)據(jù)液兽。
2)SecondaryNameNode:它輔助NameNode合并edits和fsimage骂删。
3)DataNode:負責存儲集群實實在在的數(shù)據(jù)。
4)ResourceManager:負責整個集群資源的調(diào)度四啰。
5)NodeManager:負責單個節(jié)點資源的調(diào)度宁玫。
6)DFSZKFailoverController:集群配置為高可用時它負責監(jiān)控NameNode的狀態(tài),柑晒。
7)JournalNode :高可用情況下存放namenode的editlog文件欧瘪。
11. 簡述Hadoop的幾個默認端口及其含義。
1)dfs.namenode.http-address:50070
2)SecondaryNameNode輔助名稱節(jié)點端口號:50090
3)dfs.datanode.address:50010
4)fs.defaultFS:8020 或者9000
5)yarn.resourcemanager.webapp.address:8088
- 歷史服務(wù)器web訪問端口:19888
HDFS
12. HDFS的存儲機制(讀寫流程)匙赞。
13. SecondaryNameNode 工作機制佛掖。
14. NameNode與SecondaryNameNode 的區(qū)別與聯(lián)系?
1)區(qū)別
(1)NameNode負責管理整個文件系統(tǒng)的元數(shù)據(jù)涌庭,以及每一個路徑(文件)所對應(yīng)的數(shù)據(jù)塊信息芥被。
(2)SecondaryNameNode主要用于定期合并命名空間鏡像和命名空間鏡像的編輯日志。
2)聯(lián)系:
(1)SecondaryNameNode中保存了一份和namenode一致的鏡像文件(fsimage)和編輯日志(edits)坐榆。
(2)在主namenode發(fā)生故障時(假設(shè)沒有及時備份數(shù)據(jù))拴魄,可以從SecondaryNameNode恢復數(shù)據(jù)。
15. 服役新數(shù)據(jù)節(jié)點和退役舊節(jié)點步驟
1)節(jié)點上線操作:
按照集群配置要求席镀,把服務(wù)器環(huán)境準備好匹中,然后直接啟動DataNode即可。
2)節(jié)點下線操作:
將要退役的節(jié)點添加到黑名單中豪诲,刷新namenode和resourcemanager顶捷。等該節(jié)點死亡時,手動將進程退出跛溉。
16. Namenode掛了怎么辦焊切?
方法一:將SecondaryNameNode中數(shù)據(jù)拷貝到namenode存儲數(shù)據(jù)的目錄扮授;
方法二:使用-importCheckpoint選項啟動namenode守護進程,從而將SecondaryNameNode中數(shù)據(jù)拷貝到namenode目錄中专肪。
17. 寫出你常用的HDFS命令
ls mkdir cat mv get put tail rm
18. HDFS原理刹勃,以及各個模塊的職責
1)NameNode:Master節(jié)點,只有一個嚎尤,管理HDFS的名稱空間和數(shù)據(jù)塊映射信息荔仁;配置副本策略;處理客戶端請求芽死。
2)DataNode:就是Slave乏梁。存儲實際的數(shù)據(jù);執(zhí)行數(shù)據(jù)塊的讀寫关贵;匯報存儲信息給NameNode遇骑。
3)Client:切分文件。訪問或通過命令行管理HDFS揖曾;與NameNode交互落萎,獲取文件為準信息;與DataNode交互炭剪,讀取和寫入數(shù)據(jù)练链。
4)SecondaryName弄得:輔助NameNode,分擔其工作量奴拦;定期合并fsimage和fsEdits媒鼓,推送給NameNode;緊急情況下错妖,可輔助恢復NameNode绿鸣,但SecondaryName并非NameNode的熱備。
MapReduce
19. FileInputFormat切片機制
(1)簡單地按照文件的內(nèi)容長度進行切片
(2)切片大小暂氯,默認等于Block大小
(3)切片時不考慮數(shù)據(jù)集整體枚驻,而是逐個針對每一個文件單獨切片
20. 如何決定一個job的map和reduce的數(shù)量?
1)map數(shù)量由切片個數(shù)決定
splitSize=max{minSize,min{maxSize,blockSize}}
2)reduce數(shù)量根據(jù)集群性能測試得出
reduce的數(shù)量job.setNumReduceTasks(x);x 為reduce的數(shù)量。不設(shè)置的話默認為 1株旷。
21. Maptask的個數(shù)由什么決定?
一個job的map階段MapTask并行度(個數(shù))尔邓,由客戶端提交job時的切片個數(shù)決定晾剖。
22. 請描述mapReduce有幾種排序及排序發(fā)生的階段。
1)排序的分類:
(5)自定義排序WritableComparable
2)排序發(fā)生的階段:
(1)二次排序梯嗽、全排序齿尽、部分排序發(fā)生在map階段。
(2)輔助排序發(fā)生在Reduce階段灯节。
23. 請描述MapReduce中Shuffle階段的工作流程循头,如何優(yōu)化Shuffle階段绵估?
分區(qū),排序卡骂,溢寫国裳,拷貝到對應(yīng)Reduce機器上,增加Combiner全跨,壓縮溢寫的文件缝左。
24. 請描述mapReduce中combiner的作用是什么,一般使用情景浓若,哪些情況不需要渺杉,及和reduce的區(qū)別?
1)Combiner的意義就是對每一個maptask的輸出進行局部匯總挪钓,以減小網(wǎng)絡(luò)傳輸量是越。
2)Combiner能夠應(yīng)用的前提是不能影響最終的業(yè)務(wù)邏輯,而且碌上,Combiner的輸出kv應(yīng)該跟reducer的輸入kv類型要對應(yīng)起來倚评。
3)Combiner和reducer的區(qū)別在于運行的位置。
Combiner是在每一個maptask所在的節(jié)點運行绍赛;
Reducer是接收全局所有Mapper的輸出結(jié)果蔓纠。
25. Mapreduce的工作原理,請舉例子說明mapreduce是怎么運行的吗蚌?
26. 如果沒有定義partitioner腿倚,那數(shù)據(jù)在被送達reducer前是如何被分區(qū)的?
如果沒有自定義的 partitioning蚯妇,則默認的 partition 算法敷燎,即根據(jù)每一條數(shù)據(jù)的 key
的 hashcode 值摸運算(%)reduce 的數(shù)量,得到的數(shù)字就是“分區(qū)號”箩言。
27. MapReduce 怎么實現(xiàn) TopN硬贯?
可以自定義groupingcomparator,或者在map端對數(shù)據(jù)進行排序陨收,然后再reduce輸出時饭豹,控制只輸出前n個數(shù)。就達到了topn輸出的目的务漩。
28. 有可能使 Hadoop 任務(wù)輸出到多個目錄中么拄衰?如果可以,怎么做饵骨?
1)可以輸出到多個目錄中翘悉,采用自定義OutputFormat。
2)實現(xiàn)步驟:
(1)自定義outputformat居触,
(2)改寫recordwriter妖混,具體改寫輸出數(shù)據(jù)的方法write()
29. 簡述hadoop實現(xiàn)join的幾種方法及每種方法的實現(xiàn)老赤。
1)reduce side join
Map端的主要工作:為來自不同表(文件)的key/value對打標簽以區(qū)別不同來源的記錄。然后用連接字段作為key制市,其余部分和新加的標志作為value抬旺,最后進行輸出。
Reduce端的主要工作:在reduce端以連接字段作為key的分組已經(jīng)完成息堂,我們只需要在每一個分組當中將那些來源于不同文件的記錄(在map階段已經(jīng)打標志)分開嚷狞,最后進行合并就ok了。
1)map join
在map端緩存多張表荣堰,提前處理業(yè)務(wù)邏輯床未,這樣增加map端業(yè)務(wù),減少reduce端數(shù)據(jù)的壓力振坚,盡可能的減少數(shù)據(jù)傾斜薇搁。
具體辦法:采用distributedcache
(1)在mapper的setup階段,將文件讀取到緩存集合中渡八。
(2)在驅(qū)動函數(shù)中加載緩存啃洋。
job.addCacheFile(new URI("file:/e:/mapjoincache/pd.txt"));// 緩存普通文件到task運行節(jié)點
30. 請簡述hadoop怎樣實現(xiàn)二級排序。
對map端輸出的key進行排序屎鳍,實現(xiàn)的compareTo方法宏娄。在compareTo方法中排序的條件有二個。
31. ** 參考下面的MR系統(tǒng)的場景:**
--hdfs塊的大小為64MB
--輸入類型為FileInputFormat
--有三個文件的大小分別是:64KB 65MB 127MB
Hadoop框架會把這些文件拆分為多少塊逮壁?
5塊:64K孵坚,64M,1M, 64M窥淆,63M
Yarn
32. 簡述Hadoop1與Hadoop2 的架構(gòu)異同卖宠。
加入了yarn解決了資源調(diào)度的問題。
加入了對Zookeeper的支持實現(xiàn)比較可靠的高可用忧饭。
33. 為什么會產(chǎn)生Yarn,它解決了什么問題扛伍,有什么優(yōu)勢?
Yarn最主要的功能就是解決運行的用戶程序與yarn框架完全解耦词裤。
Yarn上可以運行各種類型的分布式運算程序(mapreduce只是其中的一種)刺洒,比如mapreduce、storm程序吼砂,spark程序……
34. MR作用提交全過程作媚。
35. Hadoop的調(diào)度器總結(jié)。
目前帅刊,Hadoop作業(yè)調(diào)度器主要有三種:FIFO、Capacity Scheduler和Fair Scheduler漂问。Hadoop2.7.2默認的資源調(diào)度器是Capacity Scheduler赖瞒。
36. MapReduce推測執(zhí)行算法及原理女揭。
優(yōu)化(15分)
37. Hadoop 優(yōu)化方法。
1)數(shù)據(jù)輸入小文件處理:
(1)合并小文件:對小文件進行歸檔(har)栏饮、自定義inputformat將小文件存儲成sequenceFile文件吧兔。
(2)采用ConbinFileInputFormat來作為輸入,解決輸入端大量小文件場景袍嬉。
(3)對于大量小文件Job境蔼,可以開啟JVM重用。
2)map階段
(1)增大環(huán)形緩沖區(qū)大小伺通。由100m擴大到200m
(2)增大環(huán)形緩沖區(qū)溢寫的比例箍土。由80%擴大到90%
(3)減少對溢寫文件的merge次數(shù)。
(4)不影響實際業(yè)務(wù)的前提下罐监,采用combiner提前合并吴藻,減少 I/O。
3)reduce階段
(1)合理設(shè)置map和reduce數(shù):兩個都不能設(shè)置太少弓柱,也不能設(shè)置太多沟堡。太少,會導致task等待矢空,延長處理時間航罗;太多,會導致 map屁药、reduce任務(wù)間競爭資源粥血,造成處理超時等錯誤。
(2)設(shè)置map者祖、reduce共存:調(diào)整slowstart.completedmaps參數(shù)立莉,使map運行到一定程度后,reduce也開始運行七问,減少reduce的等待時間蜓耻。
(3)規(guī)避使用reduce,因為Reduce在用于連接數(shù)據(jù)集的時候?qū)a(chǎn)生大量的網(wǎng)絡(luò)消耗械巡。
(4)增加每個reduce去map中拿數(shù)據(jù)的并行數(shù)
(5)集群性能可以的前提下刹淌,增大reduce端存儲數(shù)據(jù)內(nèi)存的大小。
4)IO傳輸
(1)采用數(shù)據(jù)壓縮的方式讥耗,減少網(wǎng)絡(luò)IO的的時間有勾。安裝Snappy和LZOP壓縮編碼器。
(2)使用SequenceFile二進制文件
5)整體
(1)MapTask默認內(nèi)存大小為1G古程,可以增加MapTask內(nèi)存大小為4-5g
(2)ReduceTask默認內(nèi)存大小為1G蔼卡,可以增加ReduceTask內(nèi)存大小為4-5g
(3)可以增加MapTask的cpu核數(shù),增加ReduceTask的cpu核數(shù)
(4)增加每個container的cpu核數(shù)和內(nèi)存大小
(5)調(diào)整每個Map Task和Reduce Task最大重試次數(shù)
HA高可用
38. 如何配置hadoop高可用HA挣磨?
安裝zookeeper雇逞,修改conf下相關(guān)配置文件
安裝hadoop 荤懂,修改 /etc/profile ,修改配置文件hadoo-env.sh塘砸、修改core-site.xml节仿、修改hdfs-site.xml、修改mapred-site.xml掉蔬、修改yarn-site.xml
修改slaves 廊宪、免密配置 、hadoop拷貝女轿、啟動zk箭启、格式化hdfs,啟動其他服務(wù)
Zookeeper
39. Zookeeper選舉機制
半數(shù)機制(Paxos 協(xié)議):集群中半數(shù)以上機器存活谈喳,集群可用册烈。所以Zookeeper適合裝在奇數(shù)臺機器上。
當集群開啟的數(shù)量在半數(shù)以上時婿禽,就會將Leader給選出來赏僧,例如,有id為1扭倾,2淀零,3三臺機子,按順序啟動膛壹,第一臺開啟時驾中,Zookeeper的日志會報錯,因為啟動數(shù)量沒有達到集
一半:有id為1模聋,2肩民,3三臺機子,按順序啟動1.啟了兩臺链方,總共三臺)持痰,數(shù)量多于一半,然后根據(jù)ID的大小選出Leader祟蚀,則2號當選工窍;2.3號啟動時,Leader已經(jīng)存在前酿,則只能當小弟了患雏。
40. Zookeeper常用命令
ls | 查看子節(jié)點 |
---|---|
get | 獲取節(jié)點信息 |
create | 創(chuàng)建節(jié)點 |