[雪峰磁針石部落格]大資料Hadoop工具python教程9-Luigi工作流
管理Hadoop作業的官方工作流程排程程式是Apache Oozie。與許多其他Hadoop產品一樣,Oozie是用Java編寫的,是基於伺服器的Web應用程式,它執行執行Hadoop MapReduce和Pig的工作流作業。 Oozie工作流是在XML文件中指定的控制依賴性指導非迴圈圖(DAG)中排列的動作集合。雖然Oozie在Hadoop社群中有很多支援,但通過XML屬性配置工作流和作業的學習曲線非常陡峭。
Luigi是Spotify建立的Python替代方案,可以構建和配置複雜的批處理作業管道。它處理依賴項解析,工作流管理,視覺化等等。它還擁有龐大的社群,並支援許多Hadoop技術。在github上超過1萬星。
本章介紹Luigi的安裝和工作流程的詳細說明。
安裝
pip install luigi
工作流
在Luigi中,工作流由一系列操作組成,稱為任務。 Luigi任務是非特定的,也就是說,它們可以是任何可以用Python編寫的東西。任務的輸入和輸出資料的位置稱為目標(target)。目標通常對應於磁碟上,HDFS上或資料庫中的檔案位置。除了任務和目標之外,Luigi還利用引數來自定義任務的執行方式。
- 任務
任務是構成Luigi工作流的操作序列。每個任務都宣告其依賴於其他任務建立的目標。這樣Luigi能夠建立依賴鏈。
- 目標
目標是任務的輸入和輸出。最常見的目標是磁碟上的檔案,HDFS中的檔案或資料庫中的記錄。 Luigi包裝了底層檔案系統操作,以確保與目標的互動是原子的。這允許從故障點重放工作流,而不必重放任何已經成功完成的任務。
- 引數
引數允許通過允許值從命令列,以程式設計方式或從其他任務傳遞任務來自定義任務。例如,任務輸出的名稱可以通過引數傳遞給任務的日期來確定。
參考資料
- python測試開發專案實戰-目錄
- python工具書籍下載-持續更新
- python 3.7極速入門教程 – 目錄
- 原文地址
- 本文涉及的python測試開發庫 謝謝點贊!
- [本文相關海量書籍下載](https://github.com/china-testing/python-api-tesing/blob/master/books.md
工作流本示例
#!/usr/bin/env python
# 專案實戰討論QQ群630011153 144081101
# https://github.com/china-testing/python-api-tesing
import luigi
class InputFile(luigi.Task):
"""
A task wrapping a Target
"""
input_file = luigi.Parameter()
def output(self):
"""
Return the target for this task
"""
return luigi.LocalTarget(self.input_file)
class WordCount(luigi.Task):
"""
A task that counts the number of words in a file
"""
input_file = luigi.Parameter()
output_file = luigi.Parameter(default=`/tmp/wordcount`)
def requires(self):
"""
The task`s dependencies:
"""
return InputFile(self.input_file)
def output(self):
"""
The task`s output
"""
return luigi.LocalTarget(self.output_file)
def run(self):
"""
The task`s logic
"""
count = {}
ifp = self.input().open(`r`)
for line in ifp:
for word in line.strip().split():
count[word] = count.get(word, 0) + 1
ofp = self.output().open(`w`)
for k, v in count.items():
ofp.write(`{} {}
`.format(k, v))
ofp.close()
if __name__ == `__main__`:
luigi.run()
執行
$ python wordcount.py WordCount --local-scheduler --input-file /home/hduser_/input2.txt --output-file /tmp/wordcount2.txt
DEBUG: Checking if WordCount(input_file=/home/hduser_/input2.txt, output_file=/tmp/wordcount2.txt) is complete
DEBUG: Checking if InputFile(input_file=/home/hduser_/input2.txt) is complete
INFO: Informed scheduler that task WordCount__home_hduser__in__tmp_wordcount2__a94efba0f2 has status PENDING
INFO: Informed scheduler that task InputFile__home_hduser__in_0eced493f7 has status DONE
INFO: Done scheduling tasks
INFO: Running Worker with 1 processes
DEBUG: Asking scheduler for work...
DEBUG: Pending tasks: 1
INFO: [pid 21592] Worker Worker(salt=067173106, workers=1, host=andrew-PC, username=hduser_, pid=21592) running WordCount(input_file=/home/hduser_/input2.txt, output_file=/tmp/wordcount2.txt)
INFO: [pid 21592] Worker Worker(salt=067173106, workers=1, host=andrew-PC, username=hduser_, pid=21592) done WordCount(input_file=/home/hduser_/input2.txt, output_file=/tmp/wordcount2.txt)
DEBUG: 1 running tasks, waiting for next task to finish
INFO: Informed scheduler that task WordCount__home_hduser__in__tmp_wordcount2__a94efba0f2 has status DONE
DEBUG: Asking scheduler for work...
DEBUG: Done
DEBUG: There are no more tasks to run at this time
INFO: Worker Worker(salt=067173106, workers=1, host=andrew-PC, username=hduser_, pid=21592) was stopped. Shutting down Keep-Alive thread
INFO:
===== Luigi Execution Summary =====
Scheduled 2 tasks of which:
* 1 complete ones were encountered:
- 1 InputFile(input_file=/home/hduser_/input2.txt)
* 1 ran successfully:
- 1 WordCount(input_file=/home/hduser_/input2.txt, output_file=/tmp/wordcount2.txt)
This progress looks :) because there were no failed tasks or missing dependencies
===== Luigi Execution Summary =====
hduser_@andrew-PC:/home/andrew/code/HadoopWithPython/python/Luigi$ cat /tmp/wordcount2.txt
jack 2
be 2
nimble 1
quick 1
相關文章
- [雪峰磁針石部落格]資料分析工具pandas快速入門教程4-資料匯聚
- [雪峰磁針石部落格]tesseractOCR識別工具及pytesseract
- [雪峰磁針石部落格]multi-mechanize效能測試工具
- [雪峰磁針石部落格]資料倉儲快速入門教程1簡介
- [雪峰磁針石部落格]Bokeh資料視覺化工具1快速入門視覺化
- [雪峰磁針石部落格]python應用效能監控工具簡介Python
- [雪峰磁針石部落格]介面測試面試題面試題
- [雪峰磁針石部落格]2019-Python最佳資料科學工具庫Python資料科學
- [雪峰磁針石部落格]pythontkinter圖形工具樣式作業Python
- [雪峰磁針石部落格]pythonGUI工具書籍下載-持續更新PythonNGUI
- [雪峰磁針石部落格]python包管理工具:Conda和pip比較Python
- [雪峰磁針石部落格]可愛的python測試開發庫Python
- [雪峰磁針石部落格]2018最佳ssh免費登陸工具
- [雪峰磁針石部落格]python爬蟲cookbook1爬蟲入門Python爬蟲
- [雪峰磁針石部落格]軟體自動化測試初學者忠告
- [雪峰磁針石部落格]python標準模組介紹-string:文字常量和模板Python
- [雪峰磁針石部落格]2018最佳python編輯器和IDEPythonIDE
- [雪峰磁針石部落格]python計算機視覺深度學習1簡介Python計算機視覺深度學習
- [雪峰磁針石部落格]軟體測試專家工具包1web測試Web
- [雪峰磁針石部落格]python庫介紹-argparse:命令列選項及引數解析Python命令列
- [雪峰磁針石部落格]python計算機視覺深度學習2影像基礎Python計算機視覺深度學習
- [雪峰磁針石部落格]web開發工具flask中文英文書籍下載-持續更新WebFlask
- [雪峰磁針石部落格]使用python3和flask構建RESTfulAPI(介面測試服務)PythonFlaskRESTAPI
- [雪峰磁針石部落格]使用jython進行dubbo介面及ngrinder效能測試
- [雪峰磁針石部落格]flask構建自動化測試平臺1-helloFlask
- [雪峰磁針石部落格]flask構建自動化測試平臺3-模板Flask
- [雪峰磁針石部落格]pythonGUI作業:tkinter控制元件改變背景色PythonNGUI控制元件
- [雪峰磁針石部落格]滲透測試簡介1滲透測試簡介
- [雪峰磁針石部落格]selenium自動化測試工具python筆試面試專案實戰5鍵盤操作Python筆試面試
- [雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰1人臉識別計算機視覺深度學習
- [雪峰磁針石部落格]python網路作業:使用python的socket庫實現ICMP協議的pingPython協議
- [雪峰磁針石部落格]計算機視覺opcencv工具深度學習快速實戰2opencv快速入門計算機視覺深度學習OpenCV
- [雪峰磁針石部落格]flask構建自動化測試平臺7-新增google地圖FlaskGo地圖
- [雪峰磁針石部落格]python人工智慧作業:Windows使用SAPI和tkinter用不到40行實現文字轉語音工具Python人工智慧WindowsAPI
- [雪峰磁針石部落格]python3.7極速入門教程1安裝:Linux(Ubuntu18.04)及Windows上安裝AnacondaPythonLinuxUbuntuWindows
- [雪峰磁針石部落格]pythonopencv3例項(物件識別和擴增實境)1-影像幾何轉換PythonOpenCV物件
- [雪峰磁針石部落格]Python經典面試題:用3種方法實現堆疊和佇列並示例實際應用場景Python面試題佇列
- 大資料hadoop工具大資料Hadoop