Εκμάθηση Apache Oozie: Διάγραμμα ροής εργασίας, Χρονοπρογραμματιστής
⚡ Έξυπνη Σύνοψη
Το Apache Oozie είναι ο χρονοπρογραμματιστής ροής εργασίας για το Hadoop που εκτελεί εξαρτημένες εργασίες ως Κατευθυνόμενα Ακυκλικά Γράφημα, συνδυάζοντας μια μηχανή ροής εργασίας για ενέργειες MapReduce, Pig και Hive με μια μηχανή συντονισμού που καθοδηγείται από τον χρόνο και τη διαθεσιμότητα δεδομένων.
Τι είναι το Apache Oozie;
Το Apache Oozie είναι ένας προγραμματιστής ροής εργασίας για HadoopΕίναι ένα σύστημα που εκτελεί τη ροή εργασίας εξαρτώμενων εργασιών. Εδώ, οι χρήστες επιτρέπεται να δημιουργούν Κατευθυνόμενα Ακυκλικά Γράφημα ροών εργασίας, τα οποία μπορούν να εκτελούνται παράλληλα και διαδοχικά στο Hadoop.
Αποτελείται από δύο μέρη:
- Μηχανισμός ροής εργασίας: Η ευθύνη μιας μηχανής ροής εργασίας είναι να αποθηκεύει και να εκτελεί ροές εργασίας που αποτελούνται από εργασίες Hadoop, π.χ. ΜΕΙΩΣΗ ΧΑΡΤΗ, Χοίρος, Κυψέλη.
- Μηχανή συντονισμού: Εκτελεί εργασίες ροής εργασίας με βάση προκαθορισμένα χρονοδιαγράμματα και διαθεσιμότητα δεδομένων.
Το Oozie είναι επεκτάσιμο και μπορεί να διαχειριστεί την έγκαιρη εκτέλεση χιλιάδων ροών εργασίας (καθεμία από τις οποίες αποτελείται από δεκάδες εργασίες) σε ένα σύμπλεγμα Hadoop. Το παρακάτω διάγραμμα δείχνει πού βρίσκεται ο χρονοπρογραμματιστής σε σχέση με το σύμπλεγμα και τις εργασίες που οδηγεί.
Το Oozie είναι επίσης πολύ ευέλικτο. Κάποιος μπορεί εύκολα να ξεκινήσει, να σταματήσει, να αναστείλει και να επανεκτελέσει εργασίες. Το Oozie διευκολύνει πολύ την επανεκτέλεση αποτυχημένων ροών εργασίας. Κάποιος μπορεί εύκολα να καταλάβει πόσο δύσκολο μπορεί να είναι να ανακτήσει τις χαμένες ή αποτυχημένες εργασίες λόγω διακοπής λειτουργίας ή βλάβης. Είναι ακόμη δυνατό να παραλείψει έναν συγκεκριμένο κόμβο που έχει αποτύχει.
Κατάσταση έργου: Το Apache Oozie αποσύρθηκε από το Apache Software Foundation τον Φεβρουάριο του 2025 και η μετάβαση στο Σοφίτα Apache ολοκληρώθηκε τον Απρίλιο του 2025. Η τελική έκδοση παραμένει η 5.2.1 από τον Φεβρουάριο του 2021 και το αποθετήριο πηγαίου κώδικα είναι πλέον μόνο για ανάγνωση. Τα υπάρχοντα clusters εξακολουθούν να το εκτελούν, γι' αυτό και αξίζει να γνωρίζετε τους παρακάτω μηχανισμούς, αλλά οι νέοι αγωγοί συνήθως κατασκευάζονται στο Apache Airflow.
Πώς λειτουργεί το Oozie;
Το Oozie εκτελείται ως υπηρεσία στο σύμπλεγμα και οι πελάτες υποβάλλουν ορισμούς ροής εργασίας για άμεση ή μεταγενέστερη επεξεργασία.
Μια ροή εργασίας Oozie αποτελείται από κόμβους δράσης και κόμβους ροής ελέγχου.
Ένας κόμβος ενέργειας αντιπροσωπεύει μια εργασία ροής εργασίας, π.χ., μετακίνηση αρχείων σε ΚΑΕ, εκτέλεση μιας εργασίας MapReduce, Pig ή Hive, εισαγωγή δεδομένων χρησιμοποιώντας Κουτάλαή εκτελώντας ένα shell script ή ένα πρόγραμμα γραμμένο σε Java.
Ένας κόμβος ελέγχου ροής ελέγχει την εκτέλεση της ροής εργασίας μεταξύ των ενεργειών επιτρέποντας δομές όπως η λογική υπό όρους, όπου μπορούν να ακολουθηθούν διαφορετικοί κλάδοι ανάλογα με το αποτέλεσμα ενός προηγούμενου κόμβου ενέργειας.
Ο κόμβος έναρξης, ο κόμβος λήξης και ο κόμβος σφάλματος εμπίπτουν σε αυτήν την κατηγορία κόμβων.
- Έναρξη Κόμβου υποδηλώνει την έναρξη της εργασίας ροής εργασίας.
- Τελικός κόμβος σηματοδοτεί το τέλος της εργασίας.
- Κόμβος σφάλματος Υποδεικνύει την εμφάνιση ενός σφάλματος και το αντίστοιχο μήνυμα σφάλματος που θα εκτυπωθεί.
Στο τέλος της εκτέλεσης μιας ροής εργασίας, μια επανάκληση HTTP χρησιμοποιείται από την Oozie για να ενημερώσει τον πελάτη με την κατάσταση της ροής εργασίας. Η είσοδος ή η έξοδος από έναν κόμβο ενέργειας μπορεί επίσης να ενεργοποιήσει την επανάκληση.
Κόμβοι ελέγχου Oozie και τύποι δράσης
Πέρα από την αρχή, το τέλος και το σφάλμα, η ροή εργασίας XML υποστηρίζει ένα μικρό λεξιλόγιο κόμβων ελέγχου που διαμορφώνουν το γράφημα.
- απόφαση: Αξιολογεί μια έκφραση και στέλνει τη ροή εργασίας σε έναν από τους διάφορους κλάδους, το ισοδύναμο μιας πρότασης switch.
- πιρούνι: Διαχωρίζει τη διαδρομή έτσι ώστε δύο ή περισσότερες ενέργειες να εκτελούνται παράλληλα.
- ενώνω: Περιμένει να ολοκληρωθεί κάθε κλάδος μιας αντίστοιχης διχάλας πριν συνεχίσει.
- σκοτώνω: Τερματίζει αμέσως τη ροή εργασίας και καταγράφει το μήνυμα αποτυχίας.
Οι κόμβοι δράσης καλύπτουν την ίδια την εργασία και ο καθένας έχει το δικό του στοιχείο XML:
- map-reduce, pig, hive και sqoop Οι ενέργειες ξεκινούν την αντίστοιχη εργασία Hadoop.
- Ιάβα εκτελεί μια κύρια κλάση στο σύμπλεγμα. κέλυφος και ssh εκτέλεση σεναρίων.
- fs εκτελεί εργασίες οικιακής φροντίδας HDFSping όπως μετακίνηση, διαγραφή, mkdir και chmod.
- ΗΛΕΚΤΡΟΝΙΚΗ ΔΙΕΥΘΥΝΣΗ ειδοποιεί τους παραλήπτες και δευτερεύουσα ροή εργασίας καλεί μια άλλη εφαρμογή ροής εργασίας.
Παράδειγμα διαγράμματος ροής εργασίας
Το παρακάτω διάγραμμα tracαποτελεί μια μικρή ροή εργασίας από τον αρχικό κόμβο, μέσω μιας ενέργειας MapReduce, είτε στον τελικό κόμβο είτε στη διαδρομή σφάλματος όταν η ενέργεια αποτύχει.
Τύποι εργασιών Oozie
Το Oozie περιγράφει την εργασία σε τρία επίπεδα. Κάθε επίπεδο περιβάλλει το επίπεδο που βρίσκεται από κάτω, επομένως ένα σύνολο ελέγχει τελικά πολλές μεμονωμένες ροές εργασίας.
| Τύπος εργασίας | Τι ορίζει | Ενεργοποιείται από |
|---|---|---|
| Ροή εργασίας | Ένα κατευθυνόμενο ακυκλικό γράφημα κόμβων δράσης και ελέγχου, γραμμένο σε workflow.xml | Χειροκίνητη υποβολή ή συντονιστής |
| Συντονιστής | Ένα επαναλαμβανόμενο πρόγραμμα για μία ροή εργασίας, με ώρα έναρξης, ώρα λήξης και συχνότητα | Χρόνος ρολογιού και διαθεσιμότητα δεδομένων εισόδου |
| Δέσμη | Μια συλλογή εφαρμογών συντονιστή που διαχειρίζονται μαζί ως ένας αγωγός δεδομένων | Ισχύει ώρα έναρξης για όλους τους συντονιστές της |
Η διάκριση έχει σημασία στην πράξη: μια ροή εργασίας απαντά στο «τι εκτελείται», ένας συντονιστής απαντά στο «πότε εκτελείται» και μια δέσμη απαντά στο «τι ξεκινά και τι σταματά μαζί».
Συσκευασία και ανάπτυξη μιας εφαρμογής ροής εργασίας Oozie
Μια εφαρμογή ροής εργασίας αποτελείται από τον ορισμό ροής εργασίας και όλους τους σχετικούς πόρους, όπως αρχεία MapReduce Jar, scripts Pig κ.λπ. Οι εφαρμογές πρέπει να ακολουθούν μια απλή δομή καταλόγου και αναπτύσσονται σε HDFS, ώστε το Oozie να έχει πρόσβαση σε αυτές.
Ένα παράδειγμα δομής καταλόγου φαίνεται παρακάτω:
<name of workflow>/
├── lib/
│ └── hadoop-examples.jar
└── workflow.xml
Είναι απαραίτητο να διατηρήσετε το workflow.xml (ένα αρχείο ορισμού ροής εργασίας) στον κατάλογο ανώτατου επιπέδου (τον γονικό κατάλογο που φέρει το όνομα της ροής εργασίας). Ο κατάλογος lib περιέχει αρχεία Jar που περιέχουν κλάσεις MapReduce. Μια εφαρμογή ροής εργασίας που συμμορφώνεται με αυτήν τη διάταξη μπορεί να δημιουργηθεί με οποιοδήποτε εργαλείο δημιουργίας, π.χ. Ant ή Maven.
Μια τέτοια έκδοση πρέπει να αντιγραφεί στο HDFS χρησιμοποιώντας μια εντολή, για παράδειγμα:
% hadoop fs -put hadoop-examples/target/<name of workflow dir> name of workflow
Βήματα για την εκτέλεση μιας εργασίας ροής εργασίας Oozie
Σε αυτήν την ενότητα, θα δούμε πώς να εκτελέσετε μια εργασία ροής εργασίας. Για να το εκτελέσουμε, θα χρησιμοποιήσουμε το εργαλείο γραμμής εντολών Oozie (πρόγραμμα πελάτη που επικοινωνεί με τον διακομιστή Oozie).
1. Εξαγωγή του OOZIE_URL μεταβλητή περιβάλλοντος, η οποία λέει στην εντολή oozie ποιον διακομιστή Oozie να χρησιμοποιήσει (εδώ χρησιμοποιούμε έναν που εκτελείται τοπικά):
% export OOZIE_URL="http://localhost:11000/oozie"
2. Εκτελέστε την εργασία ροής εργασίας χρησιμοποιώντας:
% oozie job -config ch05/src/main/resources/max-temp-workflow.properties -run
Η επιλογή -config αναφέρεται σε τοπικό Java το αρχείο ιδιοτήτων που περιέχει ορισμούς για τις παραμέτρους στο αρχείο XML ροής εργασίας, καθώς και το oozie.wf.application.path, το οποίο λέει στο Oozie τη θέση της εφαρμογής ροής εργασίας στο HDFS.
Παράδειγμα περιεχομένων του αρχείου ιδιοτήτων:
nameNode=hdfs://localhost:8020 jobTracker=localhost:8021 oozie.wf.application.path=${nameNode}/user/${user.name}/<name of workflow>
3. Λάβετε την κατάσταση της εργασίας ροής εργασίας.
Η κατάσταση μιας εργασίας ροής εργασίας μπορεί να προβληθεί χρησιμοποιώντας την υποεντολή 'job' με την επιλογή '-info', καθορίζοντας το αναγνωριστικό εργασίας μετά το '-info'.
e.g., % oozie job -info <job id>
Η έξοδος εμφανίζει μια κατάσταση η οποία είναι μία από τις εξής: ΕΚΤΕΛΕΣΗ, ΣΤΑΜΑΤΗΣΕ ή ΕΠΕΤΥΧΗΣΕ.
4. Τα αποτελέσματα της επιτυχούς εκτέλεσης της ροής εργασίας μπορούν να φανούν χρησιμοποιώντας μια εντολή Hadoop όπως:
% hadoop fs -cat <location of result>
Γιατί να χρησιμοποιήσετε το Oozie;
Ο κύριος σκοπός της χρήσης του Oozie είναι η διαχείριση διαφορετικών τύπων εργασιών που υποβάλλονται σε επεξεργασία σε ένα σύστημα Hadoop.
Οι εξαρτήσεις μεταξύ των εργασιών καθορίζονται από έναν χρήστη με τη μορφή Κατευθυνόμενων Ακυκλικών Γραφημάτων. Το Oozie καταναλώνει αυτές τις πληροφορίες και φροντίζει για την εκτέλεσή τους με τη σωστή σειρά, όπως ορίζεται σε μια ροή εργασίας. Με αυτόν τον τρόπο, εξοικονομείται χρόνος του χρήστη για τη διαχείριση μιας πλήρους ροής εργασίας. Επιπλέον, το Oozie διαθέτει μια διάταξη για τον καθορισμό της συχνότητας εκτέλεσης μιας συγκεκριμένης εργασίας.
Χαρακτηριστικά του Oozie
- Το Oozie διαθέτει ένα API πελάτη και μια διεπαφή γραμμής εντολών που μπορεί να χρησιμοποιηθεί για την εκκίνηση, τον έλεγχο και την παρακολούθηση εργασιών από ένα Java . To
- Χρησιμοποιώντας τα API υπηρεσιών Web, μπορεί κανείς να ελέγχει εργασίες από οπουδήποτε.
- Το Oozie έχει μια διάταξη για την εκτέλεση εργασιών που έχουν προγραμματιστεί να εκτελούνται περιοδικά.
- Το Oozie έχει μια διάταξη για την αποστολή ειδοποιήσεων μέσω email μετά την ολοκλήρωση των εργασιών.
Oozie εναντίον Apache Airflow
Επειδή το Oozie έχει αποσυρθεί, οι περισσότερες ομάδες που αξιολογούν έναν προγραμματιστή σήμερα συγκρίνουν αυτά που ήδη εκτελούν με το Apache Airflow. Τα δύο εργαλεία λύνουν το ίδιο πρόβλημα από αντίθετες κατευθύνσεις.
| Άποψη | Απάτσι Όουζι | Ροή αέρα Apache |
|---|---|---|
| Γλώσσα ορισμού | Ροές εργασίας γραμμένες ως XML | Τα DAG γράφονται ως Python κωδικός |
| Scope | Χτισμένο γύρω από ενέργειες Hadoop όπως MapReduce, Pig, Hive και Sqoop | Γενικής χρήσης, με τελεστές για υπηρεσίες cloud, βάσεις δεδομένων και κοντέινερ |
| Χρονοδρομολόγηση | Θέσεις εργασίας συντονιστή που καθορίζονται από τον χρόνο και τη διαθεσιμότητα δεδομένων | Προγραμματίστε διαστήματα και αισθητήρες που περιμένουν σε εξωτερικές συνθήκες |
| Κατάσταση του έργου | Αποσύρθηκε στη σοφίτα των Apache το 2025· τελική έκδοση 5.2.1 | Ενεργά αναπτυγμένο έργο Apache ανώτατου επιπέδου |
Το Oozie παραμένει η απλούστερη επιλογή σε ένα cluster που το εκτελεί ήδη, επειδή οι ενέργειες αντιστοιχίζονται ένα προς ένα σε στοιχεία Hadoop. Η ροή αέρα είναι η πρακτική επιλογή για οτιδήποτε νέο, ειδικά όταν ένας αγωγός εκτείνεται πέρα από το Hadoop.


