luigi任務(wù)調(diào)度框架 - CSDN博客
http://blog.csdn.net/u013063153/article/details/72817472
Luigi
luigi的github地址:https://github.com/spotify/luigi *
介紹
Luigi是基于python語言的择葡,可幫助建立復(fù)雜流式批處理任務(wù)管理系統(tǒng)紧武。它主要提供了以下功能:任務(wù)依賴管理、工作流管理敏储、任務(wù)可視化阻星、錯(cuò)誤故障處理機(jī)制、命令行交互等已添。Luigi的主要目的是為了解決需要長期運(yùn)行的流式批處理任務(wù)的管理妥箕。你可以鏈接很多個(gè)任務(wù),使它們自動(dòng)化更舞,并進(jìn)行故障管理畦幢。上面所說的任務(wù)可以是任何類型的任務(wù),通常來說有如下幾種:Hadoop任務(wù)疏哗、從數(shù)據(jù)庫導(dǎo)入或?qū)С觥C(jī)器學(xué)習(xí)算法訓(xùn)練等禾怠。
API概覽
在Luigi中有兩個(gè)基礎(chǔ)類:Task, Target返奉。 另外,Parameter類對(duì)于如何控制Task類的運(yùn)行是一個(gè)重要的類吗氏。
Target
廣義地講芽偏,Target可對(duì)應(yīng)為磁盤上的文件,或HDFS上文件,或checkpoint點(diǎn)弦讽,或數(shù)據(jù)庫等污尉。對(duì)于Target來說膀哲,唯一需要實(shí)現(xiàn)的方法為exists,返回為True表示存在,否則不存在返回為False. 在實(shí)際應(yīng)用時(shí)被碗,寫一個(gè)Target子類是很少需要用到的某宪。直接使用開箱即可用的LocalTarget及 hdfs.HdfsTarget類就夠用了。Luigi提供了Gzip支持锐朴,通過參數(shù)format=format.Gzip即可兴喂。
Task
Task是任務(wù)邏輯運(yùn)行的地方,提供了一些方法來定義任務(wù)的邏輯行為焚志,主要有run, output, requires.
Task通過類名及參數(shù)值做為標(biāo)識(shí)符進(jìn)行唯一區(qū)分衣迷。實(shí)際上,在同一個(gè)worker中酱酬,兩個(gè)擁有相同類名及相同參數(shù)值的task不單單只是equal壶谒,而且實(shí)際上還是同一個(gè)實(shí)例。然而膳沽,如果參數(shù)在構(gòu)建聲明時(shí)指定了參數(shù) significant=False 汗菜,對(duì)于Task的標(biāo)識(shí)是不起影響的。對(duì)于多個(gè)Task贵少,它們的類名相同呵俏,只是指定了 significant=False 的參數(shù)值才不同,而未指定 significant=False 的參數(shù)值是相同的滔灶,對(duì)于這些Task來說普碎,它們擁有相同的標(biāo)識(shí)符,即 hash(taskA) == hash(taskB) 是True的录平,但它們來自于不同的實(shí)例麻车。
Task.requires
requires方法用來指定依賴關(guān)系,除了可指定對(duì)其他Task的依賴斗这,還可指定為對(duì)自身Task的依賴动猬。requires返回值可為 dicts/lists/tuples 或其他類別的封裝。
Task.output
output方法返回一個(gè)或多個(gè)的Target對(duì)象表箭,類似于requires方法赁咙,可返回適應(yīng)于實(shí)際需要的對(duì)于Target的任何封裝。實(shí)際上免钻,建議只返回一個(gè)Target彼水,因?yàn)槿绻祷囟鄠€(gè),atomicity將會(huì)被丟失极舔,除非Task能夠確保多個(gè)Target能被原子性地創(chuàng)建凤覆。當(dāng)然,如果原子性不是非常重要的時(shí)候拆魏,那么就可以放心地返回多個(gè)Target盯桦。
Task.run
run方法包含實(shí)際真正執(zhí)行的代碼慈俯。注意到,Luigi將任何事情切分為兩個(gè)階段拥峦,首先它指出在tasks之間的依賴關(guān)系贴膘,然后它運(yùn)行每一件事情。 input() 方法是一個(gè)內(nèi)部幫助方法事镣,用來替代在requires 中的對(duì)象的對(duì)應(yīng)輸出步鉴。