Εκμάθηση Apache Oozie: Διάγραμμα ροής εργασίας, Χρονοπρογραμματιστής

⚡ Έξυπνη Σύνοψη

Το Apache Oozie είναι ο χρονοπρογραμματιστής ροής εργασίας για το Hadoop που εκτελεί εξαρτημένες εργασίες ως Κατευθυνόμενα Ακυκλικά Γράφημα, συνδυάζοντας μια μηχανή ροής εργασίας για ενέργειες MapReduce, Pig και Hive με μια μηχανή συντονισμού που καθοδηγείται από τον χρόνο και τη διαθεσιμότητα δεδομένων.

  • 🔘 Δύο κινητήρες: Μια μηχανή ροής εργασίας εκτελεί γραφήματα εργασιών Hadoop, ενώ μια μηχανή συντονισμού τα ενεργοποιεί σύμφωνα με το χρονοδιάγραμμα ή κατά την άφιξη δεδομένων.
  • ☑️ Τύποι κόμβων: Οι κόμβοι δράσης εκτελούν εργασία. Οι κόμβοι ελέγχου, όπως οι κόμβοι απόφασης, διακλάδωσης και σύνδεσης, κατευθύνουν τη διαδρομή.
  • ✅ Τρεις τύποι εργασίας: Οι εργασίες ροής εργασίας, συντονιστή και ομαδοποίησης συσσωρεύονται σε μια ολοκληρωμένη σωλήνωση δεδομένων.
  • 🧪 Ανάπτυξη: Μια εφαρμογή ροής εργασίας είναι ένας κατάλογος που περιέχει το workflow.xml και έναν φάκελο lib, τα οποία αντιγράφονται στο HDFS.
  • ️ Γραμμή εντολών: Ορισμός OOZIE_URL, υποβάλετέ το με την εντολή oozie job -run και, στη συνέχεια, κάντε δημοσκόπηση με την εντολή oozie job -info μέχρι να αναφέρει ΕΠΙΤΥΧΗΣ.
  • ⚠️ Κατάσταση έργου: Το Oozie αποσύρθηκε στο Apache Attic το 2025, επομένως οι νέοι αγωγοί συνήθως χρησιμοποιούν Apache Airflow.

Εκπαιδευτικό σεμινάριο Apache Oozie που καλύπτει τη ροή εργασίας, τις εργασίες συντονιστή και τον προγραμματισμό Hadoop

Τι είναι το Apache Oozie;

Το Apache Oozie είναι ένας προγραμματιστής ροής εργασίας για HadoopΕίναι ένα σύστημα που εκτελεί τη ροή εργασίας εξαρτώμενων εργασιών. Εδώ, οι χρήστες επιτρέπεται να δημιουργούν Κατευθυνόμενα Ακυκλικά Γράφημα ροών εργασίας, τα οποία μπορούν να εκτελούνται παράλληλα και διαδοχικά στο Hadoop.

Αποτελείται από δύο μέρη:

  • Μηχανισμός ροής εργασίας: Η ευθύνη μιας μηχανής ροής εργασίας είναι να αποθηκεύει και να εκτελεί ροές εργασίας που αποτελούνται από εργασίες Hadoop, π.χ. ΜΕΙΩΣΗ ΧΑΡΤΗ, Χοίρος, Κυψέλη.
  • Μηχανή συντονισμού: Εκτελεί εργασίες ροής εργασίας με βάση προκαθορισμένα χρονοδιαγράμματα και διαθεσιμότητα δεδομένων.

Το Oozie είναι επεκτάσιμο και μπορεί να διαχειριστεί την έγκαιρη εκτέλεση χιλιάδων ροών εργασίας (καθεμία από τις οποίες αποτελείται από δεκάδες εργασίες) σε ένα σύμπλεγμα Hadoop. Το παρακάτω διάγραμμα δείχνει πού βρίσκεται ο χρονοπρογραμματιστής σε σχέση με το σύμπλεγμα και τις εργασίες που οδηγεί.

Χρονοπρογραμματιστής ροής εργασίας Apache 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

Το 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.

Συχνές Ερωτήσεις

Όχι. Το Λογισμικό Apache Foundation Αποσύρθηκε το Oozie τον Φεβρουάριο του 2025 και ολοκληρώθηκε η μετακόμιση στο Attic τον Απρίλιο του 2025. Η τελική έκδοση είναι η 5.2.1 από τον Φεβρουάριο του 2021 και το αποθετήριο είναι μόνο για ανάγνωση, αν και η τεκμηρίωση παραμένει online.

Οι βοηθοί τεχνητής νοημοσύνης μετατρέπουν μια περιγραφόμενη διοχέτευση σε διαμόρφωση χρονοπρογραμματιστή, εξηγούν γιατί ένα γράφημα εργασίας παρουσίασε αδιέξοδο και συνοψίζουν τα αρχεία καταγραφής συμπλέγματος σε μια πιθανή βασική αιτία. Χρήσιμο για το πρώτο προσχέδιο και για τη διαλογή, όχι για την έγκριση ενός χρονοδιαγράμματος παραγωγής.

Το Copilot γράφει γρήγορα το εύλογο workflow.xml, αλλά συχνά επινοεί ονόματα στοιχείων ή λάθος έκδοση σχήματος. Επικυρώστε το δημιουργημένο XML με το σχήμα 5.2.1 και εκτελέστε το πρώτα σε ένα σύμπλεγμα δοκιμών.

Ένας συντονιστής συνδυάζει μια συχνότητα, μια ώρα έναρξης και μια ώρα λήξης με ορισμούς συνόλου δεδομένων. Ενεργοποιείται μόνο όταν το ρολόι φτάσει στο επόμενο διάστημα και κάθε δηλωμένο σύνολο δεδομένων εισόδου υπάρχει στο HDFS, επομένως τα καθυστερημένα δεδομένα καθυστερούν την εκτέλεση.

Υποβάλετε ξανά την εργασία με την ενέργεια επανεκτέλεσης και το αρχικό αναγνωριστικό εργασίας, ονομάζοντας τους κόμβους που θα παραλειφθούν ή θα επαναληφθούν. Το Oozie επαναχρησιμοποιεί τις ολοκληρωμένες ενέργειες, έτσι ώστε να εκτελείται μόνο το υπόλοιπο μέρος του γραφήματος.

Η PREP σημαίνει ότι η εργασία έγινε δεκτή αλλά δεν ξεκίνησε, συνήθως επειδή η διαδρομή της εφαρμογής στο HDFS είναι λανθασμένη ή επειδή δεν έχει φτάσει ο χρόνος υλοποίησης. Η SUSPENDED σημαίνει ότι κάποιος την έθεσε σε παύση ή ότι μια ενέργεια απέτυχε και η ροή εργασίας σταμάτησε.

Ο διακομιστής εκτελείται με τη δική του κύρια εντολή και tab πλήκτρων, και οι πελάτες πραγματοποιούν έλεγχο ταυτότητας μέσω του SPNEGO μέσω HTTP. Οι ροές εργασίας φέρουν διακριτικά ανάθεσης, έτσι ώστε κάθε ενέργεια να φτάνει στο HDFS και το YARN ως ο χρήστης που υποβάλλει την ενέργεια και όχι ως ο διακομιστής.

Το Cron εκτελεί μια εντολή και την ξεχνάει. Ένας προγραμματιστής tracks εξαρτήσεις μεταξύ εργασιών, περιμένει την προσγείωση δεδομένων εισόδου, καταγράφει την κατάσταση κάθε ενέργειας και σας επιτρέπει να εκτελέσετε ξανά μόνο το μέρος που απέτυχε.

Συνοψίστε αυτήν την ανάρτηση με: