Ce diaporama a bien été signalé.

Luigi Paris.py meetup presentation

0

Partager

Chargement dans…3
×
1 sur 20
1 sur 20

Plus De Contenu Connexe

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 ?

×