Flinkcheckpoint失敗的問題和解決辦法是什么

Flink checkpoint失敗的問題和解決辦法是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

目前創(chuàng)新互聯(lián)公司已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、雅安服務(wù)器托管、綿陽服務(wù)器托管、企業(yè)網(wǎng)站設(shè)計(jì)、武邑網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長,共同發(fā)展。

接觸Flink一段時(shí)間了,遇到了一些問題,其中有一個(gè)checkpoint失敗導(dǎo)致作業(yè)重啟的問題,遇到了很多次,重啟之后一般也能恢復(fù)正常,沒有太在意,最近2天有同事又頻繁遇到,這里記錄一下解決方案和分析過程。

我們的flink測(cè)試環(huán)境有3個(gè)節(jié)點(diǎn),部署架構(gòu)是每個(gè)flink節(jié)點(diǎn)上部署一個(gè)HDFS的DataNode節(jié)點(diǎn),hdfs用于flink的checkpoint和savepoint

現(xiàn)象

Flink checkpoint失敗的問題和解決辦法是什么

看日志是說有個(gè)3個(gè)datanode活著,文件副本是1,但是寫文件失敗

There are 3 datanode(s) running and no node(s) are excluded
復(fù)制代碼

網(wǎng)上搜了一下這種報(bào)錯(cuò),沒有直接的答案,我看了下namenode的日志,沒有更多直接的信息

50070 web ui上看一切正常,datanode的剩余空間都還有很多,使用率不到10%

我試了一下往hdfs上put一個(gè)文件再get下來,都o(jì)k,說明hdfs服務(wù)沒有問題,datanode也是通的

日志現(xiàn)象1

繼續(xù)前后翻了一下namenode的日志,注意到有一些warning信息,

Flink checkpoint失敗的問題和解決辦法是什么


這時(shí)候懷疑塊放置策略有問題

按照日志提示打開相應(yīng)的的debug開關(guān)
修改

etc/hadoop/log4j.properties
復(fù)制代碼

找到

log4j.logger.org.apache.hadoop.fs.s3a.S3AFileSystem=WARN
復(fù)制代碼

照抄這個(gè)格式,在下面添加

log4j.logger.org.apache.hadoop.hdfs.server.blockmanagement.BlockPlacementPolicy=DEBUG
log4j.logger.org.apache.hadoop.hdfs.server.blockmanagement.DatanodeDescriptor=DEBUG
log4j.logger.org.apache.hadoop.net.NetworkTopology=DEBUG
復(fù)制代碼

重啟namenode,然后重跑flink作業(yè)

日志現(xiàn)象2
Flink checkpoint失敗的問題和解決辦法是什么

這時(shí)候看到的問題是機(jī)架感知策略無法滿足,因?yàn)槲覀儧]有提供機(jī)架映射腳本,默認(rèn)同一個(gè)機(jī)架,但是仔細(xì)想想跟這個(gè)應(yīng)該也沒有關(guān)系

因?yàn)楹芏嗌a(chǎn)環(huán)境的hdfs其實(shí)都不配置機(jī)架映射腳本,并且導(dǎo)致checkpoint失敗的問題并不是一直存在,最起碼put/get文件都是正常的。

這時(shí)候開始考慮看一下hdfs的源碼了,根據(jù)上面的日志調(diào)用棧,先看到BlockPlacementPolicyDefault以及相關(guān)的DatanodeDescriptor

這些源碼大致的意思是當(dāng)給一個(gè)塊選擇一個(gè)datanode的時(shí)候,要對(duì)這個(gè)datanode進(jìn)行一些檢查,比如看下剩余空間,看下繁忙程度

當(dāng)我們的問題復(fù)現(xiàn)的時(shí)候,觀察日志會(huì)發(fā)現(xiàn)一些與此相關(guān)的關(guān)鍵信息

Flink checkpoint失敗的問題和解決辦法是什么
Flink checkpoint失敗的問題和解決辦法是什么

這個(gè)日志的意思是,存儲(chǔ)空間有43G,分配塊實(shí)際需要100多M,但是scheduled大小就超過43G,因此我們認(rèn)為正常的datanode,namenode認(rèn)為它空間不足了

原因

scheduled大小含義是什么呢?根據(jù)代碼可以看到scheduled大小是塊大小跟一個(gè)計(jì)數(shù)器做乘法,計(jì)數(shù)器代表的其實(shí)是新建文件塊數(shù)量計(jì)數(shù)器,hdfs根據(jù)這兩個(gè)參數(shù)評(píng)估可能需要的存儲(chǔ)空間,相當(dāng)于給每個(gè)datanode預(yù)定了一定的空間,預(yù)定的空間在文件寫入后,計(jì)算完真實(shí)的占用空間后,還會(huì)調(diào)整回來。

了解這個(gè)原理之后,可以判斷的是datanode在一段時(shí)間內(nèi)被預(yù)定了太多的空間。

flink的checkpoint機(jī)制可以參考這一篇www.jianshu.com/p/9c587bd49…
大致的意思是taskmanager上的很多任務(wù)線程都會(huì)寫hdfs

看了下hdfs的目錄結(jié)構(gòu),有大量的類似uuid命名checkpoint文件,同時(shí)每個(gè)文件都很小

Flink checkpoint失敗的問題和解決辦法是什么

當(dāng)我們的作業(yè)并發(fā)較大時(shí),相應(yīng)的在hdfs上就會(huì)創(chuàng)建更多的checkpoint文件,盡管我們的文件大小只有幾K,但是在每一個(gè)datanode預(yù)定的空間都是128M乘以分配到的文件數(shù)量(文件很小,不超過128M),那么43G的空間,最多預(yù)定多少文件呢?除一下也就是300多個(gè),三個(gè)節(jié)點(diǎn)也就是最多900個(gè),我們有多個(gè)作業(yè),總并發(fā)較大,在預(yù)留空間完全釋放前,是很容易出現(xiàn)這個(gè)問題的。

之前知道hdfs不適合存儲(chǔ)小文件,原因是大量小文件會(huì)導(dǎo)致inode消耗以及block location這些元數(shù)據(jù)增長,讓namenode內(nèi)存吃緊,這個(gè)例子還表明
當(dāng)blocksize設(shè)置較大,文件大小卻遠(yuǎn)小于blocksize時(shí),大量這種小文件會(huì)導(dǎo)致datanode直接"不可用"。

解決辦法

塊大小不是集群屬性,是文件屬性,客戶端可以設(shè)置的,flink這時(shí)候每個(gè)taskmanager和jobmanager都是hdfs的"客戶端",根據(jù)flink文檔,我們可以做如下配置
1、在conf/flink-conf.yaml中指定一個(gè)hdfs的配置文件路徑

fs.hdfs.hadoopconf: /home/xxxx/flink/conf
復(fù)制代碼

這里跟flink的配置文件路徑選擇同一個(gè)目錄

2、放進(jìn)去2個(gè)配置文件,一個(gè)core-site.xml一個(gè)是hdfs-site.xml

core-site.xml可以不放,如果checkpoint和savepoint指定了具體的hdfs地址的話,

Flink checkpoint失敗的問題和解決辦法是什么

hdfs-site.xml里加上blockSize配置即可,比如這里我們給它設(shè)置為1M

Flink checkpoint失敗的問題和解決辦法是什么

具體塊大小如何設(shè)置,需要觀察自己的作業(yè)狀態(tài)文件大小自己靈活調(diào)整。

重啟flink集群,提交作業(yè)即可,運(yùn)行時(shí)可以觀察下hdfs的fsimage大小,注意不要因?yàn)閴K太小,小文件太多導(dǎo)致元數(shù)據(jù)過大。

我們已經(jīng)將該問題同步到集群自動(dòng)化部署腳本中,部署時(shí)會(huì)專門添加blocksize的配置。

flink這套依賴hdfs的checkpoint方案對(duì)于輕量級(jí)的流計(jì)算場(chǎng)景稍顯臃腫,checkpoint的分布式存儲(chǔ)不管是直接filesystem還是rocksDB都需要hdfs,其實(shí)從checkpoint原理和數(shù)據(jù)類型考慮,es應(yīng)該也是不錯(cuò)的選擇,遺憾的是社區(qū)并沒有提供這種方案。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。

網(wǎng)站欄目:Flinkcheckpoint失敗的問題和解決辦法是什么
文章出自:http://bm7419.com/article6/geicig.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、、品牌網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、網(wǎng)站建設(shè)、網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都app開發(fā)公司