Hadoop MapReduce Join & Counter με Παράδειγμα

Τι είναι το Join in Mapreduce;

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

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

Τύποι Συμμετοχής

Ανάλογα με τον τόπο όπου εκτελείται η πραγματική ένωση, οι συνδέσεις στο Hadoop ταξινομούνται σε

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

2. Σύνδεση με μειωμένη πλευρά – Όταν η ένωση εκτελείται από τον μειωτήρα, ονομάζεται σύνδεση με πλευρά μείωσης. Δεν υπάρχει καμία ανάγκη σε αυτήν την ένωση να έχουμε ένα σύνολο δεδομένων σε δομημένη μορφή (ή χωρισμένο).

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

Μια συνολική ροή διαδικασίας των συνδέσεων στο Hadoop απεικονίζεται στο παρακάτω διάγραμμα.

Τύποι συνδέσεων στο Hadoop MapReduce
Τύποι συνδέσεων στο Hadoop MapReduce

Πώς να συνδέσετε δύο σύνολα δεδομένων: Παράδειγμα MapReduce

Υπάρχουν δύο σύνολα δεδομένων σε δύο διαφορετικά αρχεία (φαίνεται παρακάτω). Το Key Dept_ID είναι κοινό και στα δύο αρχεία. Ο στόχος είναι να χρησιμοποιήσετε το MapReduce Join για να συνδυάσετε αυτά τα αρχεία

Παράδειγμα MapReduce
1 αρχείου
Παράδειγμα MapReduce
2 αρχείου

εισόδου: Το σύνολο δεδομένων εισόδου είναι ένα αρχείο txt, DeptName.txt & DepStrength.txt

Κατεβάστε τα αρχεία εισόδου από εδώ

Βεβαιωθείτε ότι έχετε εγκαταστήσει το Hadoop. Πριν ξεκινήσετε με το παράδειγμα της πραγματικής διαδικασίας σύνδεσης MapReduce, αλλάξτε το χρήστη σε 'hduser' (το αναγνωριστικό χρησιμοποιείται κατά τη διαμόρφωση του Hadoop, μπορείτε να μεταβείτε στο userid που χρησιμοποιείται κατά τη διαμόρφωση του Hadoop ).

su - hduser_

Παράδειγμα MapReduce

Βήμα 1) Αντιγράψτε το αρχείο zip στην τοποθεσία της επιλογής σας

Παράδειγμα MapReduce

Βήμα 2) Αποσυμπίεση του αρχείου Zip

sudo tar -xvf MapReduceJoin.tar.gz

Παράδειγμα MapReduce

Βήμα 3) Μετάβαση στον κατάλογο MapReduceJoin/

cd MapReduceJoin/

Παράδειγμα MapReduce

Βήμα 4) Ξεκινήστε το Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Παράδειγμα MapReduce

Βήμα 5) Τα DeptStrength.txt και DeptName.txt είναι τα αρχεία εισόδου που χρησιμοποιούνται για αυτό το παράδειγμα προγράμματος MapReduce Join.

Αυτά τα αρχεία πρέπει να αντιγραφούν στο HDFS χρησιμοποιώντας την παρακάτω εντολή-

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

Παράδειγμα MapReduce

Βήμα 6) Εκτελέστε το πρόγραμμα χρησιμοποιώντας την παρακάτω εντολή-

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

Παράδειγμα MapReduce

Παράδειγμα MapReduce

Βήμα 7) Μετά την εκτέλεση, το αρχείο εξόδου (με όνομα 'part-00000') θα αποθηκευτεί στον κατάλογο /output_mapreducejoin στο HDFS

Μπορείτε να δείτε τα αποτελέσματα χρησιμοποιώντας τη διεπαφή γραμμής εντολών

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

Παράδειγμα MapReduce

Τα αποτελέσματα μπορούν επίσης να προβληθούν μέσω μιας διεπαφής ιστού ως-

Παράδειγμα MapReduce

Τώρα επιλέξτε 'Περιήγηση στο σύστημα αρχείων' και πλοηγηθείτε μέχρι /output_mapreducejoin

Παράδειγμα MapReduce

Ανοικτό part-r-00000

Παράδειγμα MapReduce

Τα αποτελέσματα εμφανίζονται

Παράδειγμα MapReduce

ΣΗΜΕΊΩΣΗ: Λάβετε υπόψη ότι πριν εκτελέσετε αυτό το πρόγραμμα για την επόμενη φορά, θα χρειαστεί να διαγράψετε τον κατάλογο εξόδου /output_mapreducejoin

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

Εναλλακτική λύση είναι να χρησιμοποιήσετε διαφορετικό όνομα για τον κατάλογο εξόδου.

Τι είναι το Counter στο MapReduce;

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

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

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

Τύποι μετρητών MapReduce

Υπάρχουν βασικά 2 τύποι ΜΕΙΩΣΗ ΧΑΡΤΗ μετρητές

  1. Ενσωματωμένοι μετρητές Hadoop:Υπάρχουν μερικοί ενσωματωμένοι μετρητές Hadoop που υπάρχουν ανά εργασία. Παρακάτω υπάρχουν ενσωματωμένες ομάδες μετρητών-
    • MapReduce Task Counters – Συλλέγει πληροφορίες για την εργασία (π.χ. αριθμό εγγραφών εισόδου) κατά τη διάρκεια του χρόνου εκτέλεσής της.
    • Μετρητές συστήματος αρχείων – Συλλέγει πληροφορίες όπως τον αριθμό των byte που διαβάζονται ή γράφονται από μια εργασία
    • Μετρητές FileInputFormat – Συλλέγει πληροφορίες για έναν αριθμό byte που διαβάζονται μέσω του FileInputFormat
    • Μετρητές FileOutputFormat – Συλλέγει πληροφορίες για έναν αριθμό byte που έχουν γραφτεί μέσω του FileOutputFormat
    • γκισέ εργασίας – Αυτοί οι μετρητές χρησιμοποιούνται από το JobTracker. Τα στατιστικά στοιχεία που συλλέγουν περιλαμβάνουν π.χ. τον αριθμό των εργασιών που έχουν ξεκινήσει για μια εργασία.
  2. Μετρητές που καθορίζονται από το χρήστη

Εκτός από τους ενσωματωμένους μετρητές, ένας χρήστης μπορεί να ορίσει τους δικούς του μετρητές χρησιμοποιώντας παρόμοιες λειτουργίες που παρέχονται από γλώσσες προγραμματισμού. Για παράδειγμα, στο Java Τα 'enum' χρησιμοποιούνται για τον ορισμό μετρητών που ορίζονται από το χρήστη.

Παράδειγμα μετρητών

Ένα παράδειγμα MapClass με μετρητές για μέτρηση του αριθμού των τιμών που λείπουν και των μη έγκυρων τιμών. Αρχείο δεδομένων εισόδου που χρησιμοποιείται σε αυτό το σεμινάριο Το σύνολο δεδομένων εισόδου μας είναι ένα αρχείο CSV, SalesJan2009.csv

public static class MapClass
            extends MapReduceBase
            implements Mapper<LongWritable, Text, Text, Text>
{
    static enum SalesCounters { MISSING, INVALID };
    public void map ( LongWritable key, Text value,
                 OutputCollector<Text, Text> output,
                 Reporter reporter) throws IOException
    {
        
        //Input string is split using ',' and stored in 'fields' array
        String fields[] = value.toString().split(",", -20);
        //Value at 4th index is country. It is stored in 'country' variable
        String country = fields[4];
        
        //Value at 8th index is sales data. It is stored in 'sales' variable
        String sales = fields[8];
      
        if (country.length() == 0) {
            reporter.incrCounter(SalesCounters.MISSING, 1);
        } else if (sales.startsWith("\"")) {
            reporter.incrCounter(SalesCounters.INVALID, 1);
        } else {
            output.collect(new Text(country), new Text(sales + ",1"));
        }
    }
}

Το παραπάνω απόσπασμα κώδικα δείχνει ένα παράδειγμα υλοποίησης μετρητών στο Hadoop Map Reduce.

Εδώ, Πάγκοι πωλήσεων είναι ένας μετρητής που ορίζεται χρησιμοποιώντας "enum". Χρησιμοποιείται για μέτρηση ΛΕΙΠΕΙ και ΜΗ ΕΓΚΥΡΟ εγγραφές εισόδου.

Στο απόσπασμα κώδικα, αν 'Χώρα' Το πεδίο έχει μηδενικό μήκος, τότε λείπει η τιμή του και επομένως ο αντίστοιχος μετρητής μετρητές πωλήσεων.ΛΕΙΠΟΝΤΑΙ προσαυξάνεται.

Στη συνέχεια, εάν 'εκπτώσεις' Το πεδίο αρχίζει με α " τότε η εγγραφή θεωρείται ΑΚΥΡΗ. Αυτό υποδεικνύεται με αυξανόμενο μετρητή SalesCounters.ΜΗ ΕΓΚΥΡΟ.