Flink性能調(diào)優(yōu)(一)

ApacheFlink

1 配置內(nèi)存

操作場(chǎng)景

Flink是依賴(lài)內(nèi)存計(jì)算弄跌,計(jì)算過(guò)程中內(nèi)存不夠?qū)link的執(zhí)行效率影響很大宛乃∠崞疲可以通過(guò)監(jiān)控GC(Garbage Collection),評(píng)估內(nèi)存使用及剩余情況來(lái)判斷內(nèi)存是否變成性能瓶頸扫皱,并根據(jù)情況優(yōu)化足绅。
監(jiān)控節(jié)點(diǎn)進(jìn)程的YARN的Container GC日志,如果頻繁出現(xiàn)Full GC韩脑,需要優(yōu)化GC编检。


GC的配置:在客戶(hù)端的“conf/flink-conf.yaml”配置文件中,在“env.java.opts”配置項(xiàng)中添加參數(shù):“

-Xloggc:<LOG_DIR>/gc.log 
-XX:+PrintGCDetails 
-XX:-OmitStackTraceInFastThrow 
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDateStamps 
-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=20 
-XX:GCLogFileSize=20M

此處默認(rèn)已經(jīng)添加GC日志扰才。


操作步驟

  • 優(yōu)化GC允懂。

    調(diào)整老年代和新生代的比值。在客戶(hù)端的“conf/flink-conf.yaml”配置文件中衩匣,在“env.java.opts”配置項(xiàng)中添加參數(shù):“-XX:NewRatio”蕾总。如“ -XX:NewRatio=2”,則表示老年代與新生代的比值為2:1琅捏,新生代占整個(gè)堆空間的1/3生百,老年代占2/3。

  • 開(kāi)發(fā)Flink應(yīng)用程序時(shí)柄延,優(yōu)化DataStream的數(shù)據(jù)分區(qū)或分組操作蚀浆。

    • 當(dāng)分區(qū)導(dǎo)致數(shù)據(jù)傾斜時(shí),需要考慮優(yōu)化分區(qū)搜吧。
    • 避免非并行度操作市俊,有些對(duì)DataStream的操作會(huì)導(dǎo)致無(wú)法并行,例如WindowAll滤奈。
    • keyBy盡量不要使用String摆昧。

補(bǔ)充:

-Xloggc:<LOG_DIR>/gc.log
#GC詳情 
-XX:+PrintGCDetails 
-XX:-OmitStackTraceInFastThrow 
#打印GC時(shí)間信息
-XX:+PrintGCTimeStamps 
-XX:+PrintGCDateStamps 
-XX:+UseGCLogFileRotation 
-XX:NumberOfGCLogFiles=20 
-XX:GCLogFileSize=20M。
#表示老年代與新生代的比值為2:1蜒程,新生代占整個(gè)堆空間的1/3绅你,老年代占2/3伺帘。
#設(shè)置年輕代和年老代的比值。如:為3忌锯,表示年輕代與年老代比值為1:3伪嫁,年輕代占整個(gè)年輕代年老代和的1/4 
-XX:NewRatio=2
======================================================================================================

堆設(shè)置
-Xms :初始堆大小
-Xmx :最大堆大小
-XX:NewSize=n :設(shè)置年輕代大小
-XX:NewRatio=n: 設(shè)置年輕代和年老代的比值。如:為3偶垮,表示年輕代與年老代比值為1:3礼殊,年輕代占整個(gè)年輕代年老代和的1/4
-XX:SurvivorRatio=n :年輕代中Eden區(qū)與兩個(gè)Survivor區(qū)的比值。注意Survivor區(qū)有兩個(gè)针史。如:3,表示Eden:Survivor=3:2碟狞,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/5
-XX:MaxPermSize=n :設(shè)置持久代大小
收集器設(shè)置
-XX:+UseSerialGC :設(shè)置串行收集器
-XX:+UseParallelGC :設(shè)置并行收集器
-XX:+UseParalledlOldGC :設(shè)置并行年老代收集器
-XX:+UseConcMarkSweepGC :設(shè)置并發(fā)收集器
垃圾回收統(tǒng)計(jì)信息
-XX:+PrintHeapAtGC GC的heap詳情
-XX:+PrintGCDetails  GC詳情
-XX:+PrintGCTimeStamps  打印GC時(shí)間信息
-XX:+PrintTenuringDistribution    打印年齡信息等
-XX:+HandlePromotionFailure   老年代分配擔(dān)保(true  or false)
并行收集器設(shè)置
-XX:ParallelGCThreads=n :設(shè)置并行收集器收集時(shí)使用的CPU數(shù)啄枕。并行收集線程數(shù)。
-XX:MaxGCPauseMillis=n :設(shè)置并行收集最大暫停時(shí)間
-XX:GCTimeRatio=n :設(shè)置垃圾回收時(shí)間占程序運(yùn)行時(shí)間的百分比族沃。公式為1/(1+n)
并發(fā)收集器設(shè)置
-XX:+CMSIncrementalMode :設(shè)置為增量模式频祝。適用于單CPU情況。
-XX:ParallelGCThreads=n :設(shè)置并發(fā)收集器年輕代收集方式為并行收集時(shí)脆淹,使用的CPU數(shù)常空。并行收集線程數(shù)

2 設(shè)置并行度

操作場(chǎng)景

  • 并行度控制任務(wù)的數(shù)量,影響操作后數(shù)據(jù)被切分成的塊數(shù)盖溺。調(diào)整并行度讓任務(wù)的數(shù)量和每個(gè)任務(wù)處理的數(shù)據(jù)與機(jī)器的處理能力達(dá)到最優(yōu)漓糙。
  • 查看CPU使用情況和內(nèi)存占用情況,當(dāng)任務(wù)和數(shù)據(jù)不是平均分布在各節(jié)點(diǎn)烘嘱,而是集中在個(gè)別節(jié)點(diǎn)時(shí)昆禽,可以增大并行度使任務(wù)和數(shù)據(jù)更均勻的分布在各個(gè)節(jié)點(diǎn)。增加任務(wù)的并行度蝇庭,充分利用集群機(jī)器的計(jì)算能力醉鳖,一般并行度設(shè)置為集群CPU核數(shù)總和的2-3倍。

操作步驟

任務(wù)的并行度可以通過(guò)以下四種層次(按優(yōu)先級(jí)從高到低排列)指定哮内,用戶(hù)可以根據(jù)實(shí)際的內(nèi)存盗棵、CPU、數(shù)據(jù)以及應(yīng)用程序邏輯的情況調(diào)整并行度參數(shù)北发。

  • 算子層次
    一個(gè)算子纹因、數(shù)據(jù)源和sink的并行度可以通過(guò)調(diào)用setParallelism()方法來(lái)指定,例如
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();

DataStream<String> text = [...]
DataStream<Tuple2<String, Integer>> wordCounts = text
    .flatMap(new LineSplitter())
    .keyBy(0)
    .timeWindow(Time.seconds(5))
    .sum(1).setParallelism(5);

wordCounts.print();

env.execute("Word Count Example");
  • 執(zhí)行環(huán)境層次
    Flink程序運(yùn)行在執(zhí)行環(huán)境中琳拨。執(zhí)行環(huán)境為所有執(zhí)行的算子辐怕、數(shù)據(jù)源、data sink定義了一個(gè)默認(rèn)的并行度从绘。
    執(zhí)行環(huán)境的默認(rèn)并行度可以通過(guò)調(diào)用setParallelism()方法指定寄疏。例如:
final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
    env.setParallelism(3);
    DataStream<String> text = [...]
    DataStream<Tuple2<String, Integer>> wordCounts = [...]
    wordCounts.print();
    env.execute("Word Count Example");
  • 客戶(hù)端層次
    并行度可以在客戶(hù)端將job提交到Flink時(shí)設(shè)定是牢。對(duì)于CLI客戶(hù)端,可以通過(guò)“-p”參數(shù)指定并行度陕截。例如:
    ./bin/flink run -p 10 ../examples/*WordCount-java*.jar
  • 系統(tǒng)層次
    在系統(tǒng)級(jí)可以通過(guò)修改Flink客戶(hù)端conf目錄下的“flink-conf.yaml”文件中的“parallelism.default”配置選項(xiàng)來(lái)指定所有執(zhí)行環(huán)境的默認(rèn)并行度驳棱。

3.配置進(jìn)程參數(shù)

操作場(chǎng)景

  • Flink on YARN模式下,有JobManager和TaskManager兩種進(jìn)程农曲。在任務(wù)調(diào)度和運(yùn)行的過(guò)程中社搅,JobManager和TaskManager承擔(dān)了很大的責(zé)任。

  • 因而JobManager和TaskManager的參數(shù)配置對(duì)Flink應(yīng)用的執(zhí)行有著很大的影響意義乳规。用戶(hù)可通過(guò)如下操作對(duì)Flink集群性能做優(yōu)化形葬。

操作步驟

1.配置JobManager內(nèi)存。
  • JobManager負(fù)責(zé)任務(wù)的調(diào)度暮的,以及TaskManager笙以、RM之間的消息通信。當(dāng)任務(wù)數(shù)變多冻辩,任務(wù)平行度增大時(shí)猖腕,JobManager內(nèi)存都需要相應(yīng)增大。

您可以根據(jù)實(shí)際任務(wù)數(shù)量的多少恨闪,為JobManager設(shè)置一個(gè)合適的內(nèi)存倘感。
?在使用yarn-session命令時(shí),添加“-jm MEM”參數(shù)設(shè)置內(nèi)存咙咽。
?在使用yarn-cluster命令時(shí)老玛,添加“-yjm MEM”參數(shù)設(shè)置內(nèi)存。

2.配置TaskManager個(gè)數(shù)钧敞。

每個(gè)TaskManager每個(gè)核同時(shí)能跑一個(gè)task逻炊,所以增加了TaskManager的個(gè)數(shù)相當(dāng)于增大了任務(wù)的并發(fā)度。在資源充足的情況下犁享,可以相應(yīng)增加TaskManager的個(gè)數(shù)余素,以提高運(yùn)行效率。
?在使用yarn-session命令時(shí)炊昆,添加“-n NUM”參數(shù)設(shè)置TaskManager個(gè)數(shù)桨吊。
?在使用yarn-cluster命令時(shí),添加“-yn NUM”參數(shù)設(shè)置TaskManager個(gè)數(shù)凤巨。

3.配置TaskManager Slot數(shù)视乐。

每個(gè)TaskManager多個(gè)核同時(shí)能跑多個(gè)task,相當(dāng)于增大了任務(wù)的并發(fā)度敢茁。但是由于所有核共用TaskManager的內(nèi)存佑淀,所以要在內(nèi)存和核數(shù)之間做好平衡。
?在使用yarn-session命令時(shí)彰檬,添加“-s NUM”參數(shù)設(shè)置SLOT數(shù)伸刃。
?在使用yarn-cluster命令時(shí)谎砾,添加“-ys NUM”參數(shù)設(shè)置SLOT數(shù)。

4.配置TaskManager內(nèi)存捧颅。

TaskManager的內(nèi)存主要用于任務(wù)執(zhí)行景图、通信等。當(dāng)一個(gè)任務(wù)很大的時(shí)候碉哑,可能需要較多資源挚币,因而內(nèi)存也可以做相應(yīng)的增加。
?將在使用yarn-sesion命令時(shí)扣典,添加“-tm MEM”參數(shù)設(shè)置內(nèi)存妆毕。
?將在使用yarn-cluster命令時(shí),添加“-ytm MEM”參數(shù)設(shè)置內(nèi)存贮尖。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末笛粘,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子远舅,更是在濱河造成了極大的恐慌,老刑警劉巖痕钢,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图柏,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡任连,警方通過(guò)查閱死者的電腦和手機(jī)蚤吹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)随抠,“玉大人裁着,你說(shuō)我怎么就攤上這事」八” “怎么了二驰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秉沼。 經(jīng)常有香客問(wèn)我桶雀,道長(zhǎng),這世上最難降的妖魔是什么唬复? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任矗积,我火速辦了婚禮,結(jié)果婚禮上敞咧,老公的妹妹穿的比我還像新娘棘捣。我一直安慰自己,他們只是感情好休建,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布乍恐。 她就那樣靜靜地躺著评疗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪禁熏。 梳的紋絲不亂的頭發(fā)上壤巷,一...
    開(kāi)封第一講書(shū)人閱讀 49,749評(píng)論 1 289
  • 那天,我揣著相機(jī)與錄音瞧毙,去河邊找鬼胧华。 笑死,一個(gè)胖子當(dāng)著我的面吹牛宙彪,可吹牛的內(nèi)容都是我干的矩动。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼释漆,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼悲没!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起男图,我...
    開(kāi)封第一講書(shū)人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤示姿,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后逊笆,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體栈戳,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年难裆,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了子檀。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡乃戈,死狀恐怖褂痰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情症虑,我是刑警寧澤缩歪,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布,位于F島的核電站谍憔,受9級(jí)特大地震影響驶冒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜韵卤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一骗污、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧沈条,春花似錦需忿、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)涕烧。三九已至,卻和暖如春汗洒,著一層夾襖步出監(jiān)牢的瞬間议纯,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工溢谤, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留瞻凤,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓世杀,卻偏偏與公主長(zhǎng)得像阀参,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子瞻坝,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容