Ce diaporama a bien été signalé.
Nous utilisons votre profil LinkedIn et vos données d’activité pour vous proposer des publicités personnalisées et pertinentes. Vous pouvez changer vos préférences de publicités à tout moment.
Moi
~2 ans de python
Full Stack dev chez AlephD
jonasbru.com
DATA PIPELINES MADE EASY
Le problème
Des scripts...
...qui dépendent du résultat d’autres scripts
...qui dépendent eux aussi d’autres scripts
...qu...
$> pip install luigi
Luigi à la rescousse
Luigi s’occupe..
..de gérer les dépendances entre les tâches
..de gérer la reprise en cas d’erreur
.....
Luigi à la rescousse.. mais pas trop
Il ne va pas..
..lancer les tâches
..repartir les tâches sur votre cluster
..faire le...
La base
Task & Target
Task
Task == N’importe quoi
Trois méthodes à implémenter :
requires() --> Task
run()
output() --> Target
Target
Target == Un résultat d’une tâche
un fichier sur disque
..ou une partition HDFS
..ou une ligne dans votre BDD
..ou ...
Example time!
Mail journalier des chansons les + écoutés
Télécharger la
liste des chansons
écoutées
Calculer le top 10 Env...
class DownloadSongs(luigi.Task):
date = luigi.DateParameter()
def output(self):
return luigi.LocalTarget(self.date.strftim...
class TopTen(luigi.Task):
date = luigi.DateParameter()
def requires(self):
return DownloadSongs(date=self.date)
def output...
class SendMailTopSongs(luigi.Task):
date = luigi.DateParameter()
def requires(self):
return TopTen(date=self.date)
def run...
Et pour lancer tout ça..
$> python topSongs.py SendMailTopSongs --date 2015-12-09
Mieux dans un CRON
*/10 * * * * python t...
Central Scheduler
Organise et coordonne les différents workers
Une tâche n’est lancée qu’une seule fois
Central Scheduler
Et bien plus !
Très bien intégré à Hadoop
Multiprocessing basique
Gestion des priorités
Ressources
Code simple
Mainteneurs...
Des questions ?
Luigi Paris.py meetup presentation
Luigi Paris.py meetup presentation
Prochain SlideShare
Chargement dans…5
×

Luigi Paris.py meetup presentation

264 vues

Publié le

General presentation of the Luigi library (in french)

Publié dans : Technologie
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Luigi Paris.py meetup presentation

  1. 1. Moi ~2 ans de python Full Stack dev chez AlephD jonasbru.com
  2. 2. DATA PIPELINES MADE EASY
  3. 3. Le problème Des scripts... ...qui dépendent du résultat d’autres scripts ...qui dépendent eux aussi d’autres scripts ...qui dépendent des données d’un service externe ...qui plante une fois sur trois ...le tout lancé depuis douze CRON
  4. 4. $> pip install luigi
  5. 5. Luigi à la rescousse Luigi s’occupe.. ..de gérer les dépendances entre les tâches ..de gérer la reprise en cas d’erreur ..d'éviter d’avoir des tâches qui tournent en double ..de visualiser l’état de tout ça
  6. 6. Luigi à la rescousse.. mais pas trop Il ne va pas.. ..lancer les tâches ..repartir les tâches sur votre cluster ..faire le café
  7. 7. La base Task & Target
  8. 8. Task Task == N’importe quoi Trois méthodes à implémenter : requires() --> Task run() output() --> Target
  9. 9. Target Target == Un résultat d’une tâche un fichier sur disque ..ou une partition HDFS ..ou une ligne dans votre BDD ..ou n’importe quoi qui implémente exists() --> bool
  10. 10. Example time! Mail journalier des chansons les + écoutés Télécharger la liste des chansons écoutées Calculer le top 10 Envoyer le mail
  11. 11. class DownloadSongs(luigi.Task): date = luigi.DateParameter() def output(self): return luigi.LocalTarget(self.date.strftime('songs_%Y_%m_%d.tsv')) def run(self): song_list = get_songs(self.date) # api call with self.output().open('w') as out_file: for song in song_list: out_file.write('{}n'.format(song)) Télécharger la liste des chansons écoutées Calculer le top 10 Envoyer le mail
  12. 12. class TopTen(luigi.Task): date = luigi.DateParameter() def requires(self): return DownloadSongs(date=self.date) def output(self): return luigi.LocalTarget(self.date.strftime('top_%Y_%m_%d.tsv')) def run(self): top = [] with self.input().open('r') as in_file: top = Counter(in_file.readlines()).most_common(10) with self.output().open('w') as out_file: for song, count in top: out_file.write('{}t{}n'.format(song, count)) Télécharger la liste des chansons écoutées Calculer le top 10 Envoyer le mail
  13. 13. class SendMailTopSongs(luigi.Task): date = luigi.DateParameter() def requires(self): return TopTen(date=self.date) def run(self): with self.input().open('r') as top_ten_file: send_email(top_ten_file) Télécharger la liste des chansons écoutées Calculer le top 10 Envoyer le mail
  14. 14. Et pour lancer tout ça.. $> python topSongs.py SendMailTopSongs --date 2015-12-09 Mieux dans un CRON */10 * * * * python topSongs.py SendMailTopSongs --days 10
  15. 15. Central Scheduler Organise et coordonne les différents workers Une tâche n’est lancée qu’une seule fois
  16. 16. Central Scheduler
  17. 17. Et bien plus ! Très bien intégré à Hadoop Multiprocessing basique Gestion des priorités Ressources Code simple Mainteneurs très actifs
  18. 18. Des questions ?

×