Προγραμματισμός

Ανασκόπηση: Το HBase είναι μαζικά επεκτάσιμο - και εξαιρετικά περίπλοκο

Το Apache HBase περιγράφεται ως "η βάση δεδομένων Hadoop", η οποία μπορεί να είναι λίγο συγκεχυμένη, καθώς το Hadoop είναι συνήθως κατανοητό ότι αναφέρεται στο δημοφιλές πλαίσιο επεξεργασίας MapReduce. Αλλά το Hadoop είναι πραγματικά ένα όνομα ομπρέλας για ένα ολόκληρο οικοσύστημα τεχνολογιών, μερικές από τις οποίες χρησιμοποιεί το HBase για να δημιουργήσει μια κατανεμημένη, προσανατολισμένη στη στήλη βάση δεδομένων, βασισμένη στις ίδιες αρχές με το Bigtable της Google. Η HBase δεν χρησιμοποιεί απευθείας τις δυνατότητες MapReduce του Hadoop, αν και το HBase μπορεί να ενσωματωθεί στο Hadoop για να χρησιμεύσει ως πηγή ή προορισμός των εργασιών του MapReduce.

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

[Επίσης στις: Μεγάλη αναμέτρηση δεδομένων: Cassandra εναντίον HBase | Ποια βάση δεδομένων freaking πρέπει να χρησιμοποιήσω; | Bossie Awards 2013: Τα καλύτερα εργαλεία μεγάλης πηγής δεδομένων | Αναμέτρηση NoSQL: MongoDB εναντίον Couchbase | Ρίξτε μια ματιά στις βασικές ιστορίες κάθε μέρα στο Daily newsletter. ]

Σχεδιασμένο για να υποστηρίζει ερωτήματα μαζικών συνόλων δεδομένων, το HBase είναι βελτιστοποιημένο για απόδοση ανάγνωσης. Για γράμματα, το HBase επιδιώκει να διατηρήσει τη συνέπεια. Σε αντίθεση με το "τελικά συνεπές" Cassandra, το HBase δεν προσφέρει διάφορες ρυθμίσεις επιπέδου συνέπειας (για την αναγνώριση της εγγραφής μετά την εγγραφή ενός κόμβου ή την απαρτία των κόμβων). Έτσι, η τιμή της ισχυρής συνέπειας της HBase είναι ότι οι εγγραφές μπορεί να είναι πιο αργές.

Το HDFS - το κατανεμημένο σύστημα αρχείων Hadoop - είναι το θεμέλιο του οικοσυστήματος Hadoop και είναι το σύστημα αρχείων που βρίσκεται στην κορυφή του HBase. Σχεδιασμένο για να λειτουργεί με υλικό εμπορευμάτων και να ανέχεται αστοχίες κόμβων μελών, το HDFS λειτουργεί καλύτερα για συστήματα επεξεργασίας παρτίδων που προτιμούν τη ροή πρόσβασης σε μεγάλα σύνολα δεδομένων. Αυτό φαίνεται να το καθιστά ακατάλληλο για την τυχαία πρόσβαση που θα περίμενε κανείς σε συστήματα βάσεων δεδομένων όπως το HBase. Ωστόσο, η HBase λαμβάνει μέτρα για την αντιστάθμιση της κατά τα άλλα ασυνήθιστης συμπεριφοράς του HDFS.

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

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

Πώς λειτουργεί το HBase

Πιο συγκεκριμένα, μια σειρά είναι μια συλλογή ζευγών κλειδιών / τιμών, το κλειδί είναι ένα αναγνωριστικό στήλης και η τιμή είναι το περιεχόμενο του κελιού που υπάρχει στη διασταύρωση μιας συγκεκριμένης γραμμής και στήλης. Ωστόσο, επειδή το HBase είναι μια βάση δεδομένων προσανατολισμένη στη στήλη, δεν χρειάζονται δύο σειρές σε έναν πίνακα να έχουν τις ίδιες στήλες. Για να περιπλέξει περαιτέρω τα πράγματα, τα δεδομένα εκδίδονται στο HBase. Οι πραγματικές συντεταγμένες μιας τιμής (κελί) είναι η πλειάδα {πλήκτρο σειράς, πλήκτρο στήλης, χρονική σήμανση}. Επιπλέον, οι στήλες μπορούν να ομαδοποιηθούν σε οικογένειες στηλών, οι οποίες παρέχουν στον σχεδιαστή βάσεων δεδομένων περαιτέρω έλεγχο των χαρακτηριστικών πρόσβασης, καθώς όλες οι στήλες σε μια οικογένεια στηλών θα αποθηκεύονται πολύ κοντά η μία στην άλλη.

Μια λειτουργία εγγραφής στο HBase καταγράφει πρώτα τα δεδομένα σε ένα αρχείο καταγραφής δεσμεύσεων (ένα "ημερολόγιο εγγραφής προς τα εμπρός") και μετά σε μια εσωτερική δομή μνήμης που ονομάζεται MemStore. Όταν το MemStore γεμίζει, μεταφέρεται στο δίσκο ως οντότητα που ονομάζεται HFile. Τα HFiles αποθηκεύονται ως ακολουθία μπλοκ δεδομένων, με ένα ευρετήριο προσαρτημένο στο τέλος του αρχείου. Ένα άλλο ευρετήριο, που διατηρείται στη μνήμη, επιταχύνει τις αναζητήσεις δεδομένων στο HFiles.

Τα HFiles είναι αμετάβλητα μόλις γραφτούν. Εάν διαγραφεί ένα κλειδί, το HBase καταγράφει έναν ειδικό δείκτη "ταφόπλακα" για τον εορτασμό της διαγραφής. Οι επιτύμβιες στήλες αφαιρούνται (όπως και τα διαγραμμένα δεδομένα) όταν τα HFiles συμπιέζονται περιοδικά.

Η HBase προσπαθεί να ικανοποιήσει τις λειτουργίες ανάγνωσης πρώτα μέσω του MemStore. Σε αντίθετη περίπτωση, το HBase ελέγχει μια ακόμη δομή στη μνήμη, το BlockStore, το οποίο είναι μια προσωρινή μνήμη ανάγνωσης που έχει σχεδιαστεί για την παροχή δεδομένων που διαβάζονται συχνά από τη μνήμη και όχι από τα HFiles που βασίζονται σε δίσκο.

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

Η αρχιτεκτονική συμπλέγματος του HBase δεν είναι εντελώς συμμετρική. Για παράδειγμα, κάθε σύμπλεγμα πρέπει να έχει έναν, ενεργό κύριο κόμβο. Πολλοί κόμβοι μπορούν (και πρέπει) να οριστούν ως κύριοι κόμβοι, αλλά όταν ξεκινά το σύμπλεγμα, οι υποψήφιοι κύριοι συντονίζονται έτσι ώστε μόνο ένας να είναι ο ενεργός κύριος. Είναι ευθύνη του πλοιάρχου να παρακολουθεί διακομιστές περιοχής, να χειρίζεται την ανακατεύθυνση διακομιστή περιοχής και να συντονίζει τους διαχωρισμούς περιοχής.

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

Μπορείτε να εκτελέσετε το HBase πάνω από ένα εγγενές σύστημα αρχείων για αναπτυξιακούς σκοπούς, αλλά ένα αναπτυσσόμενο σύμπλεγμα HBase εκτελείται σε HDFS, το οποίο - όπως αναφέρθηκε προηγουμένως - φαίνεται σαν μια κακή παιδική χαρά για το HBase. Παρά το υποκείμενο σύστημα αρχείων προσανατολισμένο στη ροή, το HBase επιτυγχάνει γρήγορο τυχαίο I / O. Επιτυγχάνει αυτή τη μαγεία με έναν συνδυασμό παρτίδων εγγραφών στη μνήμη και διαρκών δεδομένων στο δίσκο χρησιμοποιώντας δέντρα συγχώνευσης με δομή log. Ως αποτέλεσμα, όλες οι τυχαίες εγγραφές εκτελούνται στη μνήμη και όταν τα δεδομένα μεταφέρονται στο δίσκο, τα δεδομένα ταξινομούνται πρώτα και μετά γράφονται διαδοχικά με ένα συνοδευτικό ευρετήριο. Τυχαίες αναγνώσεις επιχειρούνται πρώτα στη μνήμη, όπως αναφέρθηκε παραπάνω. Εάν τα ζητούμενα δεδομένα δεν είναι στη μνήμη, η επόμενη αναζήτηση δίσκου είναι γρήγορη επειδή τα δεδομένα ταξινομούνται και ευρετηριάζονται.

Εργασία με το HBase

Ενώ η HBase δεν υποστηρίζει συναλλαγές, ούτε είναι τελικά συνεπής. Αντίθετα, το HBase υποστηρίζει ισχυρή συνοχή, τουλάχιστον στο επίπεδο μιας γραμμής. Το HBase δεν έχει αίσθηση τύπων δεδομένων. όλα αποθηκεύονται ως μια σειρά byte. Ωστόσο, το HBase ορίζει έναν ειδικό τύπο δεδομένων "μετρητή", ο οποίος προβλέπει μια λειτουργία ατομικής προσαύξησης - χρήσιμο για την καταμέτρηση των προβολών μιας ιστοσελίδας, για παράδειγμα. Μπορείτε να αυξήσετε οποιονδήποτε αριθμό μετρητών σε μία μόνο γραμμή μέσω μίας κλήσης και χωρίς να χρειάζεται να κλειδώσετε τη σειρά. Σημειώστε ότι οι μετρητές θα συγχρονίζονται για λειτουργίες εγγραφής (πολλαπλές εγγραφές θα εκτελούν πάντα σταθερές αυξήσεις) αλλά όχι απαραίτητα για λειτουργίες ανάγνωσης.

Το κέλυφος HBase είναι στην πραγματικότητα ένα τροποποιημένο, διαδραστικό κέλυφος Ruby που λειτουργεί στο JRuby, με το Ruby να εκτελείται σε Java VM. Οτιδήποτε μπορείτε να κάνετε στο διαδραστικό κέλυφος Ruby μπορείτε να κάνετε στο κέλυφος HBase, πράγμα που σημαίνει ότι το κέλυφος HBase μπορεί να είναι ένα ισχυρό περιβάλλον scripting.

Η τελευταία έκδοση του κελύφους παρέχει ένα είδος αντικειμενοστρεφούς διεπαφής για το χειρισμό πινάκων HBase. Μπορείτε, για παράδειγμα, να αντιστοιχίσετε έναν πίνακα σε μια μεταβλητή JRuby και, στη συνέχεια, να εκδώσετε μια μέθοδο στο αντικείμενο πίνακα χρησιμοποιώντας την τυπική σημείωση κουκκίδων. Για παράδειγμα, εάν έχετε ορίσει έναν πίνακα και τον αντιστοιχίσετε στο myTable μεταβλητή, θα μπορούσατε να γράψετε (βάλτε) δεδομένα στον πίνακα με κάτι σαν:

myTable.put '', '', ''

Αυτό θα έγραφε την τιμή στη σειρά στη στήλη .

Υπάρχουν ορισμένα GUI διαχείρισης τρίτων για το HBase, όπως το hbase-explorer. Το ίδιο το HBase περιλαμβάνει ορισμένα ενσωματωμένα εργαλεία παρακολούθησης που βασίζονται στο Web. Ένας κύριος κόμβος HBase εξυπηρετεί μια διεπαφή Ιστού στη θύρα 60010. Περιηγηθείτε σε αυτήν και θα βρείτε πληροφορίες για τον ίδιο τον κύριο κόμβο, συμπεριλαμβανομένης της ώρας έναρξης, της τρέχουσας θύρας Zookeeper, μιας λίστας διακομιστών περιοχής, του μέσου αριθμού περιοχών ανά διακομιστές περιοχής , και ούτω καθεξής. Παρέχεται επίσης μια λίστα με πίνακες. Κάντε κλικ σε έναν πίνακα και εμφανίζονται πληροφορίες όπως οι διακομιστές περιοχής που φιλοξενούν τα στοιχεία του πίνακα. Αυτή η σελίδα παρέχει επίσης στοιχεία ελέγχου για την έναρξη μιας συμπίεσης στον πίνακα ή τον διαχωρισμό των περιοχών του πίνακα.

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

Ο οδηγός αναφοράς HBase περιλαμβάνει έναν Οδηγό έναρξης και συχνές ερωτήσεις. Είναι ένα ζωντανό έγγραφο, οπότε θα βρείτε σχόλια κοινότητας χρηστών που επισυνάπτονται σε κάθε καταχώριση. Ο ιστότοπος HBase παρέχει επίσης συνδέσμους προς το HBase Java API, καθώς και βίντεο και πηγές εκτός ιστότοπου πληροφοριών HBase. Περισσότερες πληροφορίες μπορείτε να βρείτε στο HBase wiki. Παρόλο που είναι καλό, η τεκμηρίωση HBase δεν είναι αρκετά ισοδύναμη με την τεκμηρίωση που έχω δει σε άλλους ιστότοπους προϊόντων βάσης δεδομένων, όπως η Cassandra και η MongoDB. Παρ 'όλα αυτά, υπάρχει άφθονο υλικό στο Διαδίκτυο και η κοινότητα του HBase είναι αρκετά μεγάλη και αρκετά ενεργή ώστε οποιεσδήποτε ερωτήσεις σχετικά με το HBase να μην απαντηθούν για πολύ.

Μία από τις πιο ενδιαφέρουσες πρόσφατες προσθήκες της HBase είναι η υποστήριξη για "συμπεξεργαστές" - κωδικός χρήστη που εκτελείται ως μέρος των διαδικασιών HBase RegionServer και Master. Υπάρχουν περίπου δύο είδη συνεπεξεργαστών: παρατηρητές και τελικά σημεία. Ένας παρατηρητής είναι μια κλάση Java που είναι γραμμένη από τον χρήστη και καθορίζει μεθόδους που πρέπει να επικαλούνται όταν συμβαίνουν συγκεκριμένα συμβάντα HBase. Σκεφτείτε έναν παρατηρητή ως το αντίστοιχο HBase της σκανδάλης RDBMS. Ένας παρατηρητής, που ονομάζεται RegionObserver, μπορεί να συνδέσει συγκεκριμένα σημεία στη ροή του ελέγχου των χειρισμών χειρισμού δεδομένων όπως παίρνω, βάζω, και διαγράφω.

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

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

Το HBase είναι σε μεγάλο βαθμό μια κεντρική βάση δεδομένων για προγραμματιστές. Ο διαδικτυακός οδηγός αναφοράς του συνδέεται σε μεγάλο βαθμό με τα έγγραφα Java API της HBase. Εάν θέλετε να κατανοήσετε τον ρόλο που διαδραματίζει μια συγκεκριμένη οντότητα HBase - ας πούμε, ένα Φίλτρο - ετοιμαστείτε να παραδοθείτε στην τεκμηρίωση του Java API για την κλάση φίλτρου για μια πλήρη εξήγηση.

Δεδομένου ότι η πρόσβαση γίνεται ανά σειρά και ότι οι σειρές ευρετηριάζονται με πλήκτρα γραμμής, προκύπτει ότι ο προσεκτικός σχεδιασμός της δομής του κλειδιού σειράς είναι κρίσιμος για καλή απόδοση. Κατά ειρωνικό τρόπο, οι προγραμματιστές στις παλιές καλές μέρες των βάσεων δεδομένων ISAM (Indexed Sequential Access Method) το γνώριζαν καλά: Η πρόσβαση στις βάσεις δεδομένων αφορούσε τα συστατικά - και τη σειρά αυτών των στοιχείων - σε ευρετήρια σύνθετων κλειδιών.

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

Apache HBase 0.94 με μια ματιά

 
Πλεονεκτήματα
  • Ενσωματωμένη έκδοση
  • Ισχυρή συνέπεια σε επίπεδο ρεκόρ
  • Παρέχει ενεργοποιητές τύπου RDBMS και αποθηκευμένες διαδικασίες μέσω συνεπεξεργαστών
  • Χτισμένο σε δοκιμασμένες και αληθινές τεχνολογίες Hadoop
  • Ενεργή κοινότητα ανάπτυξης
Μειονεκτήματα
  • Χάνει μια φιλική γλώσσα ερωτήματος που μοιάζει με SQL
  • Πολλά κινούμενα μέρη
  • Η εγκατάσταση πέρα ​​από ένα σύμπλεγμα ανάπτυξης ενός κόμβου μπορεί να είναι δύσκολη
ΠλατφόρμεςΑπαιτείται Java SE έκδοση 6. μπορεί να εκτελεστεί σε Windows χρησιμοποιώντας το Cygwin
ΚόστοςΔωρεάν, ανοιχτού κώδικα στην έκδοση 2.0 του Apache License

Copyright el.verticalshadows.com 2022