Spring Bacth的遠(yuǎn)程分區(qū)和本地分區(qū)

spring batch框架主要應(yīng)用于批處理數(shù)據(jù)量較大的后臺(tái)業(yè)務(wù),使用這個(gè)框架能夠更靈活司抱,使用各種姿勢(shì)對(duì)數(shù)據(jù)進(jìn)行花樣的操作莉炉,但是數(shù)據(jù)量到達(dá)千萬(wàn)級(jí)別之后驻呐,單機(jī)的處理任務(wù)效率明顯下滑,并行和分區(qū)就是面對(duì)這個(gè)問(wèn)題的靈丹妙藥践磅。

通過(guò)查閱中文官網(wǎng)单刁,對(duì)Spring Bacth有了更深層次的理解,強(qiáng)裂推薦府适,文檔寫(xiě)的真心不錯(cuò)羔飞,對(duì)于多種分布式實(shí)現(xiàn)提供了很好思路。

https://www.bookstack.cn/read/SpringBatchReferenceCN/13_integration-README.md

首先來(lái)了解并行和分區(qū):

什么時(shí)候使用并行檐春,多個(gè)任務(wù)不使用同一個(gè)文件逻淌,數(shù)據(jù)表,索引空間時(shí)可以使用并行疟暖,這很簡(jiǎn)單卡儒。

什么時(shí)候使用分區(qū),如果確實(shí)存在共享和競(jìng)爭(zhēng)俐巴,那么這個(gè)服務(wù)就應(yīng)該使用分區(qū)數(shù)據(jù)來(lái)實(shí)現(xiàn)朋贬,另一種選擇是使用控制表來(lái)構(gòu)建一個(gè)架構(gòu)模塊以維護(hù)他們之間的相互依賴(lài)關(guān)系,控制表應(yīng)該為每個(gè)共享資源分配一行記錄窜骄,不管這些資源是否被某個(gè)程序所使用锦募,執(zhí)行并行作業(yè)的批處理架構(gòu)或程序隨后將查詢(xún)這個(gè)控制表,來(lái)確定是否可以訪(fǎng)問(wèn)所需的資源邻遏。

工作中值得一探究竟是就是Spring Batch的分區(qū)糠亩,分區(qū)又分為本地分區(qū)和遠(yuǎn)程分區(qū)。我個(gè)人理解這本地和遠(yuǎn)程的分別在于:

本地分區(qū)准验,一個(gè)完整的reader赎线,processor,writer執(zhí)行步驟step被切割成多線(xiàn)程同時(shí)執(zhí)行

遠(yuǎn)程分區(qū):一個(gè)完整的reader糊饱,processor垂寥,writer執(zhí)行步驟step被切割后分發(fā)到多節(jié)點(diǎn)執(zhí)行

先從比較簡(jiǎn)單的本地分區(qū)上手。

本地分區(qū):

通過(guò)查看spring batch官方文檔,了解到分區(qū)的核心思想是master-slave:

把一個(gè)步驟滞项,拆分成多個(gè)步驟執(zhí)行:

Master-Slave

上代碼進(jìn)行解析狭归,step步驟所需的reader,processor文判,writer

1过椎、本文讀取數(shù)據(jù)的方式,使用的是框架提供的API實(shí)現(xiàn)數(shù)據(jù)庫(kù)分頁(yè)讀取MybatisPagingItemReader戏仓,工作中常用ItemReader自定義實(shí)現(xiàn)

自定義reader

2疚宇、自定義處理類(lèi)實(shí)現(xiàn)ItemProcessor

自定義Processor

3、文件寫(xiě)入赏殃,使用框架自帶的API實(shí)現(xiàn)寫(xiě)入csv文件敷待,F(xiàn)latFileItemWriter,工作中常用ItemWriter自定義實(shí)現(xiàn)

繼承FlatFileItemWriter

4仁热、啟動(dòng)類(lèi)代碼實(shí)現(xiàn)

接一下張


啟動(dòng)類(lèi)

5讼撒、本地分區(qū)分割器實(shí)現(xiàn)

分割器實(shí)現(xiàn)

執(zhí)行分區(qū)效果如下:

文件個(gè)數(shù)對(duì)應(yīng)分區(qū)線(xiàn)程數(shù),由參數(shù)gridSize決定股耽,本文gridSize=10根盒,對(duì)應(yīng)生成10個(gè)文件

運(yùn)行結(jié)果

以上實(shí)現(xiàn)的是單節(jié)點(diǎn)多線(xiàn)程處理文件,但只能一定限度上提升批處理的執(zhí)行效率物蝙,對(duì)于千萬(wàn)級(jí)的數(shù)據(jù)處理還遠(yuǎn)遠(yuǎn)不夠炎滞,如過(guò)能做到多節(jié)點(diǎn)多線(xiàn)程才是真正能夠更好提升效率的解決方法,這就是接下來(lái)要說(shuō)的遠(yuǎn)程分區(qū)诬乞。通過(guò)看完中文官方文檔册赛,發(fā)現(xiàn)真正想實(shí)現(xiàn)遠(yuǎn)程分區(qū)的代碼實(shí)現(xiàn),過(guò)分復(fù)雜震嫉,并非是通過(guò)少量的偽代碼就能實(shí)現(xiàn)功能森瘪,所以本文著重在于提供遠(yuǎn)程分區(qū)的一種實(shí)現(xiàn)思路,并不拓展開(kāi)講票堵。

想明白遠(yuǎn)程分區(qū)就必須以深刻理解以下幾個(gè)組件為前提扼睬,為什么呢,因?yàn)楸镜胤謪^(qū)可以直接使用框架自己帶實(shí)現(xiàn)悴势,僅僅需要去實(shí)現(xiàn)Partitioner接口即可窗宇,但是遠(yuǎn)程分區(qū)涉及多節(jié)點(diǎn)之間的通信,往往需要自定義實(shí)現(xiàn):

1特纤、遠(yuǎn)程分區(qū)處理器(PartitionHandler)军俊,PartitionHandler組件知道遠(yuǎn)程網(wǎng)格環(huán)境的組織結(jié)構(gòu)。 它可以發(fā)送step的上下文StepExecution請(qǐng)求給遠(yuǎn)端Steps,采用某種具體的數(shù)據(jù)格式捧存,通過(guò)自定義實(shí)PartitionHandler接口粪躬,實(shí)現(xiàn)消息的遠(yuǎn)程分發(fā)担败,PartitionHandler接口可以有各種結(jié)構(gòu)的實(shí)現(xiàn)類(lèi): 如RMI遠(yuǎn)程方法調(diào)用,EJB遠(yuǎn)程調(diào)用,自定義web服務(wù)、JMS镰官、Java Spaces, 共享內(nèi)存網(wǎng)格(如Terracotta或Coherence)提前、網(wǎng)格執(zhí)行結(jié)構(gòu)(如GridGain)。不論是哪一種選型都是為了實(shí)現(xiàn)網(wǎng)絡(luò)通信朋魔。

2岖研、分割器卿操,Partitioner警检,分割器在本地分區(qū)也同樣會(huì)使用,上面有相關(guān)代碼貼圖害淤,它的職責(zé)就是為新的step實(shí)例生成執(zhí)行環(huán)境(contexts),作為輸入?yún)?shù)

3扇雕、各個(gè)從節(jié)點(diǎn)接收到分區(qū)的消息,將輸入數(shù)據(jù)綁定到 Steps窥摄,并立即執(zhí)行镶奉,將實(shí)現(xiàn)多節(jié)點(diǎn)處理文件

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市崭放,隨后出現(xiàn)的幾起案子哨苛,更是在濱河造成了極大的恐慌,老刑警劉巖币砂,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件建峭,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡决摧,警方通過(guò)查閱死者的電腦和手機(jī)亿蒸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)掌桩,“玉大人边锁,你說(shuō)我怎么就攤上這事〔ǖ海” “怎么了盒使?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)君旦。 經(jīng)常有香客問(wèn)我胰耗,道長(zhǎng),這世上最難降的妖魔是什么隔躲? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任摩梧,我火速辦了婚禮,結(jié)果婚禮上宣旱,老公的妹妹穿的比我還像新娘仅父。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布笙纤。 她就那樣靜靜地躺著耗溜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪省容。 梳的紋絲不亂的頭發(fā)上抖拴,一...
    開(kāi)封第一講書(shū)人閱讀 51,482評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音腥椒,去河邊找鬼阿宅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛笼蛛,可吹牛的內(nèi)容都是我干的洒放。 我是一名探鬼主播,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼滨砍,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼往湿!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起惋戏,我...
    開(kāi)封第一講書(shū)人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤领追,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后响逢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體绒窑,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年龄句,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了回论。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡分歇,死狀恐怖傀蓉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情职抡,我是刑警寧澤葬燎,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站缚甩,受9級(jí)特大地震影響谱净,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜擅威,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一壕探、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧郊丛,春花似錦李请、人聲如沸瞧筛。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)较幌。三九已至,卻和暖如春白翻,著一層夾襖步出監(jiān)牢的瞬間乍炉,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工滤馍, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留岛琼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓纪蜒,卻偏偏與公主長(zhǎng)得像衷恭,于是被迫代替她去往敵國(guó)和親此叠。 傳聞我的和親對(duì)象是個(gè)殘疾皇子纯续,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

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