Apache Sqoop-zelfstudie - Gegevens importeren / exporteren tussen HDFS en RDBMS



Apache Sqoop-zelfstudie: Sqoop is een tool voor het overbrengen van gegevens tussen Hadoop en relationele databases. Deze blog behandelt de import en export van Sooop vanuit MySQL.

Voordat we met deze Apache Sqoop-zelfstudie beginnen, moeten we een stap terug doen. Kunt u zich het belang van gegevensopname herinneren, zoals we het in onze eerdere blog hebben besproken Apache Flume . Zoals we weten, is Apache Flume een hulpmiddel voor gegevensopname voor ongestructureerde bronnen, maar organisaties slaan hun operationele gegevens op in relationele databases. Er was dus behoefte aan een tool die gegevens uit relationele databases kan importeren en exporteren. Dit is de reden waarom Apache Sqoop werd geboren. Sqoop kan eenvoudig worden geïntegreerd met Hadoop en gestructureerde gegevens uit relationele databases op HDFS dumpen, wat de kracht van Hadoop aanvult. Dit is waarom, vereist een gedegen kennis van Apache Sqoop en Flume.

In eerste instantie werd Sqoop ontwikkeld en onderhouden door Cloudera. Later, op 23 juli 2011, werd het geïncubeerd door Apache. In april 2012 werd het Sqoop-project gepromoot als Apache's project op het hoogste niveau.





In deze Apache Flume-tutorialblog behandelen we:



We beginnen deze Apache Sqoop-zelfstudie door Apache Sqoop te introduceren. Als we verder gaan, zullen we de voordelen van het gebruik van Apache Sqoop begrijpen.

Apache Sqoop-zelfstudie: Sqoop-introductie

Apache Sqoop - Apache Sqoop-zelfstudie - EdurekaOver het algemeen communiceren applicaties met de relationele database met behulp van RDBMS, waardoor relationele databases een van de belangrijkste bronnen zijn die Big Data genereren. Dergelijke gegevens worden opgeslagen in RDB-servers in de relationele structuur. Hier speelt Apache Sqoop een belangrijke rol in , waardoor een haalbare interactie wordt geboden tussen de relationele databaseserver en HDFS.

Apache Sqoop is dus een tool in die is ontworpen om gegevens tussen HDFS (Hadoop-opslag) en relationele databaseservers zoals MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres enz. Apache Sqoop importeert gegevens van relationele databases naar HDFS en exporteert gegevens van HDFS naar relationele databases. Het draagt ​​efficiënt bulkgegevens over tussen Hadoop en externe datastores, zoals datawarehouses, relationele databases, enz.



Dit is hoe Sqoop zijn naam kreeg - ' SQ L naar Had Open & Hadoop naar SQL ”.

Bovendien wordt Sqoop gebruikt om gegevens uit externe datastores te importeren in de tools van het Hadoop-ecosysteem, zoals Bijenkorf & HBase .

Nu, zoals we weten wat Apache Sqoop is. Laten we dus verder gaan in onze Apache Sqoop-zelfstudie en begrijpen waarom Sqoop op grote schaal door organisaties wordt gebruikt.

Apache Sqoop-zelfstudie: waarom Sqoop?

Voor Hadoop-ontwikkelaar start het eigenlijke spel nadat de gegevens in HDFS zijn geladen. Ze spelen rond deze gegevens om verschillende inzichten te krijgen die verborgen zijn in de gegevens die zijn opgeslagen in HDFS.

Voor deze analyse moeten de gegevens die zich in de relationele databasebeheersystemen bevinden, worden overgedragen naar HDFS. De taak van het schrijven code voor het importeren en exporteren van gegevens uit de relationele database naar HDFS is oninteressant en vervelend. Dit is waar Apache Sqoop te hulp komt en hun pijn wegneemt. Het automatiseert het proces van het importeren en exporteren van de gegevens.

Sqoop maakt het leven van ontwikkelaars gemakkelijk door CLI te bieden voor het importeren en exporteren van gegevens. Ze hoeven alleen basisinformatie te verstrekken, zoals database-authenticatie, bron, bestemming, bewerkingen enz. Het zorgt voor het resterende deel.

Sqoop zet de opdracht intern om in MapReduce-taken, die vervolgens worden uitgevoerd via HDFS. Het maakt gebruik van het YARN-framework om de gegevens te importeren en exporteren, wat fouttolerantie biedt bovenop parallellisme.

Als we vooruitgaan in deze Sqoop Tutorial-blog, zullen we de belangrijkste functies van Sqoop begrijpen en dan gaan we verder met de Apache Sqoop-architectuur.

Apache Sqoop-zelfstudie: belangrijkste kenmerken van Sqoop

Sqoop biedt veel opvallende functies, zoals:

  1. Volle lading : Apache Sqoop kan de hele tabel laden met een enkele opdracht. U kunt ook alle tabellen uit een database laden met een enkele opdracht.
  2. Incrementeel Laden : Apache Sqoop biedt ook de mogelijkheid van incrementeel laden, waar u delen van de tabel kunt laden wanneer deze wordt bijgewerkt.
  3. Parallel importeren / exporteren : Sqoop gebruikt het YARN-framework om de gegevens te importeren en exporteren, wat fouttolerantie biedt bovenop parallellisme.
  4. Importeren resultaten van SQL vraag : U kunt het resultaat dat wordt geretourneerd door een SQL-query ook importeren in HDFS.
  5. Compressie : U kunt uw gegevens comprimeren door het deflate-algoritme (gzip) te gebruiken met het argument –compress, of door het argument –compression-codec op te geven. U kunt ook een gecomprimeerde tabel laden in Apache Hive .
  6. Connectoren voor alle majoor RDBMS Databases : Apache Sqoop biedt connectoren voor meerdere RDBMS-databases, die bijna de gehele omtrek beslaan.
  7. Kerberos Veiligheid Integratie : Kerberos is een authenticatieprotocol voor computernetwerken dat werkt op basis van ‘tickets’ om nodes die communiceren via een niet-beveiligd netwerk toe te staan ​​om hun identiteit op een veilige manier aan elkaar te bewijzen. Sqoop ondersteunt Kerberos-verificatie.
  8. Laden gegevens direct in HIVE / HBase : U kunt gegevens rechtstreeks laden in Apache Hive voor analyse en dump uw gegevens ook in HBase, wat een NoSQL-database is.
  9. Ondersteuning voor Accumulatie : Je kunt Sqoop ook opdracht geven om de tabel in Accumulo te importeren in plaats van een directory in HDFS.

De architectuur is er een die Apache Sqoop deze voordelen biedt. Nu we de functies van Apache Sqoop kennen, gaan we verder en begrijpen we de architectuur en werking van Apache Sqoop.

Apache Sqoop-zelfstudie: Sqoop-architectuur en werken

Laten we begrijpen hoe Apache Sqoop werkt met behulp van het onderstaande diagram:

De importtool importeert individuele tabellen van RDBMS naar HDFS. Elke rij in een tabel wordt behandeld als een record in HDFS.

Wanneer we het Sqoop-commando indienen, wordt onze hoofdtaak verdeeld in subtaken die intern door individuele kaarttaken worden afgehandeld. Kaarttaak is de subtaak die een deel van de gegevens naar het Hadoop-ecosysteem importeert. Gezamenlijk importeren alle kaarttaken de volledige gegevens.

Export werkt ook op een vergelijkbare manier.

De exporttool exporteert een set bestanden van HDFS terug naar een RDBMS. De bestanden die als invoer aan Sqoop worden gegeven, bevatten records, die als rijen in de tabel worden genoemd.

Wanneer we onze taak indienen, wordt deze toegewezen aan kaarttaken, die het stuk gegevens uit HDFS halen. Deze brokken worden geëxporteerd naar een gestructureerde gegevensbestemming. Door al deze geëxporteerde brokken gegevens te combineren, ontvangen we de volledige gegevens op de bestemming, wat in de meeste gevallen een RDBMS (MYSQL / Oracle / SQL Server) is.

Verkleiningsfase is vereist in het geval van aggregaties. Maar Apache Sqoop importeert en exporteert alleen de gegevens en voert geen aggregaties uit. Kaarttaak start meerdere mappers, afhankelijk van het aantal dat door de gebruiker is gedefinieerd. Voor Sqoop-import wordt aan elke mapper-taak een deel van de te importeren gegevens toegewezen. Sqoop verdeelt de invoergegevens gelijkelijk over de mappers om hoge prestaties te krijgen. Vervolgens maakt elke mapper een verbinding met de database met behulp van JDBC en haalt het deel van de gegevens op dat is toegewezen door Sqoop en schrijft het naar HDFS of Hive of HBase op basis van de argumenten in de CLI.

Nu we de architectuur en werking van Apache Sqoop begrijpen, gaan we het verschil begrijpen tussen Apache Flume en Apache Sqoop.

Apache Sqoop-zelfstudie: Flume vs Sqoop

Het belangrijkste verschil tussen Flume en Sqoop is dat:

  • Flume neemt alleen ongestructureerde gegevens of semi-gestructureerde gegevens op in HDFS.
  • Terwijl Sqoop zowel gestructureerde gegevens kan importeren als exporteren van RDBMS- of Enterprise-datawarehouses naar HDFS of vice versa.

Nu we verdergaan in onze Apache Sqoop-zelfstudie, is het de hoogste tijd om Apache Sqoop-opdrachten te doorlopen.

Apache Sqoop-zelfstudie: Sqoop-opdrachten

  • Sqoop - IMPORT Command

De opdracht Import wordt gebruikt om een ​​tabel uit relationele databases naar HDFS te importeren. In ons geval gaan we tabellen importeren uit MySQL-databases naar HDFS.

Zoals u in de onderstaande afbeelding kunt zien, hebben we een werknemerstabel in de werknemersdatabase die we in HDFS zullen importeren.

Het commando voor het importeren van een tabel is:

sqoop import --connect jdbc: mysql: // localhost / workers --username edureka --table medewerkers

Zoals je in de onderstaande afbeelding kunt zien, worden na het uitvoeren van dit commando Map-taken aan de achterkant uitgevoerd.

just in time compiler java

Nadat de code is uitgevoerd, kunt u de webinterface van HDFS controleren, d.w.z. localhost: 50070 waar de gegevens worden geïmporteerd.

  • Sqoop - IMPORT Commando met doelmap

U kunt de tabel ook in een specifieke map in HDFS importeren met de onderstaande opdracht:

sqoop import --connect jdbc: mysql: // localhost / medewerkers --gebruikersnaam edureka --tabel medewerkers --m 1 --target-dir / medewerkers

Sqoop importeert gegevens parallel uit de meeste databasebronnen. -m eigenschap wordt gebruikt om het aantal uit te voeren mappers te specificeren.

Sqoop importeert gegevens parallel uit de meeste databasebronnen. U kunt het aantal kaarttaken (parallelle processen) specificeren dat moet worden gebruikt om de import uit te voeren door de -m of –Num-mappers argument. Elk van deze argumenten heeft een geheel getal dat overeenkomt met de mate van parallellisme die moet worden gebruikt.

U kunt het aantal mappers onafhankelijk van het aantal bestanden in de directory beheren. Exportprestaties zijn afhankelijk van de mate van parallellisme. Standaard gebruikt Sqoop vier taken parallel voor het exportproces. Dit is misschien niet optimaal, u zult moeten experimenteren met uw eigen specifieke opstelling. Extra taken bieden mogelijk betere gelijktijdigheid, maar als de database al een bottleneck heeft bij het bijwerken van indices, het aanroepen van triggers, enzovoort, kan extra belasting de prestaties verminderen.

U kunt in de onderstaande afbeelding zien dat het aantal mapper-taken 1 is.

Het aantal bestanden dat wordt gemaakt tijdens het importeren van MySQL-tabellen is gelijk aan het aantal gemaakte mapper.

  • Sqoop - IMPORT-opdracht met Where-clausule

U kunt een subset van een tabel importeren met de ‘where’ -component in de Sqoop-importtool. Het voert de overeenkomstige SQL-query uit in de respectieve databaseserver en slaat het resultaat op in een doelmap in HDFS. U kunt de volgende opdracht gebruiken om gegevens te importeren met ‘ waar ‘Clausule:

sqoop import --connect jdbc: mysql: // localhost / medewerkers --gebruikersnaam edureka --tabel medewerkers --m 3 --waar 'emp_no & gt 49000' --target-dir / Latest_Employees

  • Sqoop - Incrementele import

Sqoop biedt een incrementele importmodus die kan worden gebruikt om alleen rijen op te halen die nieuwer zijn dan een eerder geïmporteerde set rijen. Sqoop ondersteunt twee soorten incrementele invoer: toevoegen en laatst gewijzigd . U kunt het argument –incremental gebruiken om het type incrementele import op te geven dat moet worden uitgevoerd.

statische lidfunctie in c ++

U moet specificeren toevoegen modus bij het importeren van een tabel waar voortdurend nieuwe rijen worden toegevoegd met toenemende rij-id-waarden. U specificeert de kolom met de id van de rij met –Check-kolom . Sqoop importeert rijen waarvan de selectiekolom een ​​waarde heeft die groter is dan de waarde die is opgegeven met - laatste waarde .

Een alternatieve strategie voor het bijwerken van tabellen die door Sqoop wordt ondersteund, wordt genoemd laatst gewijzigd modus. U moet dit gebruiken wanneer rijen van de brontabel kunnen worden bijgewerkt, en elke dergelijke update zal de waarde van een laatst gewijzigde kolom instellen op het huidige tijdstempel.

Wanneer u een volgende import uitvoert, moet u specificeren - laatste waarde op deze manier om ervoor te zorgen dat u alleen de nieuwe of bijgewerkte gegevens importeert. Dit wordt automatisch afgehandeld door een incrementele import als een opgeslagen taak te maken, wat het voorkeursmechanisme is voor het uitvoeren van een terugkerende incrementele import.

Ten eerste voegen we een nieuwe rij in die zal worden bijgewerkt in onze HDFS.

Het commando voor incrementele import is:

sqoop import --connect jdbc: mysql: // localhost / medewerkers --gebruikersnaam edureka --tabel medewerkers --target-dir / Latest_Employees --incremental append --check-column emp_no --last-value 499999

U kunt in de onderstaande afbeelding zien dat er een nieuw bestand is gemaakt met de bijgewerkte gegevens.

  • Sqoop - Importeer alle tabellen

U kunt alle tabellen van de RDBMS-databaseserver naar de HDFS importeren. Elke tabelgegevens worden in een aparte directory opgeslagen en de directorynaam is hetzelfde als de tabelnaam. Het is verplicht dat elke tabel in die database een primair sleutelveld moet hebben. Het commando voor het importeren van alle tabellen uit een database is:

sqoop import-all-tables --connect jdbc: mysql: // localhost / workers --username edureka

  • Sqoop - Lijst met databases

U kunt de databases in de relatiedatabase weergeven met behulp van Sqoop. Sqoop list-databases tool parseert en voert de ‘SHOW DATABASES’ -query uit op de databaseserver. De opdracht voor het weergeven van databases is:

sqoop lijst-databases --connect jdbc: mysql: // localhost / --gebruikersnaam edureka

  • Sqoop - Lijsttabellen

U kunt ook de tabellen van een bepaalde database op de MySQL-databaseserver weergeven met Sqoop. Sqoop list-tables tool parseert en voert de ‘SHOW TABLES’ -query uit. Het commando voor het weergeven van tabellen is een database is:

sqoop lijst-tabellen --connect jdbc: mysql: // localhost / werknemers --gebruikersnaam edureka

  • Sqoop - Exporteren

Zoals we hierboven hebben besproken, kunt u ook gegevens exporteren van de HDFS naar de RDBMS-database. De doeltabel moet in de doeldatabase bestaan.De gegevens worden opgeslagen als records in HDFS. Deze records worden gelezen en geparseerd en gescheiden met een door de gebruiker opgegeven scheidingsteken.De standaardbewerking is om alle records van de invoerbestanden in de databasetabel in te voegen met behulp van de instructie INSERT. In de updatemodus genereert Sqoop de UPDATE-instructie die het bestaande record in de database vervangt.

We maken dus eerst een lege tabel, waar we onze gegevens naartoe exporteren.

De opdracht om gegevens van HDFS naar de relationele database te exporteren is:

sqoop export --connect jdbc: mysql: // localhost / workers --username edureka --table emp --export-dir / user / edureka / workers

  • Sqoop - Codegen

In objectgeoriënteerde applicaties heeft elke databasetabel één Data Access Object-klasse die ‘getter’ en ‘setter’ methoden bevat om objecten te initialiseren. Codegen genereert automatisch de DAO-klasse. Het genereert een DAO-klasse in Java, op basis van de Table Schema-structuur.

Het commando voor het genereren van Java-code is:

sqoop codegen --connect jdbc: mysql: // localhost / medewerkers --gebruikersnaam edureka --tabel medewerkers

U kunt het pad in bovenstaande afbeelding zien waar de code wordt gegenereerd. Laten we het pad opgaan en de bestanden controleren die zijn gemaakt.

Ik hoop dat deze blog informatief en een meerwaarde voor je is. Als u meer wilt weten, kunt u dit doornemen die u vertelt over Big Data en hoe Hadoop uitdagingen met betrekking tot Big Data oplost.

Nu je Apache Sqoop hebt begrepen, kun je het door Edureka, een vertrouwd online leerbedrijf met een netwerk van meer dan 250.000 tevreden leerlingen verspreid over de hele wereld. De Edureka Big Data Hadoop-certificeringstraining helpt leerlingen expert te worden in HDFS, Yarn, MapReduce, Pig, Hive, HBase, Oozie, Flume en Sqoop met behulp van real-time use cases op het gebied van Retail, Social Media, Aviation, Tourism, Finance.

Heeft u een vraag voor ons? Vermeld het in het opmerkingengedeelte en we nemen contact met u op.