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

Γιατί πρέπει να χρησιμοποιήσετε το Presto για ad hoc analytics

Γρήγορα! Δεν είναι μόνο μια προτροπή να ενθουσιάσετε το κοινό σας μετά από ένα μαγικό τέχνασμα, αλλά και ένα όνομα που χρησιμοποιείται όλο και περισσότερο όταν συζητάμε πώς να ανακαλύψετε μεγάλα δεδομένα. Ενώ υπάρχουν πολλές εφαρμογές του Presto στο φυσικό περιβάλλον, η τεχνολογία - ένας διανεμημένος μηχανισμός ερωτήσεων SQL που υποστηρίζει όλα τα είδη πηγών δεδομένων - παραμένει άγνωστη σε πολλούς προγραμματιστές και αναλυτές δεδομένων που θα μπορούσαν να επωφεληθούν από τη χρήση τους.

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

Presto εναντίον κυψέλης

Το Presto ξεκίνησε στο Facebook το 2012. Open-sourced το 2013 και το οποίο διαχειρίζεται το Ίδρυμα Presto (μέρος του Linux Foundation), το Presto γνώρισε σταθερή αύξηση της δημοτικότητάς του με τα χρόνια. Σήμερα, αρκετές εταιρείες έχουν δημιουργήσει ένα επιχειρηματικό μοντέλο γύρω από το Presto, όπως το Ahana, με προσφορές ad hoc analytics με βάση το PrestoDB.

Το Presto δημιουργήθηκε ως μέσο για να παρέχει στους τελικούς χρήστες πρόσβαση σε τεράστια σύνολα δεδομένων για την εκτέλεση ad hoc ανάλυσης. Πριν από το Presto, το Facebook θα χρησιμοποιούσε το Hive (που επίσης δημιουργήθηκε από το Facebook και στη συνέχεια δωρίστηκε στο Apache Software Foundation) για να πραγματοποιήσει αυτό το είδος ανάλυσης. Καθώς τα σύνολα δεδομένων του Facebook αναπτύχθηκαν, η Hive βρέθηκε να είναι ανεπαρκώς διαδραστική (διαβάστε: πολύ αργή). Αυτό οφείλεται σε μεγάλο βαθμό στο γεγονός ότι το θεμέλιο του Hive είναι το MapReduce, το οποίο, τότε, απαιτούσε τα ενδιάμεσα σύνολα δεδομένων να διατηρηθούν στο HDFS. Αυτό σήμαινε πολλά I / O στο δίσκο για δεδομένα που τελικά απορρίφθηκαν.

Η Presto ακολουθεί μια διαφορετική προσέγγιση για την εκτέλεση αυτών των ερωτημάτων για εξοικονόμηση χρόνου. Αντί να διατηρείτε ενδιάμεσα δεδομένα σε HDFS, το Presto σάς επιτρέπει να τραβάτε τα δεδομένα στη μνήμη και να εκτελείτε λειτουργίες στα δεδομένα εκεί αντί να διατηρείτε όλα τα ενδιάμεσα σύνολα δεδομένων στο δίσκο. Αν αυτό ακούγεται οικείο, μπορεί να έχετε ακούσει για το Apache Spark (ή οποιονδήποτε αριθμό άλλων τεχνολογιών εκεί έξω) που έχουν την ίδια βασική ιδέα για την αποτελεσματική αντικατάσταση των τεχνολογιών που βασίζονται στο MapReduce. Χρησιμοποιώντας το Presto, θα διατηρήσω τα δεδομένα όπου ζει (στο Hadoop ή, όπως θα δούμε, οπουδήποτε) και θα εκτελέσω τις εκτελέσεις στη μνήμη σε όλο το κατανεμημένο σύστημά μας, ανακατεύοντας δεδομένα μεταξύ διακομιστών, όπως απαιτείται. Αποφεύγω να αγγίζω δίσκο, επιταχύνοντας τελικά τον χρόνο εκτέλεσης του ερωτήματος.

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

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

Στον πυρήνα του, το Presto εκτελεί ερωτήματα για σύνολα δεδομένων που παρέχονται από πρόσθετα, συγκεκριμένα Συνδετήρες. Το Connector παρέχει ένα μέσο για το Presto να διαβάζει (και να γράφει) δεδομένα σε ένα εξωτερικό σύστημα δεδομένων. Το Hive Connector είναι ένας από τους τυπικούς συνδέσμους, χρησιμοποιώντας τα ίδια μεταδεδομένα που θα χρησιμοποιούσατε για να αλληλεπιδράσετε με HDFS ή Amazon S3. Λόγω αυτής της συνδεσιμότητας, το Presto αντικαθιστά τους οργανισμούς που χρησιμοποιούν το Hive σήμερα. Είναι σε θέση να διαβάσει δεδομένα από τα ίδια σχήματα και πίνακες χρησιμοποιώντας τις ίδιες μορφές δεδομένων - ORC, Avro, Parquet, JSON και άλλα. Εκτός από την εφαρμογή σύνδεσης Hive, θα βρείτε συνδέσεις για Cassandra, Elasticsearch, Kafka, MySQL, MongoDB, PostgreSQL και πολλά άλλα. Οι σύνδεσμοι συμβάλλονται συνεχώς στο Presto, δίνοντας στο Presto τη δυνατότητα να έχει πρόσβαση σε δεδομένα οπουδήποτε ζει.

Το πλεονέκτημα αυτού του αποσυνδεδεμένου μοντέλου αποθήκευσης είναι ότι η Presto είναι σε θέση να παρέχει μια ενιαία ομαδική προβολή όλων των δεδομένων σας - ανεξάρτητα από το πού βρίσκεται. Αυτό αυξάνει τις δυνατότητες του ad hoc ερωτήματος σε επίπεδα που δεν έχει φτάσει ποτέ στο παρελθόν, παρέχοντας παράλληλα διαδραστικούς χρόνους ερωτημάτων για τα μεγάλα σύνολα δεδομένων σας (αρκεί να έχετε την υποδομή για να το δημιουργήσετε αντίγραφα ασφαλείας, εσωτερικά ή cloud).

Ας ρίξουμε μια ματιά στον τρόπο ανάπτυξης του Presto και στον τρόπο εκτέλεσης των ερωτημάτων σας. Το Presto είναι γραμμένο σε Java και συνεπώς απαιτεί JDK ή JRE για να μπορεί να ξεκινήσει. Το Presto αναπτύσσεται ως δύο κύριες υπηρεσίες, μία Συντονιστής και πολλά Εργαζόμενοι. Η υπηρεσία Συντονιστής είναι ουσιαστικά ο εγκέφαλος της λειτουργίας, η λήψη αιτημάτων ερωτήματος από πελάτες, η ανάλυση του ερωτήματος, η κατασκευή ενός σχεδίου εκτέλεσης και, στη συνέχεια, ο προγραμματισμός εργασιών που πρέπει να γίνουν σε πολλές υπηρεσίες του Worker. Κάθε Worker επεξεργάζεται παράλληλα ένα μέρος του συνολικού ερωτήματος και μπορείτε να προσθέσετε υπηρεσίες Worker στην ανάπτυξη του Presto για να ταιριάζει στη ζήτησή σας. Κάθε πηγή δεδομένων έχει διαμορφωθεί ως κατάλογοςκαι μπορείτε να ζητήσετε όσους καταλόγους θέλετε σε κάθε ερώτημα.

Αχανα

Η πρόσβαση στο Presto γίνεται μέσω ενός προγράμματος οδήγησης JDBC και ενσωματώνεται με σχεδόν οποιοδήποτε εργαλείο που μπορεί να συνδεθεί σε βάσεις δεδομένων χρησιμοποιώντας το JDBC. Η διεπαφή γραμμής εντολών Presto, ή CLI, είναι συχνά το σημείο εκκίνησης όταν αρχίζετε να εξερευνάτε το Presto. Σε κάθε περίπτωση, ο πελάτης συνδέεται με τον Συντονιστή για να εκδώσει ένα ερώτημα SQL. Αυτό το ερώτημα αναλύεται και επικυρώνεται από τον Συντονιστή και ενσωματώνεται σε ένα σχέδιο εκτέλεσης ερωτήματος. Αυτό το σχέδιο περιγράφει πώς θα εκτελεστεί ένα ερώτημα από τους εργαζόμενους του Presto. Το σχέδιο ερωτημάτων (συνήθως) ξεκινά με έναν ή περισσότερους πίνακες σάρωσης για να τραβήξετε δεδομένα από τις εξωτερικές αποθήκες δεδομένων σας. Στη συνέχεια, υπάρχει μια σειρά χειριστών που εκτελούν προβολές, φίλτρα, συνδέσεις, ομαδικά bys, παραγγελίες και κάθε είδους άλλες λειτουργίες. Το σχέδιο τελειώνει με την παράδοση του τελικού αποτελέσματος στον πελάτη μέσω του Συντονιστή. Αυτά τα σχέδια ερωτημάτων είναι ζωτικής σημασίας για την κατανόηση του τρόπου με τον οποίο η Presto εκτελεί τα ερωτήματά σας, καθώς και για την ανατομή της απόδοσης των ερωτημάτων και την εύρεση πιθανών σημείων συμφόρησης.

Παράδειγμα ερωτήματος Presto

Ας ρίξουμε μια ματιά σε ένα ερώτημα και το αντίστοιχο σχέδιο ερωτημάτων. Θα χρησιμοποιήσω ένα ερώτημα TPC-H, ένα κοινό εργαλείο συγκριτικής αξιολόγησης που χρησιμοποιείται για βάσεις δεδομένων SQL. Εν ολίγοις, το TPC-H καθορίζει ένα τυπικό σύνολο πινάκων και ερωτημάτων για να ελέγξει την πληρότητα της γλώσσας SQL, καθώς και ένα μέσο για τη συγκριτική αξιολόγηση διαφόρων βάσεων δεδομένων. Τα δεδομένα έχουν σχεδιαστεί για περιπτώσεις επιχειρηματικής χρήσης, που περιέχουν παραγγελίες πώλησης αντικειμένων που μπορούν να παρασχεθούν από μεγάλο αριθμό προμηθειών. Το Presto παρέχει ένα TPC-H Connector που δημιουργεί δεδομένα εν κινήσει - ένα πολύ χρήσιμο εργαλείο κατά τον έλεγχο του Presto.

ΕΠΙΛΕΓΩ

SUM (l.extendedprice * l.discount) ΩΣ έσοδα

ΑΠΟ lineitem l

ΟΠΟΥ

l.shipdate> = ΗΜΕΡΟΜΗΝΙΑ '1994-01-01'

ΚΑΙ l.shipdate <DATE '1994-01-01' + INTERVAL '1' YEAR

ΚΑΙ l.discount ΜΕΤΑΞΥ 0,06 - 0,01 ΚΑΙ 0,06 + 0,01

ΚΑΙ l. Ποσότητα <24;

Αυτό είναι το ερώτημα νούμερο έξι, γνωστό ως ερώτημα αλλαγής εσόδων πρόβλεψης. Παραθέτοντας την τεκμηρίωση TPC-H, "αυτό το ερώτημα ποσοτικοποιεί το ποσό αύξησης των εσόδων που θα προέκυπτε από την εξάλειψη ορισμένων εκπτώσεων σε ολόκληρη την εταιρεία σε ένα δεδομένο εύρος ποσοστού σε ένα δεδομένο έτος."

Το Presto σπάζει ένα ερώτημα σε ένα ή περισσότερα στάδια, που ονομάζεται επίσης θραύσματα, και κάθε στάδιο περιέχει πολλαπλάσια χειριστές. Ένας χειριστής είναι μια συγκεκριμένη λειτουργία του σχεδίου που εκτελείται, είτε σάρωση, φίλτρο, ένωση ή ανταλλαγή. Οι ανταλλαγές διαλύουν συχνά τα στάδια. Μια ανταλλαγή είναι το μέρος του σχεδίου όπου τα δεδομένα αποστέλλονται μέσω του δικτύου σε άλλους εργαζόμενους στο σύμπλεγμα Presto. Με αυτόν τον τρόπο η Presto καταφέρνει να παρέχει την επεκτασιμότητα και την απόδοσή της - χωρίζοντας ένα ερώτημα σε πολλαπλές μικρότερες λειτουργίες που μπορούν να εκτελεστούν παράλληλα και επιτρέπουν την αναδιανομή δεδομένων σε ολόκληρο το σύμπλεγμα για την πραγματοποίηση συνδέσμων, ομαδικών bys και παραγγελίας συνόλων δεδομένων. Ας δούμε το κατανεμημένο σχέδιο ερωτημάτων για αυτό το ερώτημα. Σημειώστε ότι τα σχέδια ερωτήσεων διαβάζονται από κάτω προς τα πάνω.

 Θραύσμα 0 [ΜΟΝΟ]

- Έξοδος [έσοδα] => [άθροισμα: διπλό]

έσοδα: = άθροισμα

- Συγκεντρωτικό (ΤΕΛΙΚΟ) => [άθροισμα: διπλό]

άθροισμα: = "presto.default.sum" ((άθροισμα_4))

- LocalExchange [SINGLE] () => [άθροισμα_4: διπλό]

- RemoteSource [1] => [άθροισμα_4: διπλό]

Θραύσμα 1

- Συγκεντρωτικό (ΜΕΡΙΚΟ) => [άθροισμα_4: διπλό]

sum_4: = "presto.default.sum" ((expr))

- ScanFilterProject [table = TableHandle {connectorId = 'tpch', connectorHandle = "lineitem: sf1.0", layout = "Προαιρετικό [lineitem: sf1.0]"}, ομαδοποιημένο = false, filterPredicate = ((έκπτωση ANTWEEN (DOUBLE 0.05 ) ΚΑΙ (ΔΙΠΛΟ 0,07)) ΚΑΙ ((ποσότητα) = (ΗΜΕΡΟΜΗΝΙΑ 1994-01-01)) ΚΑΙ ((ημερομηνία αποστολής) [expr: double]

expr: = (εκτεταμένη τιμή) * (έκπτωση)

εκτεταμένη τιμή: = tpch: εκτεταμένη τιμή

έκπτωση: = tpch: έκπτωση

shipdate: = tpch: shipdate

ποσότητα: = tpch: ποσότητα

Αυτό το σχέδιο έχει δύο τμήματα που περιέχουν αρκετούς τελεστές. Το Fragment 1 περιέχει δύο τελεστές. Το ScanFilterProject σαρώνει τα δεδομένα, επιλέγει τις απαραίτητες στήλες (που ονομάζονται προβάλλοντας) απαιτείται για την ικανοποίηση των προβλέψεων και υπολογίζει τα έσοδα που χάθηκαν λόγω της έκπτωσης για κάθε στοιχείο γραμμής. Στη συνέχεια, ένας μερικός τελεστής Συγκεντρώματος υπολογίζει το μερικό άθροισμα. Το Fragment 0 περιέχει έναν τελεστή LocalExchange που λαμβάνει τα μερικά ποσά από το Fragment 1 και, στη συνέχεια, το τελικό σύνολο για τον υπολογισμό του τελικού αθροίσματος. Στη συνέχεια, το άθροισμα εξάγεται στον πελάτη.

Κατά την εκτέλεση του ερωτήματος, το Presto σαρώνει παράλληλα δεδομένα από την εξωτερική πηγή δεδομένων, υπολογίζει το μερικό άθροισμα για κάθε διαίρεση και, στη συνέχεια, αποστέλλει το αποτέλεσμα αυτού του μερικού ποσού σε έναν μεμονωμένο εργαζόμενο, ώστε να μπορεί να εκτελέσει την τελική συγκέντρωση. Εκτελώντας αυτό το ερώτημα, λαμβάνω περίπου 123.141.078,23 $ σε χαμένα έσοδα λόγω των εκπτώσεων.

  έσοδα

----------------------

1.2314107822830005E8

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

Καθώς μεγαλώνει το σύνολο δεδομένων σας, μπορείτε να αναπτύξετε το σύμπλεγμα Presto για να διατηρήσετε τους ίδιους αναμενόμενους χρόνους εκτέλεσης. Αυτή η απόδοση, σε συνδυασμό με την ευελιξία στην αναζήτηση σχεδόν οποιασδήποτε πηγής δεδομένων, μπορεί να βοηθήσει την επιχείρησή σας να αποκτήσει μεγαλύτερη αξία από τα δεδομένα σας από ποτέ - διατηρώντας ταυτόχρονα τα δεδομένα όπου βρίσκονται και αποφεύγοντας ακριβές μεταφορές και χρόνο μηχανικής για την ενοποίηση των δεδομένων σας ένα μέρος για ανάλυση. Γρήγορα!

Ο Ashish Tadose είναι συνιδρυτής και κύριος μηχανικός λογισμικού στην Ahana. Παθιασμένος με τα κατανεμημένα συστήματα, ο Ashish προσχώρησε στην Ahana από την WalmartLabs, όπου ως κύριος μηχανικός δημιούργησε μια υπηρεσία επιτάχυνσης δεδομένων πολλαπλών ηχείων που τροφοδοτείται από την Presto ενώ οδηγεί και δημιουργεί άλλα προϊόντα που σχετίζονται με την ανακάλυψη δεδομένων, τις ενοποιημένες μηχανές ερωτήσεων και τη διαχείριση δεδομένων. Προηγουμένως, ο Ashish ήταν ανώτερος αρχιτέκτονας δεδομένων στο PubMatic, όπου σχεδίασε και παρέδωσε μια μεγάλης κλίμακας πλατφόρμα δεδομένων adtech για αναφορές, αναλυτικά στοιχεία και μηχανική μάθηση. Νωρίτερα στην καριέρα του, ήταν μηχανικός δεδομένων στο VeriSign. Ο Ashish είναι επίσης ένας επιμελητής Apache και συνεισφέρων σε έργα ανοιχτού κώδικα.

Το New Tech Forum παρέχει έναν χώρο για να εξερευνήσετε και να συζητήσετε την αναδυόμενη τεχνολογία σε πρωτοφανές βάθος και εύρος. Η επιλογή είναι υποκειμενική, με βάση την επιλογή των τεχνολογιών που πιστεύουμε ότι είναι σημαντικές και έχουν μεγάλο ενδιαφέρον για τους αναγνώστες. δεν αποδέχεται ασφάλεια μάρκετινγκ για δημοσίευση και διατηρεί το δικαίωμα να επεξεργαστεί όλο το περιεχόμενο. Στείλτε όλες τις ερωτήσεις στο [email protected]