Apache Sqoop-handledning - Importera / exportera data mellan HDFS och RDBMS



Apache Sqoop Handledning: Sqoop är ett verktyg för att överföra data mellan Hadoop och relationsdatabaser. Den här bloggen omfattar import och export av Sooop från MySQL.

Innan vi börjar med denna Apache Sqoop-handledning, låt oss ta ett steg tillbaka. Kommer du ihåg vikten av datainmatning, som vi diskuterade det i vår tidigare blogg på Apache Flume . Nu, som vi vet att Apache Flume är ett dataintagningsverktyg för ostrukturerade källor, men organisationer lagrar sina operativa data i relationsdatabaser. Så det fanns ett behov av ett verktyg som kan importera och exportera data från relationsdatabaser. Det är därför Apache Sqoop föddes. Sqoop kan enkelt integreras med Hadoop och dumpa strukturerad data från relationsdatabaser på HDFS, vilket kompletterar kraften i Hadoop. Det här är varför, föreskriver en god kunskap om Apache Sqoop och Flume.

Ursprungligen utvecklades och underhålls Sqoop av Cloudera. Senare den 23 juli 2011 inkuberades det av Apache. I april 2012 marknadsfördes Sqoop-projektet som Apache-projekt på toppnivå.





I den här Apache Flume-handledningsbloggen kommer vi att täcka:



java hur man konverterar dubbel till int

Vi kommer att börja denna Apache Sqoop-handledning genom att introducera Apache Sqoop. Sedan kommer vi att förstå fördelarna med att använda Apache Sqoop.

Apache Sqoop Handledning: Sqoop Introduktion

Apache Sqoop - Apache Sqoop Tutorial - EdurekaI allmänhet interagerar applikationer med relationsdatabasen med RDBMS, vilket gör relationsdatabaser till en av de viktigaste källorna som genererar Big Data. Sådan information lagras i RDB-servrar i relationsstrukturen. Här spelar Apache Sqoop en viktig roll i som ger möjlig interaktion mellan relationsdatabasservern och HDFS.

Så Apache Sqoop är ett verktyg i som är utformad för att överföra data mellan HDFS (Hadoop-lagring) och relationsdatabasservrar som MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres etc. Apache Sqoop importerar data från relationsdatabaser till HDFS och exporterar data från HDFS till relationsdatabaser. Det överför effektivt bulkdata mellan Hadoop och externa datalagrar som företagslager, relationsdatabaser etc.



Så här fick Sqoop sitt namn - “ SQ L till Had öppet & Hadoop till SQL ”.

Dessutom används Sqoop för att importera data från externa datalagrar till Hadoop-ekosystemets verktyg som Bikupa & HBase .

Nu, som vi vet vad är Apache Sqoop. Så, låt oss gå vidare i vår Apache Sqoop-handledning och förstå varför Sqoop används i stor utsträckning av organisationer.

Apache Sqoop Handledning: Varför Sqoop?

För Hadoop-utvecklaren börjar det faktiska spelet efter att data laddats i HDFS. De spelar runt dessa data för att få olika insikter dolda i data lagrade i HDFS.

Så för denna analys måste data som finns i relationsdatabashanteringssystemen överföras till HDFS. Uppgiften att skriva kod för att importera och exportera data från relationsdatabasen till HDFS är ointressant och tråkig. Det är här Apache Sqoop kommer för att rädda och tar bort deras smärta. Det automatiserar processen att importera och exportera data.

Sqoop gör utvecklarnas liv enkelt genom att tillhandahålla CLI för import och export av data. De måste bara tillhandahålla grundläggande information som databasautentisering, källa, destination, operationer etc. Det tar hand om den återstående delen.

Sqoop konverterar internt kommandot till MapReduce-uppgifter, som sedan körs via HDFS. Den använder YARN-ramverk för att importera och exportera data, vilket ger feltolerans utöver parallellitet.

Framåt i denna Sqoop Tutorial-blogg kommer vi att förstå de viktigaste funktionerna i Sqoop och sedan går vi vidare till Apache Sqoop-arkitekturen.

Apache Sqoop Tutorial: Viktiga funktioner i Sqoop

Sqoop erbjuder många framträdande funktioner som:

  1. Full belastning : Apache Sqoop kan ladda hela tabellen med ett enda kommando. Du kan också ladda alla tabeller från en databas med ett enda kommando.
  2. Inkrementell Ladda : Apache Sqoop ger också möjlighet till stegvis belastning där du kan ladda delar av tabellen när den uppdateras.
  3. Parallell import Export : Sqoop använder YARN-ramverk för att importera och exportera data, vilket ger feltolerans utöver parallellitet.
  4. Importera resultat av SQL fråga : Du kan också importera resultatet som returneras från en SQL-fråga i HDFS.
  5. Kompression : Du kan komprimera dina data med hjälp av deflate (gzip) -algoritmen med –compress-argument, eller genom att ange –compression-codec-argument. Du kan också ladda komprimerad tabell i Apache-bikupan .
  6. Kontaktdon för Allt större RDBMS Databaser : Apache Sqoop tillhandahåller anslutningar för flera RDBMS-databaser, som täcker nästan hela omkretsen.
  7. Kerberos säkerhet Integration : Kerberos är ett autentiseringsprotokoll för datanätverk som fungerar på basis av 'biljetter' för att tillåta noder som kommunicerar över ett icke-säkert nätverk för att bevisa sin identitet för varandra på ett säkert sätt. Sqoop stöder Kerberos-autentisering.
  8. Ladda data direkt in i HIVE / HBase : Du kan ladda in data direkt i Apache-bikupan för analys och dumpa också dina data i HBase, som är en NoSQL-databas.
  9. Stöd för Ackumulation : Du kan också instruera Sqoop att importera tabellen i Accumulo snarare än en katalog i HDFS.

Arkitekturen är en som ger Apache Sqoop dessa fördelar. Nu, som vi känner till funktionerna i Apache Sqoop, ska vi gå vidare och förstå Apache Sqoops arkitektur och arbete.

Apache Sqoop Handledning: Sqoop Architecture & Working

Låt oss förstå hur Apache Sqoop fungerar med följande diagram:

Importverktyget importerar enskilda tabeller från RDBMS till HDFS. Varje rad i en tabell behandlas som en post i HDFS.

När vi skickar Sqoop-kommandot delas vår huvuduppgift upp i deluppgifter som hanteras av enskild kartuppgift internt. Map Task är deluppgiften, som importerar en del av data till Hadoop Ecosystem. Sammantaget importerar alla kartuppgifter hela data.

Export fungerar också på liknande sätt.

Exportverktyget exporterar en uppsättning filer från HDFS tillbaka till en RDBMS. Filerna som ges till Sqoop innehåller poster som kallas som rader i tabellen.

När vi skickar in vårt jobb mappas det till kartuppgifter som ger en bit data från HDFS. Dessa bitar exporteras till en strukturerad datadestination. Genom att kombinera alla dessa exporterade bitar av data får vi hela data vid destinationen, som i de flesta fall är en RDBMS (MYSQL / Oracle / SQL Server).

Minska fasen krävs vid aggregeringar. Men Apache Sqoop importerar bara och exporterar data, de utför inga aggregeringar. Kartjobb startar flera kartläggare beroende på det antal som användaren definierar. För Sqoop-import tilldelas varje mapparuppgift en del av data som ska importeras. Sqoop distribuerar ingångsdata bland mapparna lika för att få hög prestanda. Sedan skapar varje mapper en anslutning till databasen med JDBC och hämtar den del av data som tilldelats av Sqoop och skriver den till HDFS eller Hive eller HBase baserat på argumenten i CLI.

Nu när vi förstår arkitekturen och arbetet med Apache Sqoop, låt oss förstå skillnaden mellan Apache Flume och Apache Sqoop.

Apache Sqoop Handledning: Flume vs Sqoop

Den största skillnaden mellan Flume och Sqoop är att:

  • Flume intar bara ostrukturerad data eller halvstrukturerad data i HDFS.
  • Medan Sqoop kan importera och exportera strukturerad data från RDBMS eller Enterprise datalager till HDFS eller vice versa.

Nu när vi går vidare i vår Apache Sqoop-handledning är det hög tid att gå igenom Apache Sqoop-kommandon.

Apache Sqoop Handledning: Sqoop-kommandon

  • Sqoop - IMPORT-kommando

Importkommandot används för att importera en tabell från relationsdatabaser till HDFS. I vårt fall kommer vi att importera tabeller från MySQL-databaser till HDFS.

Som du kan se i bilden nedan har vi anställdstabell i personaldatabasen som vi kommer att importera till HDFS.

Kommandot för att importera tabell är:

Big Data Developer jobbbeskrivning
sqoop import --connect jdbc: mysql: // localhost / anställda - användarnamn edureka - tabellanställda

Som du kan se i bilden nedan kommer kartuppgifterna att utföras i bakänden efter körningen av detta kommando.

När koden har körts kan du kontrollera webbgränssnittet för HDFS, dvs. localhost: 50070 där data importeras.

  • Sqoop - IMPORT-kommando med målkatalog

Du kan också importera tabellen i en specifik katalog i HDFS med kommandot nedan:

sqoop import --connect jdbc: mysql: // localhost / anställda - användarnamn edureka - tabellanställda - m 1 - target-dir / medarbetare

Sqoop importerar data parallellt från de flesta databaskällor. -m egenskap används för att ange antalet mappar som ska köras.

Sqoop importerar data parallellt från de flesta databaskällor. Du kan ange antalet kartuppgifter (parallella processer) som ska användas för att utföra importen med -m eller –Num-mappers argument. Var och en av dessa argument tar ett heltal som motsvarar graden av parallellitet som ska användas.

Du kan styra antalet mappar oberoende av antalet filer som finns i katalogen. Exportprestanda beror på graden av parallellitet. Som standard kommer Sqoop att använda fyra uppgifter parallellt för exportprocessen. Detta kanske inte är optimalt, du måste experimentera med din egen inställning. Ytterligare uppgifter kan erbjuda bättre samtidighet, men om databasen redan är flaskhalsad för att uppdatera index, åberopa utlösare och så vidare kan ytterligare belastning minska prestanda.

Du kan se i bilden nedan att antalet mappuppgifter är 1.

Antalet filer som skapas vid import av MySQL-tabeller är lika med antalet mappare som skapats.

  • Sqoop - IMPORT-kommando med var klausul

Du kan importera en delmängd av en tabell med hjälp av 'var' -satsen i Sqoop-importverktyget. Den kör motsvarande SQL-fråga i respektive databasserver och lagrar resultatet i en målkatalog i HDFS. Du kan använda följande kommando för att importera data med var Klausul:

sqoop import --anslut jdbc: mysql: // localhost / anställda - användarnamn edureka - tabellanställda - m 3 - där 'emp_no & gt 49000' - target-dir / Latest_Anställda

  • Sqoop - Inkrementell import

Sqoop tillhandahåller ett inkrementellt importläge som kan användas för att bara hämta rader nyare än någon tidigare importerad rad. Sqoop stöder två typer av inkrementell import: bifoga och Senast ändrad . Du kan använda –incremental-argumentet för att ange vilken typ av inkrementell import som ska utföras.

Du bör specificera bifoga läge när du importerar en tabell där nya rader kontinuerligt läggs till med ökande rad-ID-värden. Du anger kolumnen som innehåller radens id med –Kolla kolumn . Sqoop importerar rader där kontrollkolumnen har ett värde större än det som anges med –Sista-värde .

En alternativ strategi för uppdatering av tabellen som stöds av Sqoop kallas Senast ändrad läge. Du bör använda detta när rader i källtabellen kan uppdateras, och varje sådan uppdatering ställer in värdet för en senast modifierad kolumn till aktuell tidsstämpel.

När du kör en efterföljande import bör du ange –Sista-värde på detta sätt för att säkerställa att du bara importerar nya eller uppdaterade data. Detta hanteras automatiskt genom att skapa en inkrementell import som ett sparat jobb, vilket är den föredragna mekanismen för att utföra en återkommande inkrementell import.

Först sätter vi in ​​en ny rad som kommer att uppdateras i vår HDFS.

Kommandot för inkrementell import är:

sqoop import --connect jdbc: mysql: // localhost / anställda - användarnamn edureka - tabellanställda - target-dir / Latest_Anställda --incremental append --check-column emp_no --last-value 499999

Du kan se i bilden nedan, en ny fil skapas med uppdaterade data.

  • Sqoop - Importera alla tabeller

Du kan importera alla tabeller från RDBMS-databasservern till HDFS. Varje tabelldata lagras i en separat katalog och katalognamnet är detsamma som tabellnamnet. Det är obligatoriskt att varje tabell i databasen måste ha ett primärt nyckelfält. Kommandot för att importera hela tabellen från en databas är:

konvertera decimal till binär pythonkod
sqoop import-all-tables --connect jdbc: mysql: // localhost / anställda - användarnamn edureka

  • Sqoop - Lista databaser

Du kan lista ut de databaser som finns i relationsdatabasen med Sqoop. Sqoop-listdatabasverktyget analyserar och kör frågan ”VISA DATABASER” mot databasservern. Kommandot för att lista databaser är:

sqoop list-databaser --connect jdbc: mysql: // localhost / --användarnamn edureka

  • Sqoop - Listtabeller

Du kan också lista ut tabellerna för en viss databas i MySQL-databasservern med Sqoop. Sqoop list-tabeller analyserar och kör frågan ”VISA TABELLER”. Kommandot för att lista tabeller är en databas:

sqoop listtabeller --connect jdbc: mysql: // localhost / anställda - användarnamn edureka

  • Sqoop - Exportera

Som vi diskuterade ovan kan du också exportera data från HDFS till RDBMS-databasen. Måltabellen måste finnas i måldatabasen.Data lagras som poster i HDFS. Dessa poster läses och analyseras och avgränsas med användardefinierad avgränsare.Standardåtgärden är att infoga alla poster från inmatningsfilerna till databastabellen med INSERT-satsen. I uppdateringsläge genererar Sqoop UPDATE-uttalandet som ersätter den befintliga posten i databasen.

Så först skapar vi en tom tabell där vi exporterar våra data.

Kommandot för att exportera data från HDFS till relationsdatabasen är:

sqoop export --anslut jdbc: mysql: // localhost / anställda - användarnamn edureka - tabell emp --export-dir / användare / edureka / anställda

  • Sqoop - Codegen

I objektorienterad applikation har varje databastabell en Data Access Object-klass som innehåller 'getter' och 'setter' -metoder för att initialisera objekt. Codegen genererar DAO-klassen automatiskt. Det genererar DAO-klass i Java, baserat på tabellschemastrukturen.

Kommandot för att generera javakod är:

sqoop codegen --connect jdbc: mysql: // localhost / anställda - användarnamn edureka - tabellanställda

Du kan se sökvägen i bilden ovan där koden genereras. Låt oss gå vägen och kontrollera de filer som skapas.

Jag hoppas att den här bloggen är informativ och ger ett mervärde för dig. Om du är intresserad av att lära dig mer kan du gå igenom detta som berättar om Big Data och hur Hadoop löser utmaningar relaterade till Big Data.

Nu när du har förstått Apache Sqoop, kolla in av Edureka, ett pålitligt inlärningsföretag online med ett nätverk av mer än 250 000 nöjda elever spridda över hela världen. Edureka Big Data Hadoop-certifieringskursen hjälper eleverna att bli experter på HDFS, Garn, MapReduce, Pig, Hive, HBase, Oozie, Flume och Sqoop med realtidsanvändningsfall på Retail, Social Media, Aviation, Tourism, Finance.

Har du en fråga till oss? Vänligen nämna det i kommentarfältet så återkommer vi till dig.