Μέχρι τώρα, πιθανότατα έχετε ακούσει για το Hadoop Distributed File System (HDFS), ειδικά εάν είστε αναλυτής δεδομένων ή κάποιος που είναι υπεύθυνος για τη μεταφορά δεδομένων από το ένα σύστημα στο άλλο. Ωστόσο, ποια είναι τα οφέλη που έχει το HDFS σε σχέση με τις σχετικές βάσεις δεδομένων;
Το HDFS είναι μια επεκτάσιμη, ανοιχτού κώδικα λύση για αποθήκευση και επεξεργασία μεγάλων όγκων δεδομένων. Το HDFS έχει αποδειχθεί αξιόπιστο και αποτελεσματικό πολλά σύγχρονα κέντρα δεδομένων .
Το HDFS χρησιμοποιεί υλικό εξοπλισμού μαζί με λογισμικό ανοικτού κώδικα για τη μείωση του συνολικού κόστους ανά byte αποθήκευσης.
Με την ενσωματωμένη αναπαραγωγή και ανθεκτικότητα σε αστοχίες δίσκου, το HDFS είναι ένα ιδανικό σύστημα για αποθήκευση και επεξεργασία δεδομένων για αναλυτικά στοιχεία. Δεν απαιτεί τα βασικά στοιχεία και τα γενικά έξοδα για την υποστήριξη της ατομικότητας της συναλλαγής, της συνέπειας, της απομόνωσης και της αντοχής (ACID) όπως είναι απαραίτητο με τα παραδοσιακά συστήματα σχεσιακών βάσεων δεδομένων.
Επιπλέον, όταν συγκρίνεται με εταιρικές και εμπορικές βάσεις δεδομένων, όπως η Oracle, η χρήση του Hadoop ως πλατφόρμας ανάλυσης αποφεύγει επιπλέον έξοδα αδειοδότησης.
Μία από τις ερωτήσεις που πολλοί άνθρωποι ρωτούν κατά την πρώτη εκμάθηση για το HDFS είναι: Πώς μπορώ να βάλω τα υπάρχοντα δεδομένα μου στο HDFS;
Σε αυτό το άρθρο, θα εξετάσουμε τον τρόπο εισαγωγής δεδομένων από μια βάση δεδομένων PostgreSQL σε HDFS. Θα το χρησιμοποιησουμε Apache Sqoop , η οποία είναι επί του παρόντος η πιο αποτελεσματική, ανοιχτού κώδικα λύση για τη μεταφορά δεδομένων μεταξύ HDFS και σχεσιακών βάσεων δεδομένων. Το Apache Sqoop έχει σχεδιαστεί για τη μαζική φόρτωση δεδομένων από μια σχεσιακή βάση δεδομένων στο HDFS (εισαγωγή) και για μαζική εγγραφή δεδομένων από το HDFS σε μια σχεσιακή βάση δεδομένων (εξαγωγή).
Τα βήματα σε αυτό το σεμινάριο είναι γραμμένα για κάποιον με βασικές γνώσεις για την εκτέλεση ερωτημάτων SQL και μια στοιχειώδη γνώση των εντολών HDFS.
react εγγενής σαρωτής κώδικα qr
Το σύστημα βάσης δεδομένων που χρησιμοποιείται είναι το PostgreSQL 9.5 για Windows και η έκδοση HDFS είναι το Cloudera Hadoop 2.5.0-cdh5.2.0 σε μια εικονική μηχανή του Centos 6.4 Linux.
Το Apache Sqoop βασίζεται στα αρχεία JAR του προγράμματος οδήγησης JDBC που είναι ειδικά για τον σχετικό προμηθευτή βάσης δεδομένων και την έκδοση βάσης δεδομένων.
Για να εκτελέσει τα βήματα που εμφανίζονται σε αυτό το άρθρο, ο χρήστης θα χρειαστεί δικαιώματα για να συνδεθεί εξ αποστάσεως στη βάση δεδομένων PostgreSQL, SELECT
δικαιώματα στη σχεσιακή βάση δεδομένων, δικαιώματα εγγραφής στο HDFS και εκτέλεση δικαιωμάτων στο Sqoop εκτελέσιμο.
Για τους σκοπούς αυτού του σεμιναρίου, δημιουργήσαμε μια βάση δεδομένων PostgreSQL, την ονομάσαμε ApeeScape και το κατέστησε προσβάσιμο μέσω της θύρας 5432.
Για να ξεκινήσετε, στην PostgreSQL μας ApeeScape
βάση δεδομένων, θα δημιουργήσουμε έναν πίνακα δεδομένων δοκιμής με το όνομα sales
. Θα υποθέσουμε ότι το πιστοποιητικό OpenSSL και τα αρχεία ιδιωτικού κλειδιού υπάρχουν ήδη στο διακομιστή PostgreSQL.
Server [localhost]: Database [postgres]: ApeeScape Port [5432]: Username [postgres]: Password for user postgres: psql (9.5.3) ApeeScape=# create table sales ApeeScape-# ( ApeeScape(# pkSales integer constraint salesKey primary key, ApeeScape(# saleDate date, ApeeScape(# saleAmount money, ApeeScape(# orderID int not null, ApeeScape(# itemID int not null ApeeScape(# ); CREATE TABLE
Στη συνέχεια, θα εισαγάγουμε 20 σειρές στον πίνακα:
ApeeScape=# insert into sales values (1, '2016-09-27', 1.23, 1, 1); INSERT 0 1 ApeeScape=# insert into sales values (2, '2016-09-27', 2.34, 1, 2); INSERT 0 1 ApeeScape=# insert into sales values (3, '2016-09-27', 1.23, 2, 1); INSERT 0 1 ApeeScape=# insert into sales values (4, '2016-09-27', 2.34, 2, 2); INSERT 0 1 ApeeScape=# insert into sales values (5, '2016-09-27', 3.45, 2, 3); INSERT 0 1 ApeeScape=# insert into sales values (6, '2016-09-28', 3.45, 3, 3); INSERT 0 1 ApeeScape=# insert into sales values (7, '2016-09-28', 4.56, 3, 4); INSERT 0 1 ApeeScape=# insert into sales values (8, '2016-09-28', 5.67, 3, 5); INSERT 0 1 ApeeScape=# insert into sales values (9, '2016-09-28', 1.23, 4, 1); INSERT 0 1 ApeeScape=# insert into sales values (10, '2016-09-28', 1.23, 5, 1); INSERT 0 1 ApeeScape=# insert into sales values (11, '2016-09-28', 1.23, 6, 1); INSERT 0 1 ApeeScape=# insert into sales values (12, '2016-09-29', 1.23, 7, 1); INSERT 0 1 ApeeScape=# insert into sales values (13, '2016-09-29', 2.34, 7, 2); INSERT 0 1 ApeeScape=# insert into sales values (14, '2016-09-29', 3.45, 7, 3); INSERT 0 1 ApeeScape=# insert into sales values (15, '2016-09-29', 4.56, 7, 4); INSERT 0 1 ApeeScape=# insert into sales values (16, '2016-09-29', 5.67, 7, 5); INSERT 0 1 ApeeScape=# insert into sales values (17, '2016-09-29', 6.78, 7, 6); INSERT 0 1 ApeeScape=# insert into sales values (18, '2016-09-29', 7.89, 7, 7); INSERT 0 1 ApeeScape=# insert into sales values (19, '2016-09-29', 7.89, 8, 7); INSERT 0 1 ApeeScape=# insert into sales values (20, '2016-09-30', 1.23, 9, 1); INSERT 0 1
Ας επιλέξουμε τα δεδομένα για να επαληθεύσουμε ότι τα δεδομένα φαίνονται σωστά:
ApeeScape=# select * from sales; pksales | saledate | saleamount | orderid | itemid ---------+------------+------------+---------+-------- 1 | 2016-09-27 | .23 | 1 | 1 2 | 2016-09-27 | .34 | 1 | 2 3 | 2016-09-27 | .23 | 2 | 1 4 | 2016-09-27 | .34 | 2 | 2 5 | 2016-09-27 | .45 | 2 | 3 6 | 2016-09-28 | .45 | 3 | 3 7 | 2016-09-28 | .56 | 3 | 4 8 | 2016-09-28 | .67 | 3 | 5 9 | 2016-09-28 | .23 | 4 | 1 10 | 2016-09-28 | .23 | 5 | 1 11 | 2016-09-28 | .23 | 6 | 1 12 | 2016-09-29 | .23 | 7 | 1 13 | 2016-09-29 | .34 | 7 | 2 14 | 2016-09-29 | .45 | 7 | 3 15 | 2016-09-29 | .56 | 7 | 4 16 | 2016-09-29 | .67 | 7 | 5 17 | 2016-09-29 | .78 | 7 | 6 18 | 2016-09-29 | .89 | 7 | 7 19 | 2016-09-29 | .89 | 8 | 7 20 | 2016-09-30 | .23 | 9 | 1 (20 rows)
Τα δεδομένα φαίνονται καλά, ας συνεχίσουμε.
Καθώς ορίζεται η πηγή δεδομένων, είμαστε πλέον έτοιμοι να εισαγάγουμε τα δεδομένα στο HDFS. Το sqoop
Η εντολή που θα εξετάσουμε παρατίθεται παρακάτω και θα αναλύσουμε κάθε όρισμα στα σημεία που ακολουθούν. Σημειώστε ότι η εντολή υποτίθεται ότι βρίσκεται σε μια πλήρη γραμμή ή, όπως φαίνεται παρακάτω, με την ανάστροφη κάθετο (ο χαρακτήρας συνέχισης της γραμμής εντολών Linux) στο τέλος κάθε γραμμής εκτός από την τελευταία.
sqoop import --connect 'jdbc:postgresql://aaa.bbb.ccc.ddd:5432/ApeeScape?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory' --username 'postgres' -P --table 'sales' --target-dir 'sales' --split-by 'pksales'
sqoop import
- Το εκτελέσιμο όνομα ονομάζεται sqoop
και το καθοδηγούμε να εισάγει τα δεδομένα από έναν πίνακα ή προβολή από μια βάση δεδομένων στο HDFS.--connect
- Με το --connect
επιχείρημα, περνάμε στη συμβολοσειρά σύνδεσης JDBC για PostgreSQL. Σε αυτήν την περίπτωση, χρησιμοποιούμε τη διεύθυνση IP, τον αριθμό θύρας και το όνομα της βάσης δεδομένων. Πρέπει επίσης να προσδιορίσουμε ότι το SSL χρησιμοποιείται και πρέπει να παρέχουμε το SSLSocketFactory
τάξη που θα χρησιμοποιηθεί.--username
- Σε αυτό το παράδειγμα, το όνομα χρήστη είναι σύνδεση PostgreSQL και όχι σύνδεση με Windows. Ο χρήστης πρέπει να έχει δικαιώματα για να συνδεθεί με την καθορισμένη βάση δεδομένων και να επιλέξει από τον καθορισμένο πίνακα.-P
- Αυτό θα ζητήσει από τον χρήστη της γραμμής εντολών τον κωδικό πρόσβασης. Εάν το Sqoop εκτελείται σπάνια, αυτό μπορεί να είναι μια καλή επιλογή. Υπάρχουν πολλοί άλλοι τρόποι για να μεταβιβάσετε τον κωδικό πρόσβασης στην εντολή αυτόματα, αλλά προσπαθούμε να τον κρατήσουμε απλό για αυτό το άρθρο.--table
- Εδώ περνάμε στο όνομα του πίνακα PostgreSQL.--target-dir
- Αυτό το όρισμα καθορίζει τον κατάλογο HDFS όπου θα αποθηκευτούν τα δεδομένα.--split-by
- Πρέπει να παρέχουμε στο Sqoop ένα μοναδικό αναγνωριστικό για να το βοηθήσουμε να διανείμει τον φόρτο εργασίας. Αργότερα στην έξοδο της εργασίας, θα δούμε πού επιλέγει το Sqoop τις ελάχιστες και μέγιστες τιμές για να βοηθήσει στον καθορισμό διαχωρισμένων ορίων.Είναι καλή ιδέα να βάλετε την εντολή σε ένα σενάριο για επαναληψιμότητα και σκοπούς επεξεργασίας, όπως φαίνεται παρακάτω:
[ [email protected] :/sqoop]$ cat sqoopCommand.sh sqoop import --connect 'jdbc:postgresql://aaa.bbb.ccc.ddd:5432/toptal?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory' --username 'postgres' -P --table 'sales' --target-dir 'sales' --split-by 'pksales' [ [email protected] :/sqoop]$
Τώρα, ήρθε η ώρα να εκτελέσετε το παραπάνω σενάριο εντολών Sqoop. Η έξοδος από την εντολή Sqoop φαίνεται παρακάτω.
[ [email protected] :/sqoop]$ ./sqoopCommand.sh 16/10/02 18:58:34 INFO sqoop.Sqoop: Running Sqoop version: 1.4.5-cdh5.2.0 Enter password: 16/10/02 18:58:40 INFO manager.SqlManager: Using default fetchSize of 1000 16/10/02 18:58:40 INFO tool.CodeGenTool: Beginning code generation 16/10/02 18:58:41 INFO manager.SqlManager: Executing SQL statement: SELECT t.* FROM 'sales' AS t LIMIT 1 16/10/02 18:58:41 INFO orm.CompilationManager: HADOOP_MAPRED_HOME is /usr/lib/hadoop-0.20-mapreduce Note: /tmp/sqoop-training/compile/77f9452788024792770d52da72ae871f/sales.java uses or overrides a deprecated API. Note: Recompile with -Xlint:deprecation for details. 16/10/02 18:58:43 INFO orm.CompilationManager: Writing jar file: /tmp/sqoop-training/compile/77f9452788024792770d52da72ae871f/sales.jar 16/10/02 18:58:43 WARN manager.PostgresqlManager: It looks like you are importing from postgresql. 16/10/02 18:58:43 WARN manager.PostgresqlManager: This transfer can be faster! Use the --direct 16/10/02 18:58:43 WARN manager.PostgresqlManager: option to exercise a postgresql-specific fast path. 16/10/02 18:58:43 INFO mapreduce.ImportJobBase: Beginning import of sales 16/10/02 18:58:45 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should implement Tool for the same. 16/10/02 18:58:46 INFO db.DBInputFormat: Using read commited transaction isolation 16/10/02 18:58:46 INFO db.DataDrivenDBInputFormat: BoundingValsQuery: SELECT MIN('pksales'), MAX('pksales') FROM 'sales' 16/10/02 18:58:47 INFO mapred.JobClient: Running job: job_201609280401_0005 16/10/02 18:58:48 INFO mapred.JobClient: map 0% reduce 0% 16/10/02 18:59:04 INFO mapred.JobClient: map 50% reduce 0% 16/10/02 18:59:14 INFO mapred.JobClient: map 75% reduce 0% 16/10/02 18:59:15 INFO mapred.JobClient: map 100% reduce 0% 16/10/02 18:59:18 INFO mapred.JobClient: Job complete: job_201609280401_0005 16/10/02 18:59:18 INFO mapred.JobClient: Counters: 23 16/10/02 18:59:18 INFO mapred.JobClient: File System Counters 16/10/02 18:59:18 INFO mapred.JobClient: FILE: Number of bytes read=0 16/10/02 18:59:18 INFO mapred.JobClient: FILE: Number of bytes written=1190344 16/10/02 18:59:18 INFO mapred.JobClient: FILE: Number of read operations=0 16/10/02 18:59:18 INFO mapred.JobClient: FILE: Number of large read operations=0 16/10/02 18:59:18 INFO mapred.JobClient: FILE: Number of write operations=0 16/10/02 18:59:18 INFO mapred.JobClient: HDFS: Number of bytes read=438 16/10/02 18:59:18 INFO mapred.JobClient: HDFS: Number of bytes written=451 16/10/02 18:59:18 INFO mapred.JobClient: HDFS: Number of read operations=4 16/10/02 18:59:18 INFO mapred.JobClient: HDFS: Number of large read operations=0 16/10/02 18:59:18 INFO mapred.JobClient: HDFS: Number of write operations=4 16/10/02 18:59:18 INFO mapred.JobClient: Job Counters 16/10/02 18:59:18 INFO mapred.JobClient: Launched map tasks=4 16/10/02 18:59:18 INFO mapred.JobClient: Total time spent by all maps in occupied slots (ms)=48877 16/10/02 18:59:18 INFO mapred.JobClient: Total time spent by all reduces in occupied slots (ms)=0 16/10/02 18:59:18 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0 16/10/02 18:59:18 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0 16/10/02 18:59:18 INFO mapred.JobClient: Map-Reduce Framework 16/10/02 18:59:18 INFO mapred.JobClient: Map input records=20 16/10/02 18:59:18 INFO mapred.JobClient: Map output records=20 16/10/02 18:59:18 INFO mapred.JobClient: Input split bytes=438 16/10/02 18:59:18 INFO mapred.JobClient: Spilled Records=0 16/10/02 18:59:18 INFO mapred.JobClient: CPU time spent (ms)=3980 16/10/02 18:59:18 INFO mapred.JobClient: Physical memory (bytes) snapshot=481574912 16/10/02 18:59:18 INFO mapred.JobClient: Virtual memory (bytes) snapshot=2949685248 16/10/02 18:59:18 INFO mapred.JobClient: Total committed heap usage (bytes)=127401984 16/10/02 18:59:18 INFO mapreduce.ImportJobBase: Transferred 451 bytes in 33.7555 seconds (13.3608 bytes/sec) 16/10/02 18:59:18 INFO mapreduce.ImportJobBase: Retrieved 20 records. [ [email protected] :/sqoop]$
Παρατηρήστε ότι η τελευταία γραμμή εξόδου παραπάνω δείχνει ότι ανακτήθηκαν 20 εγγραφές, η οποία αντιστοιχεί στις 20 εγγραφές στον πίνακα της βάσης δεδομένων PostgreSQL.
Μετά την εκτέλεση της εντολής Sqoop, μπορούμε να εκτελέσουμε το hdfs dfs -ls
εντολή για να δείτε τον κατάλογο που δημιουργήθηκε από προεπιλογή με το όνομα του πίνακα στο HDFS.
[ [email protected] :/sqoop]$ hdfs dfs -ls Found 1 items drwxrwxrwx - toptal data 0 2016-10-02 18:59 sales [ [email protected] :/sqoop]$
Μπορούμε να χρησιμοποιήσουμε το hdfs dfs -ls
εντολή ξανά για να εμφανίσετε τα περιεχόμενα του sales
Ευρετήριο. Εάν κοιτάξετε το HDFS, μπορείτε να παρατηρήσετε ότι τα δεδομένα διαμοιράζονται και κατανέμονται σε τέσσερα αρχεία από προεπιλογή, όχι μόνο που περιέχονται σε ένα.
[ [email protected] :/sqoop]$ hdfs dfs -ls sales Found 6 items -rw-rw-rw- 1 toptal data 0 2016-10-02 18:59 sales/_SUCCESS drwxrwxrwx - toptal data 0 2016-10-02 18:58 sales/_logs -rw-rw-rw- 1 toptal data 110 2016-10-02 18:59 sales/part-m-00000 -rw-rw-rw- 1 toptal data 111 2016-10-02 18:59 sales/part-m-00001 -rw-rw-rw- 1 toptal data 115 2016-10-02 18:59 sales/part-m-00002 -rw-rw-rw- 1 toptal data 115 2016-10-02 18:59 sales/part-m-00003 [ [email protected] :/sqoop]$
Το hdfs dfs -cat
Η εντολή θα εμφανίσει όλες τις εγγραφές στο πρώτο διαμέρισμα των δεδομένων πωλήσεων στο HDFS.
τι είναι ένα ταμείο αναζήτησης
[ [email protected] :/sqoop]$ hdfs dfs -cat sales/part-m-00000 1,2016-09-27,1.23,1,1 2,2016-09-27,2.34,1,2 3,2016-09-27,1.23,2,1 4,2016-09-27,2.34,2,2 5,2016-09-27,3.45,2,3 [ [email protected] :/sqoop]$
Σημειώστε ότι ο προεπιλεγμένος διαχωριστής αρχείων είναι κόμμα. Επίσης, παρατηρήστε ότι υπάρχουν μόνο πέντε σειρές σε κάθε διαμέρισμα, επειδή οι 20 σειρές στην πηγή έχουν κατανεμηθεί εξίσου στα τέσσερα διαμερίσματα.
Για να περιορίσουμε τον αριθμό των γραμμών που εξάγονται στην οθόνη, μπορούμε να διοχετεύσουμε την έξοδο του cat
εντολή στο head
εντολή όπως φαίνεται παρακάτω, για να ελέγξετε το περιεχόμενο των άλλων τριών κατατμήσεων.
Το -n 5
επιχείρημα στο head
Η εντολή περιορίζει την έξοδο οθόνης στις πέντε πρώτες σειρές.
(Σημειώστε ότι στην περίπτωσή μας, αυτό είναι περιττό, αφού υπάρχουν μόνο πέντε σειρές σε κάθε διαμέρισμα για να ξεκινήσετε. Στην πράξη, ωστόσο, πιθανότατα θα έχετε πολλές περισσότερες σειρές από αυτό σε κάθε διαμέρισμα και θα θέλατε να ελέγξετε μόνο τις πρώτες λίγες έως βεβαιωθείτε ότι φαίνονται σωστά, οπότε αυτό σας δείχνει πώς να το κάνετε.)
[ [email protected] :/sqoop]$ hdfs dfs -cat sales/part-m-00001 |head -n 5 6,2016-09-28,3.45,3,3 7,2016-09-28,4.56,3,4 8,2016-09-28,5.67,3,5 9,2016-09-28,1.23,4,1 10,2016-09-28,1.23,5,1 [ [email protected] :/sqoop]$ hdfs dfs -cat sales/part-m-00002 |head -n 5 11,2016-09-28,1.23,6,1 12,2016-09-29,1.23,7,1 13,2016-09-29,2.34,7,2 14,2016-09-29,3.45,7,3 15,2016-09-29,4.56,7,4 [ [email protected] :/sqoop]$ hdfs dfs -cat sales/part-m-00003 |head -n 5 16,2016-09-29,5.67,7,5 17,2016-09-29,6.78,7,6 18,2016-09-29,7.89,7,7 19,2016-09-29,7.89,8,7 20,2016-09-30,1.23,9,1 [ [email protected] :/sqoop]$
Εάν πρέπει να εκτελέσετε ένα ερώτημα για εξαγωγή δεδομένων από πολλούς πίνακες στη βάση δεδομένων PostgreSQL, αυτό μπορεί να επιτευχθεί με την ακόλουθη εντολή:
[ [email protected] :/sqoop]$ cat sqoopCommand.sh sqoop import --connect 'jdbc:postgresql://aaa.bbb.ccc.ddd:5432/toptal?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory' --username 'postgres' -P --target-dir 'creditCardOrders' --split-by 'pksales' --query 'select s.pksales, s.saledate, s.saleamount, o.shippingtype, o.methodofpayment from sales s inner join orders o on s.orderid=o.orderid where o.methodofpayment='credit card' and $CONDITIONS' [ [email protected] :/sqoop]$
Στην παραπάνω εντολή, χρησιμοποιούμε μερικά από τα ίδια ορίσματα στην εντολή Sqoop, αλλά αποκτούν διαφορετική σημασία όταν χρησιμοποιούνται με μια εντολή SQL.
--target-dir
- Ο κατάλογος προορισμού λέει στο Sqoop σε ποιον κατάλογο στο HDFS να αποθηκεύει τα επιλεγμένα δεδομένα. Αυτό το επιχείρημα απαιτείται από τη Sqoop κατά τη χρήση ενός ερωτήματος ελεύθερης μορφής.--split-by
- Ακόμα κι αν επιλέγουμε το κύριο κλειδί του πίνακα πωλήσεων, πρέπει να παρέχουμε στο Sqoop ένα μοναδικό αναγνωριστικό για να το βοηθήσουμε να διανείμει τον φόρτο εργασίας.--query
- Αυτό είναι το επιχείρημα στο οποίο παρέχουμε το ερώτημα SQL. Το παραπάνω ερώτημα περικλείεται σε διπλά εισαγωγικά. Παρατηρήστε ότι υπάρχει δεν μια ανάστροφη κάθετο (ο χαρακτήρας συνέχισης γραμμής) στις πολλαπλές γραμμές που περιέχουν το ερώτημα. Επίσης, παρατηρήστε το and $CONDITIONS
στο τέλος του WHERE
ρήτρα. Αυτό απαιτείται από το Sqoop επειδή το Sqoop θα αντικαταστήσει αυτόματα το $CONDITIONS
διακριτικό με μια μοναδική έκφραση.Το HDFS έχει πολλά πλεονεκτήματα έναντι των σχεσιακών βάσεων δεδομένων. Αν κάνετε ανάλυση δεδομένων, θα πρέπει να εξετάσετε το ενδεχόμενο μετεγκατάστασης των δεδομένων σας στο HDFS σήμερα.
Με την δεξιότητες μάθαμε εδώ, η εισαγωγή δεδομένων από ένα σχεσιακό σύστημα βάσεων δεδομένων σε HDFS είναι μια απλή και απλή διαδικασία που μπορεί να επιτευχθεί με μία μόνο εντολή. Ενώ αυτά τα παραδείγματα έχουν μικρό αριθμό σειρών, οι μηχανισμοί εισαγωγής μεγάλων όγκων δεδομένων σε HDFS από έναν πίνακα βάσεων δεδομένων PostgreSQL παραμένουν οι ίδιοι.
Μπορείτε ακόμη και να πειραματιστείτε με την εισαγωγή μεγάλων πινάκων και διαφορετικών οριοθετών αποθήκευσης. Η χρήση του Apache Sqoop είναι πιο αποτελεσματική από την εξαγωγή δεδομένων βάσης δεδομένων σε ένα αρχείο, τη μεταφορά του αρχείου από το διακομιστή βάσης δεδομένων στο HDFS και, στη συνέχεια, τη φόρτωση του αρχείου στο HDFS.
Σχετίζεται με: Ενισχύστε τα δεδομένα σας με το R