Apache Sqoop-veiledning - Importer / eksporter data mellom HDFS og RDBMS



Apache Sqoop Tutorial: Sqoop er et verktøy for overføring av data mellom Hadoop og relasjonsdatabaser. Denne bloggen dekker Sooop import og eksport fra MySQL.

Før vi begynner med denne Apache Sqoop-opplæringen, la oss ta et skritt tilbake. Kan du huske viktigheten av inntak av data, slik vi diskuterte det i vår tidligere blogg på Apache Flume . Nå som vi vet at Apache Flume er et datainntakingsverktøy for ustrukturerte kilder, men organisasjoner lagrer sine operative data i relasjonsdatabaser. Så det var behov for et verktøy som kan importere og eksportere data fra relasjonsdatabaser. Dette er grunnen til at Apache Sqoop ble født. Sqoop kan enkelt integreres med Hadoop og dumpe strukturerte data fra relasjonsdatabaser på HDFS, og komplimentere kraften til Hadoop. Dette er grunnen til at mandater en god kunnskap om Apache Sqoop og Flume.

Opprinnelig ble Sqoop utviklet og vedlikeholdt av Cloudera. Senere, 23. juli 2011, ble den inkubert av Apache. I april 2012 ble Sqoop-prosjektet promotert som Apache sitt toppnivå-prosjekt.





I denne Apache Flume opplæringsbloggen vil vi dekke:

hva er årsakene til å opprette en forekomst av filklassen?



Vi begynner denne Apache Sqoop-opplæringen ved å introdusere Apache Sqoop. Deretter vil vi forstå fordelene ved å bruke Apache Sqoop.

Apache Sqoop Tutorial: Sqoop Introduksjon

Apache Sqoop - Apache Sqoop Tutorial - EdurekaVanligvis samhandler applikasjoner med relasjonsdatabasen ved hjelp av RDBMS, og dermed gjør relasjonsdatabaser til en av de viktigste kildene som genererer Big Data. Slike data lagres i RDB-servere i relasjonsstrukturen. Her spiller Apache Sqoop en viktig rolle i , som gir gjennomførbar interaksjon mellom relasjonsdatabaseserveren og HDFS.

Så Apache Sqoop er et verktøy i som er designet for å overføre data mellom HDFS (Hadoop-lagring) og relasjonelle databaseservere som MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres etc. Apache Sqoop importerer data fra relasjonsdatabaser til HDFS, og eksporterer data fra HDFS til relasjonsdatabaser. Den overfører effektivt bulkdata mellom Hadoop og eksterne datalagre, som for eksempel datalager, relasjonsdatabaser, etc.



Slik fikk Sqoop navnet sitt - “ SQ L til Had åpen & Hadoop til SQL ”.

I tillegg brukes Sqoop til å importere data fra eksterne datalagre til Hadoop økosystemets verktøy som Hive & HBase .

Nå, som vi vet hva er Apache Sqoop. Så la oss gå videre i vår Apache Sqoop-opplæring og forstå hvorfor Sqoop brukes mye av organisasjoner.

Apache Sqoop Opplæring: Hvorfor Sqoop?

For Hadoop-utvikler starter selve spillet etter at dataene er lastet inn i HDFS. De spiller rundt disse dataene for å få ulike innsikter skjult i dataene som er lagret i HDFS.

Så for denne analysen, må dataene som ligger i relasjonelle databasestyringssystemer overføres til HDFS. Oppgaven med å skrive kode for import og eksport av data fra relasjonsdatabasen til HDFS er uinteressant og kjedelig. Det er her Apache Sqoop kommer for å redde og fjerner smertene. Den automatiserer prosessen med å importere og eksportere dataene.

Sqoop gjør utviklernes liv enkelt ved å tilby CLI for import og eksport av data. De må bare gi grunnleggende informasjon som databaseautentisering, kilde, destinasjon, operasjoner osv. Det tar seg av den gjenværende delen.

Sqoop konverterer internt kommandoen til MapReduce-oppgaver, som deretter utføres over HDFS. Den bruker YARN framework for å importere og eksportere dataene, noe som gir feiltoleranse på toppen av parallellitet.

Fremover i denne Sqoop opplæringsbloggen vil vi forstå de viktigste funksjonene i Sqoop, og deretter vil vi gå videre til Apache Sqoop-arkitekturen.

Apache Sqoop Tutorial: Nøkkelfunksjoner i Sqoop

Sqoop har mange fremtredende funksjoner som:

  1. Fullastet : Apache Sqoop kan laste hele tabellen med en enkelt kommando. Du kan også laste alle tabellene fra en database ved hjelp av en enkelt kommando.
  2. Trinnvis Laste : Apache Sqoop tilbyr også muligheten for trinnvis belastning der du kan laste deler av tabellen når den oppdateres.
  3. Parallell import Eksport : Sqoop bruker YARN framework til å importere og eksportere dataene, noe som gir feiltoleranse på toppen av parallellitet.
  4. Import resultater av SQL spørsmål : Du kan også importere resultatet som returneres fra et SQL-spørsmål i HDFS.
  5. Kompresjon : Du kan komprimere dataene dine ved å bruke deflate (gzip) -algoritme med –compress-argument, eller ved å spesifisere –compression-codec-argument. Du kan også laste inn komprimert tabell Apache Hive .
  6. Kontakter til alle major RDBMS Databaser : Apache Sqoop tilbyr kontakter for flere RDBMS-databaser, som dekker nesten hele omkretsen.
  7. Kerberos Sikkerhet Integrering : Kerberos er en datanettverksautentiseringsprotokoll som fungerer på basis av ‘billetter’ for å tillate noder som kommuniserer over et ikke-sikkert nettverk for å bevise identiteten sin til hverandre på en sikker måte. Sqoop støtter Kerberos-autentisering.
  8. Laste data direkte inn i HIVE / HBase : Du kan laste data direkte inn i Apache Hive for analyse og også dumpe dataene dine i HBase, som er en NoSQL-database.
  9. Brukerstøtte til Akkumulering : Du kan også be Sqoop om å importere tabellen i Accumulo i stedet for en katalog i HDFS.

Arkitekturen er en som gir Apache Sqoop disse fordelene. Nå som vi kjenner funksjonene til Apache Sqoop, la oss gå videre og forstå Apache Sqoops arkitektur og arbeid.

Apache Sqoop Tutorial: Sqoop Architecture & Working

La oss forstå hvordan Apache Sqoop fungerer ved hjelp av diagrammet nedenfor:

Importverktøyet importerer individuelle tabeller fra RDBMS til HDFS. Hver rad i en tabell behandles som en post i HDFS.

Når vi sender inn Sqoop-kommandoen, blir hovedoppgaven vår delt inn i deloppgaver som håndteres av den enkelte kartoppgaven internt. Kartoppgave er deloppgave, som importerer deler av data til Hadoop økosystem. Til sammen importerer alle kartoppgaver hele dataene.

Eksport fungerer også på lignende måte.

Eksportverktøyet eksporterer et sett med filer fra HDFS tilbake til en RDBMS. Filene gitt som input til Sqoop inneholder poster, som kalles som rader i tabellen.

Når vi sender jobben vår, blir den kartlagt i kartoppgaver som bringer data fra HDFS. Disse delene eksporteres til et mål for strukturerte data. Ved å kombinere alle disse eksporterte biter av data, mottar vi hele dataene på destinasjonen, som i de fleste tilfeller er en RDBMS (MYSQL / Oracle / SQL Server).

Redusere fase er nødvendig i tilfelle aggregeringer. Men Apache Sqoop importerer og eksporterer bare dataene, det utfører ingen aggregeringer. Kartjobb starter flere kartleggere, avhengig av antallet som er definert av brukeren. For import av Sqoop vil hver kartleggeroppgave tildeles en del av dataene som skal importeres. Sqoop distribuerer inndataene mellom kartleggere likt for å få høy ytelse. Deretter oppretter hver kartlegger en forbindelse med databasen ved hjelp av JDBC og henter den delen av data som er tildelt av Sqoop og skriver den inn i HDFS eller Hive eller HBase basert på argumentene som er gitt i CLI.

Nå som vi forstår arkitekturen og arbeidet til Apache Sqoop, la oss forstå forskjellen mellom Apache Flume og Apache Sqoop.

Apache Sqoop opplæring: Flume vs Sqoop

Den største forskjellen mellom Flume og Sqoop er at:

  • Flume setter bare ustrukturerte data eller semistrukturerte data inn i HDFS.
  • Mens Sqoop kan importere så vel som eksportere strukturerte data fra RDBMS eller Enterprise datalager til HDFS eller omvendt.

Nå som vi går videre i vår Apache Sqoop-opplæring, er det på høy tid å gå gjennom Apache Sqoop-kommandoer.

Apache Sqoop opplæring: Sqoop kommandoer

  • Sqoop - IMPORT-kommando

Importkommando brukes til å importere en tabell fra relasjonsdatabaser til HDFS. I vårt tilfelle skal vi importere tabeller fra MySQL-databaser til HDFS.

Som du kan se i bildet nedenfor, har vi medarbeidertabell i medarbeiderdatabasen som vi skal importere til HDFS.

Kommandoen for å importere tabell er:

sqoop import --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka - tabell ansatte

Som du kan se i bildet nedenfor, vil kartoppgaver etter utførelsen av denne kommandoen utføres på baksiden.

Etter at koden er utført, kan du sjekke nettgrensesnittet til HDFS, dvs. localhost: 50070 der dataene importeres.

  • Sqoop - IMPORT-kommando med målkatalog

Du kan også importere tabellen i en bestemt katalog i HDFS ved å bruke kommandoen nedenfor:

sqoop import --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka - bordansatte - m 1 - target-dir / ansatte

Sqoop importerer data parallelt fra de fleste databasekilder. -m egenskap brukes til å spesifisere antall kartleggere som skal utføres.

Sqoop importerer data parallelt fra de fleste databasekilder. Du kan angi antall kartoppgaver (parallelle prosesser) som skal brukes til å utføre importen ved hjelp av -m eller –Nummer-kartleggere argument. Hvert av disse argumentene tar et heltall som tilsvarer graden av parallellitet å benytte.

Du kan kontrollere antall kartleggere uavhengig av antall filer som er tilstede i katalogen. Eksportytelse avhenger av graden av parallellitet. Som standard vil Sqoop bruke fire oppgaver parallelt for eksportprosessen. Dette er kanskje ikke optimalt, du må eksperimentere med ditt eget oppsett. Ytterligere oppgaver kan gi bedre samtidighet, men hvis databasen allerede er flaskehalset for oppdatering av indekser, påkaller utløsere og så videre, kan ekstra belastning redusere ytelsen.

Du kan se på bildet nedenfor at antall kartleggeroppgaver er 1.

Antall filer som opprettes under import av MySQL-tabeller er lik antall kartleggere som er opprettet.

  • Sqoop - IMPORT-kommando med hvor klausul

Du kan importere et delsett av en tabell ved hjelp av 'hvor' -satsen i Sqoop-importverktøyet. Den utfører den tilsvarende SQL-spørringen i den respektive databaseserveren og lagrer resultatet i en målkatalog i HDFS. Du kan bruke følgende kommando til å importere data med ‘ hvor ' klausul:

sqoop import --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka - tabellmedarbeidere - m 3 - hvor 'emp_no & gt 49000' - target-dir / Latest_Medarbeidere

  • Sqoop - Inkrementell import

Sqoop gir en inkrementell importmodus som kan brukes til å bare hente rader nyere enn noen tidligere importerte rader. Sqoop støtter to typer inkrementell import: legge til og sist endret . Du kan bruke –incremental-argumentet til å spesifisere typen inkrementell import som skal utføres.

Du bør spesifisere legge til modus når du importerer en tabell der nye rader kontinuerlig legges til med økende rad-ID-verdier. Du angir kolonnen som inneholder radens ID med –Kontrollkolonne . Sqoop importerer rader der sjekkkolonnen har en verdi større enn den som er spesifisert med –Siste verdi .

En alternativ tabelloppdateringsstrategi som støttes av Sqoop kalles sist endret modus. Du bør bruke dette når rader i kildetabellen kan oppdateres, og hver slik oppdatering vil sette verdien til en sist endret kolonne til gjeldende tidsstempel.

Når du kjører en påfølgende import, bør du spesifisere –Siste verdi på denne måten for å sikre at du bare importerer de nye eller oppdaterte dataene. Dette håndteres automatisk ved å opprette en trinnvis import som en lagret jobb, som er den foretrukne mekanismen for å utføre en tilbakevendende trinnvis import.

Først setter vi inn en ny rad som vil bli oppdatert i HDFS.

Kommandoen for trinnvis import er:

sqoop import --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka - tabellansatte --target-dir / Latest_Employees --incremental append --check-column emp_no --last-value 499999

Du kan se på bildet nedenfor, en ny fil opprettes med oppdaterte data.

  • Sqoop - Importer alle tabeller

Du kan importere alle tabellene fra RDBMS-databaseserveren til HDFS. Hver tabelldata lagres i en egen katalog og katalognavnet er det samme som tabellnavnet. Det er obligatorisk at hver tabell i databasen må ha et primært nøkkelfelt. Kommandoen for å importere hele tabellen fra en database er:

sqoop import-all-tables --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka

  • Sqoop - Liste databaser

Du kan liste opp databasene som er tilstede i relasjonsdatabasen ved hjelp av Sqoop. Sqoop liste-databaser verktøy analyserer og utfører spørsmålet 'VIS DATABASER' mot databaseserveren. Kommandoen for oppføring av databaser er:

sqoop liste-databaser --connect jdbc: mysql: // localhost / --brukernavn edureka

  • Sqoop - Liste tabeller

Du kan også liste ut tabellene til en bestemt database i MySQL-databaseserver ved hjelp av Sqoop. Sqoop liste-tabeller verktøysletter og utfører spørsmålet 'VIS TABLER'. Kommandoen for å oppføre tabeller er en database er:

sqoop listetabeller --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka

  • Sqoop - Eksporter

Som vi diskuterte ovenfor, kan du også eksportere data fra HDFS til RDBMS-databasen. Måletabellen må eksistere i måldatabasen.Dataene lagres som poster i HDFS. Disse postene blir lest og analysert og avgrenset med brukerdefinert skilletegn.Standardoperasjonen er å sette inn alle postene fra inndatafilene til databasetabellen ved hjelp av INSERT-setningen. I oppdateringsmodus genererer Sqoop UPDATE-setningen som erstatter den eksisterende posten i databasen.

Så først lager vi en tom tabell hvor vi eksporterer dataene våre.

Kommandoen for å eksportere data fra HDFS til relasjonsdatabasen er:

sqoop eksport --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka - tabell emp --export-dir / bruker / edureka / ansatte

  • Sqoop - Codegen

I objektorientert applikasjon har hver databasetabell én Data Access Object-klasse som inneholder 'getter' og 'setter' metoder for å initialisere objekter. Codegen genererer DAO-klassen automatisk. Den genererer DAO-klasse i Java, basert på tabellskjema-strukturen.

Kommandoen for å generere Java-kode er:

sqoop codegen --connect jdbc: mysql: // localhost / ansatte - brukernavn edureka - tabell ansatte

Du kan se banen i bildet over hvor koden genereres. La oss gå veien og sjekke filene som er opprettet.

Jeg håper denne bloggen er informativ og gir merverdi for deg. Hvis du er interessert i å lære mer, kan du gå gjennom dette som forteller deg om Big Data og hvordan Hadoop løser utfordringer knyttet til Big Data.

Nå som du har forstått Apache Sqoop, sjekk ut av Edureka, et pålitelig online læringsfirma med et nettverk av mer enn 250 000 fornøyde elever spredt over hele verden. Edureka Big Data Hadoop-sertifiseringstreningskurs hjelper elever å bli eksperter på HDFS, Garn, MapReduce, Pig, Hive, HBase, Oozie, Flume og Sqoop ved å bruke sanntidsbruk på Retail, Social Media, Aviation, Tourism, Finance.

Har du et spørsmål til oss? Vennligst nevn det i kommentarfeltet, så kommer vi tilbake til deg.