您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“如何利用 Arthas 解決啟動(dòng) StandbyNameNode 加載 EditLog 慢的問題”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“如何利用 Arthas 解決啟動(dòng) StandbyNameNode 加載 EditLog 慢的問題”吧!
公司新搭 HDFS 集群,namenode做ha,但是在啟動(dòng) StandbyNamenode 節(jié)點(diǎn)的時(shí)候出現(xiàn)奇怪的現(xiàn)象:空集群加載 Editlog 很慢,每次重啟幾乎耗時(shí)都在二三十分鐘
為了方便大家理解,大致說下 StandbyNamenode(以下簡稱 SNN)啟動(dòng)過程:
SNN 啟動(dòng)時(shí),如果本地沒有 FSImage會(huì)去 ANN(ActiveNamenode)拉取 FSImage
如果本地有 FSImage,則會(huì)根據(jù) transactionId 去 JournalNode 拉取 gap 的 editlog,在本地做合并
問題就出在第 2 步,在從 JournalNode 拉取 EditLog 過程中出現(xiàn)固定 15s 延遲。一般來說,空集群幾乎沒有操作, editlog 不會(huì)太大,不應(yīng)該出現(xiàn)每次從 JournalNode 拉取 EditLog 都耗費(fèi) 15s 的時(shí)間,日志如下(為了方便觀察截取部分日志):
2020-11-04 18:27:27,577 INFO namenode.RedundantEditLogInputStream (RedundantEditLogInputStream.java:nextOp(177)) - Fast-forwarding stream 'http://cbdp-online1.sdns.fin ancial.cloud:8480/getJournal?jid=hdfs-ha&segmentTxId=213656&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true' to transaction ID 184269 2020-11-04 18:27:42,582 INFO namenode.FSEditLogLoader (FSEditLogLoader.java:loadEditRecords(289)) - replaying edit log: 1/44 transactions completed. (2%) 2020-11-04 18:27:42,583 INFO namenode.FSImage (FSEditLogLoader.java:loadFSEdits(162)) - Edits file http://cbdp-online1.sdns.financial.cloud:8480/getJournal?jid=hdfs-ha &segmentTxId=213656&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true, http://cbdp-online2.sdns.financial.cloud:8 480/getJournal?jid=hdfs-ha&segmentTxId=213656&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true, http://cbdp-onli ne3.sdns.financial.cloud:8480/getJournal?jid=hdfs-ha&segmentTxId=213656&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgres sOk=true of size 5981 edits # 44 loaded in 15 seconds ...... 2020-11-04 18:27:42,583 INFO namenode.RedundantEditLogInputStream (RedundantEditLogInputStream.java:nextOp(177)) - Fast-forwarding stream 'http://cbdp-online1.sdns.financial.cloud:8480/getJournal?jid=hdfs-ha&;segmentTxId=213700&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true' to transaction ID 184269 2020-11-04 18:27:57,588 INFO namenode.FSEditLogLoader (FSEditLogLoader.java:loadEditRecords(289)) - replaying edit log: 1/53 transactions completed. (2%) 2020-11-04 18:27:57,589 INFO namenode.FSImage (FSEditLogLoader.java:loadFSEdits(162)) - Edits file http://cbdp-online1.sdns.financial.cloud:8480/getJournal?jid=hdfs-ha&;segmentTxId=213700&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true, http://cbdp-online2.sdns.financial.cloud:8480/getJournal?jid=hdfs-ha&;segmentTxId=213700&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true, http://cbdp-online3.sdns.financial.cloud:8480/getJournal?jid=hdfs-ha&;segmentTxId=213700&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true of size 7088 edits # 53 loaded in 15 seconds
trace org.apache.hadoop.hdfs.server.namenode.FSEditLogLoader loadFSEdits
profiler start/stop
trace org.apache.hadoop.hdfs.server.namenode.EditLogFileInputStream$URLLog$1 run
trace --skipJDKMethods false sun.net.www.http.HttpClient parseHTTPHeader
trace --skipJDKMethods false java.net.SocketInputStream socktRead '#cost > 10000'
stack *SocketInputStream socketRead "#cost > 10000"
發(fā)現(xiàn)由于 StandbyNameNode 的網(wǎng)絡(luò)讀取數(shù)據(jù)造成阻塞,到此已經(jīng)碰到 native 函數(shù),在 java 層面已經(jīng)沒有有效方法進(jìn)行分析。
這時(shí)我看到 StandbyNameNode 的日志:
2020-11-04 18:27:42,583 INFO namenode.RedundantEditLogInputStream (RedundantEditLogInputStream.java:nextOp(177)) - Fast-forwarding stream '
http://cbdp-online1.sdns.financial.cloud:8480/getJournal?jid=hdfs-ha&;segmentTxId=213700&storageInfo=-64%3A272699407%3A1603893889358%3ACID-aa8ec1b5-a501-4195-9299-e14abefbdc11&inProgressOk=true
' to transaction ID 184269
同時(shí)想起了 @赫炎 提出的思路,有可能是在 JournalNode 端讀取 EditLog 文件的時(shí)候有阻塞。
trace --skipJDKMethods false org.apache.hadoop.hdfs.qjournal.server.GetJournalEditServlet doGet '#cost > 10000'
發(fā)現(xiàn)在調(diào)用 java.net.InetSocketAddress.getHostName
處耗時(shí) 15s,至此找到了罪魁禍?zhǔn)住?/p>
經(jīng)分析發(fā)現(xiàn)在在開啟 Kerberos 的情況下,JournalNode 側(cè)響應(yīng) getEditLog 接口調(diào)用時(shí)會(huì)進(jìn)入方法 isValidRequestor,此時(shí)會(huì)去解析 SecondNameNode 的 hostName,據(jù)此搜索對(duì)應(yīng)的 principal
dns 域名解析服務(wù)不能獲取 SecondNameNode 的默認(rèn)地址 0.0.0.0:9868,也即不能解析 0.0.0.0 的 hostName,此處超時(shí) 15s 返回,這樣每次通過 URLLog 獲取 JournalNode的EditLog 時(shí),總會(huì)有額外耗時(shí) 15s,導(dǎo)致 SNN 加載 EditLog 變慢。
為了驗(yàn)證猜想,在每個(gè) JournalNode 節(jié)點(diǎn) hosts 文件配置 0.0.0.0 0.0.0.0,重啟 SNN,速度提升了 20 倍
到此,相信大家對(duì)“如何利用 Arthas 解決啟動(dòng) StandbyNameNode 加載 EditLog 慢的問題”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。