對于Flink,Spark在Yarn上提交的LongTime Job(比如一個(gè)批處理作業(yè)要運(yùn)行幾個(gè)小時(shí)或者本身就是實(shí)時(shí)作業(yè)),其作業(yè)的運(yùn)行日志我們不能等到作業(yè)結(jié)束后,通過Yarn日志聚合后查看,我們希望作業(yè)提交后就能夠馬上看到運(yùn)行日志( 這里注意,你的作業(yè)被調(diào)度到集群的各個(gè)計(jì)算節(jié)點(diǎn)中,比如你的集群有100個(gè)節(jié)點(diǎn),你的作業(yè)可能被調(diào)度到幾十個(gè)個(gè)節(jié)點(diǎn)中),如何能夠?qū)崟r(shí)方面的查看所有節(jié)點(diǎn)產(chǎn)生的日志呢?
# 總體思路,無論是spark,flink 都使用log4j記錄日志,只不過默認(rèn)輸出是Console和文件,我們通過定義 log4j文件,將日志實(shí)時(shí)發(fā)送到一個(gè)位置,集中管理
* 方案1: 定義log4j KafkaAppender, 將日志異步發(fā)送到Kafka,之后可以將數(shù)據(jù)發(fā)送到ES,通過Kibana查看即可
* 方案2: 定義log4j SyslogAppender,將日志發(fā)送到rsyslog服務(wù)器(基于UDP傳輸,更高效),所有節(jié)點(diǎn)日志可以落到本地文件,這樣可以在這里通過文件查看日志,當(dāng)然也可以接上ELK這一套。
# 方案1比方案2要重一些,因?yàn)槟阈枰狵afka集群,而rsyslog非常輕量,并且數(shù)據(jù)通過UDP協(xié)議傳輸更為高效。