最近的hdfs集群出了一些故障,今天總結(jié)一下hadoop的幾個(gè)具體的性能調(diào)優(yōu)方法
1)HDFS參數(shù)調(diào)優(yōu)hdfs-site.xml
(1)dfs.namenode.handler.count=20 * log2(Cluster Size)倔叼,比如集群規(guī)模為8臺時(shí),此參數(shù)設(shè)置為60
Thenumber of Namenode RPC server threads that listen to requests from clients. Ifdfs.namenode.servicerpc-address is not configured then Namenode RPC serverthreads listen to requests from all nodes.
NameNode有一個(gè)工作線程池哩罪,用來處理不同DataNode的并發(fā)心跳以及客戶端并發(fā)的元數(shù)據(jù)操作肥印。對于大集群或者有大量客戶端的集群來說,通常需要增大參數(shù)dfs.namenode.handler.count的默認(rèn)值10腹鹉。設(shè)置該值的一般原則是將其設(shè)置為集群大小的自然對數(shù)乘以20敷硅,即20logN,N為集群大小绞蹦。
(2)編輯日志存儲路徑dfs.namenode.edits.dir設(shè)置與鏡像文件存儲路徑dfs.namenode.name.dir盡量分開,達(dá)到最低寫入延遲景殷,提高集群的讀寫方面性能
2)YARN參數(shù)調(diào)優(yōu)yarn-site.xml
(1)情景描述:總共7臺機(jī)器澡屡,每天幾億條數(shù)據(jù),數(shù)據(jù)源->Flume->Kafka->HDFS->Hive
面臨問題:數(shù)據(jù)統(tǒng)計(jì)主要用HiveSQL绩蜻,沒有數(shù)據(jù)傾斜室埋,小文件已經(jīng)做了合并處理伊约,開啟的JVM重用孕蝉,而且IO沒有阻塞,內(nèi)存用了不到50%昔驱。但是還是跑的非常慢,而且數(shù)據(jù)量洪峰過來時(shí)纳本,整個(gè)集群都會宕掉腋颠。基于這種情況有沒有優(yōu)化方案巾腕。
(2)解決辦法:
內(nèi)存利用率不夠絮蒿。這個(gè)一般是Yarn的2個(gè)配置造成的,單個(gè)任務(wù)可以申請的最大內(nèi)存大小土涝,和Hadoop單個(gè)節(jié)點(diǎn)可用內(nèi)存大小。調(diào)節(jié)這兩個(gè)參數(shù)能提高系統(tǒng)內(nèi)存的利用率但壮。
(a)yarn.nodemanager.resource.memory-mb
表示該節(jié)點(diǎn)上YARN可使用的物理內(nèi)存總量,默認(rèn)是8192(MB)弹渔,注意溯祸,如果你的節(jié)點(diǎn)內(nèi)存資源不夠8GB,則需要調(diào)減小這個(gè)值焦辅,而YARN不會智能的探測節(jié)點(diǎn)的物理內(nèi)存總量氨鹏。
(b)yarn.scheduler.maximum-allocation-mb
單個(gè)任務(wù)可申請的最多物理內(nèi)存量压状,默認(rèn)是8192(MB)跟继。
3)Hadoop宕機(jī)
(1)如果MR造成系統(tǒng)宕機(jī)镣丑。此時(shí)要控制Yarn同時(shí)運(yùn)行的任務(wù)數(shù),和每個(gè)任務(wù)申請的最大內(nèi)存莺匠。調(diào)整參數(shù):yarn.scheduler.maximum-allocation-mb(單個(gè)任務(wù)可申請的最多物理內(nèi)存量,默認(rèn)是8192MB)
(2)如果寫入文件過量造成NameNode宕機(jī)摇庙。那么調(diào)高Kafka的存儲大小遥缕,控制從Kafka到HDFS的寫入速度。高峰期的時(shí)候用Kafka進(jìn)行緩存夕凝,高峰期過去數(shù)據(jù)同步會自動(dòng)跟上户秤。