Урок за Apache Sqoop - Импортиране / експортиране на данни между HDFS и RDBMS



Урок за Apache Sqoop: Sqoop е инструмент за прехвърляне на данни между Hadoop и релационни бази данни. Този блог обхваща Sooop внос и износ от MySQL.

Преди да започнем с този урок за Apache Sqoop, нека направим крачка назад. Можете ли да си припомните значението на поглъщането на данни, както го обсъдихме в по-ранния ни блог на Apache Flume . Сега, както знаем, че Apache Flume е инструмент за поглъщане на данни за неструктурирани източници, но организациите съхраняват своите оперативни данни в релационни бази данни. И така, имаше нужда от инструмент, който може да импортира и експортира данни от релационни бази данни. Ето защо се ражда Apache Sqoop. Sqoop може лесно да се интегрира с Hadoop и да изхвърля структурирани данни от релационни бази данни на HDFS, допълвайки мощта на Hadoop. Това е причината, изисква задълбочени познания за Apache Sqoop и Flume.

Първоначално Sqoop е разработен и поддържан от Cloudera. По-късно, на 23 юли 2011 г., тя е инкубирана от Apache. През април 2012 г. проектът Sqoop беше популяризиран като проект на Apache от най-високо ниво.





В този блог с уроци за Apache Flume ще разгледаме:



Ще започнем този урок за Apache Sqoop, като представим Apache Sqoop. След това напред ще разберем предимствата на използването на Apache Sqoop.

Урок за Apache Sqoop: Въведение в Sqoop

Apache Sqoop - Урок за Apache Sqoop - EdurekaКато цяло приложенията взаимодействат с релационната база данни, използвайки RDBMS, и по този начин това прави релационните бази данни един от най-важните източници, които генерират големи данни. Такива данни се съхраняват в RDB сървъри в релационната структура. Тук Apache Sqoop играе важна роля в , осигуряващ възможно взаимодействие между релационния сървър на база данни и HDFS.

И така, Apache Sqoop е инструмент в която е предназначена за прехвърляне на данни между HDFS (Hadoop Storage) и релационни сървъри на бази данни като MySQL, Oracle RDB, SQLite, Teradata, Netezza, Postgres и др. Apache Sqoop импортира данни от релационни бази данни в HDFS и експортира данни от HDFS в релационни бази данни. Той ефективно прехвърля групови данни между Hadoop и външни хранилища за данни, като корпоративни хранилища за данни, релационни бази данни и др.



Ето как Sqoop получи името си - “ SQ L до Хад отворен & Hadoop към SQL ”.

Освен това Sqoop се използва за импортиране на данни от външни хранилища за данни в инструменти на екосистемата на Hadoop като Кошера & HBase .

Сега, както знаем какво е Apache Sqoop. Така че, нека напредваме в нашия урок за Apache Sqoop и да разберем защо Sqoop се използва широко от организациите.

Урок за Apache Sqoop: Защо Sqoop?

За разработчика на Hadoop действителната игра започва след зареждането на данните в HDFS. Те играят около тези данни, за да получат различни прозрения, скрити в данните, съхранявани в HDFS.

Така че, за този анализ, данните, намиращи се в системите за управление на релационни бази данни, трябва да бъдат прехвърлени в HDFS. Задачата на писането кодът за импортиране и експортиране на данни от релационната база данни в HDFS е безинтересен и досаден. Тук Apache Sqoop идва да спаси и премахва болката им. Той автоматизира процеса на импортиране и експортиране на данните.

Sqoop улеснява живота на разработчиците, като предоставя CLI за импортиране и експортиране на данни. Те просто трябва да предоставят основна информация като удостоверяване на база данни, източник, местоназначение, операции и т.н. Той се грижи за останалата част.

Sqoop вътрешно преобразува командата в задачи MapReduce, които след това се изпълняват през HDFS. Той използва YARN рамка за импортиране и експортиране на данни, което осигурява толерантност към грешки на върха на паралелизма.

Напредвайки в този блог на Sqoop Tutorial, ще разберем основните характеристики на Sqoop и след това ще преминем към архитектурата Apache Sqoop.

Урок за Apache Sqoop: Основни характеристики на Sqoop

Sqoop предлага много забележителни функции като:

  1. Пълно натоварване : Apache Sqoop може да зареди цялата таблица с една команда. Можете също да заредите всички таблици от база данни с помощта на една команда.
  2. Постепенно Заредете : Apache Sqoop също така предоставя възможност за допълнително натоварване, където можете да заредите части от таблицата, когато тя се актуализира.
  3. Паралелно внос износ : Sqoop използва YARN рамка за импортиране и експортиране на данни, което осигурява толерантност към грешки на върха на паралелизма.
  4. Внос резултати на SQL заявка : Можете също да импортирате резултата, върнат от SQL заявка в HDFS.
  5. Компресия : Можете да компресирате данните си, като използвате алгоритъм за дефлиране (gzip) с аргумент –compress или като посочите аргумент –compression-codec. Можете също да заредите компресирана таблица в Apache Hive .
  6. Съединители за всичко майор RDBMS Бази данни : Apache Sqoop осигурява съединители за множество бази данни на RDBMS, покриващи почти цялата обиколка.
  7. Керберос Сигурност Интеграция : Kerberos е протокол за удостоверяване на компютърна мрежа, който работи на базата на „билети“, за да позволи на възлите, комуникиращи по незащитена мрежа, да доказват своята идентичност един на друг по сигурен начин. Sqoop поддържа Kerberos удостоверяване.
  8. Заредете данни директно в HIVE / HBase : Можете да зареждате данни директно в Apache Hive за анализ и също така изхвърляте данните си в HBase, която е база данни NoSQL.
  9. поддържа за Натрупване : Можете също така да инструктирате Sqoop да импортира таблицата в Accumulo, а не директория в HDFS.

Архитектурата е тази, която дава възможност на Apache Sqoop с тези предимства. Сега, тъй като познаваме характеристиките на Apache Sqoop, нека продължим напред и да разберем архитектурата и работата на Apache Sqoop.

Урок за Apache Sqoop: Архитектура и работа на Sqoop

Нека разберем как работи Apache Sqoop, като използваме диаграмата по-долу:

system.exit (0) може да се използва за прекратяване на програмата.

Инструментът за импортиране импортира отделни таблици от RDBMS към HDFS. Всеки ред в таблица се третира като запис в HDFS.

Когато изпратим командата Sqoop, основната ни задача се разделя на подзадачи, които се обработват от отделната задача на картата вътрешно. Map Task е подзадачата, която импортира част от данните в екосистемата Hadoop. Колективно всички задачи на Map импортират всички данни.

Експортът също работи по подобен начин.

Инструментът за експортиране експортира набор от файлове от HDFS обратно в RDBMS. Файловете, дадени като вход към Sqoop, съдържат записи, които се извикват като редове в таблицата.

Когато изпратим нашата работа, тя се отразява в Map Tasks, която носи част от данните от HDFS. Тези парчета се експортират към дестинация за структурирани данни. Комбинирайки всички тези експортирани парчета данни, ние получаваме всички данни в местоназначението, което в повечето случаи е RDBMS (MYSQL / Oracle / SQL Server).

Фазата на намаляване е необходима в случай на агрегации. Но Apache Sqoop просто импортира и експортира данните, които не извършва агрегиране. Заданието на картата стартира множество картографи в зависимост от броя, определен от потребителя. За импортиране на Sqoop, на всяка задача за картографиране ще бъде присвоена част от данните, които трябва да бъдат импортирани. Sqoop разпределя входните данни между картографите еднакво, за да постигне висока производителност. След това всеки картограф създава връзка с базата данни с помощта на JDBC и извлича частта от данните, присвоена от Sqoop, и я записва в HDFS или Hive или HBase въз основа на аргументите, предоставени в CLI.

Сега, когато разбираме архитектурата и работата на Apache Sqoop, нека разберем разликата между Apache Flume и Apache Sqoop.

Урок за Apache Sqoop: Flume срещу Sqoop

Основната разлика между Flume и Sqoop е, че:

  • Flume само поглъща неструктурирани данни или полуструктурирани данни в HDFS.
  • Докато Sqoop може да импортира, както и да експортира структурирани данни от RDBMS или корпоративни хранилища за данни в HDFS или обратно.

Сега, напредвайки в нашия урок за Apache Sqoop, е крайно време да преминете през командите на Apache Sqoop.

Урок за Apache Sqoop: Команди на Sqoop

  • Sqoop - команда IMPORT

Командата за импортиране се използва за импортиране на таблица от релационни бази данни в HDFS. В нашия случай ще импортираме таблици от MySQL бази данни в HDFS.

Както можете да видите на изображението по-долу, имаме таблица със служители в базата данни за служители, която ще импортираме в HDFS.

Командата за импортиране на таблица е:

sqoop import --connect jdbc: mysql: // localhost / служители - потребителско име edureka - служители на таблица

Както можете да видите на изображението по-долу, след изпълнението на тази команда задачите на Map ще бъдат изпълнени в задната част.

След като кодът бъде изпълнен, можете да проверите уеб потребителския интерфейс на HDFS, т.е. localhost: 50070, където данните се импортират.

  • Sqoop - ИМПОРТ Команда с целевата директория

Можете също да импортирате таблицата в определена директория в HDFS, като използвате командата по-долу:

sqoop import --connect jdbc: mysql: // localhost / служители - потребителско име edureka - таблица служители - m 1 --target-dir / служители

Sqoop импортира данни паралелно от повечето източници на бази данни. свойството се използва за указване на броя на картографиращите файлове, които да бъдат изпълнени.

Sqoop импортира данни паралелно от повечето източници на бази данни. Можете да посочите броя на задачите на картата (паралелни процеси), които да използвате за изпълнение на импортирането, като използвате или –Номератори аргумент. Всеки от тези аргументи приема целочислена стойност, която съответства на степента на паралелност, която да се използва.

Можете да контролирате броя на картографиращите файлове независимо от броя на файловете в директорията. Експортните резултати зависят от степента на паралелизъм. По подразбиране Sqoop ще използва паралелно четири задачи за процеса на експортиране. Това може да не е оптимално, ще трябва да експериментирате със собствената си настройка. Допълнителните задачи могат да предложат по-добра паралелност, но ако базата данни вече е ограничена от актуализиране на индекси, извикване на тригери и т.н., тогава допълнителното натоварване може да намали производителността.

На изображението по-долу можете да видите, че броят на задачата за картографиране е 1.

Броят на файловете, които се създават при импортиране на MySQL таблици, е равен на броя на създадените картографиращи програми.

  • Sqoop - Команда IMPORT с клауза Where

Можете да импортирате подмножество на таблица, като използвате клаузата ‘where’ в инструмента за импортиране на Sqoop. Той изпълнява съответната SQL заявка в съответния сървър на база данни и съхранява резултата в целевата директория в HDFS. Можете да използвате следната команда за импортиране на данни с „ където ' клауза:

sqoop импортиране - свързване jdbc: mysql: // localhost / служители - потребителско име edureka - таблица служители - m 3 - къде 'emp_no & gt 49000' --target-dir / Последни_Служители

  • Sqoop - Инкрементален внос

Sqoop осигурява инкрементален режим на импортиране, който може да се използва за извличане само на редове, по-нови от някои предварително импортирани редове. Sqoop поддържа два вида допълнителен внос: добави и последно модифициран . Можете да използвате аргумента –incremental, за да укажете вида на инкременталния импорт, който да се извърши.

Трябва да посочите добави режим при импортиране на таблица, в която непрекъснато се добавят нови редове с увеличаване на стойностите на идентификатора на реда. Посочвате колоната, съдържаща идентификатора на реда с –Чек-колона . Sqoop импортира редове, където контролната колона има стойност, по-голяма от посочената с –Последна стойност .

Извиква се алтернативна стратегия за актуализиране на таблици, поддържана от Sqoop последно модифициран режим. Трябва да използвате това, когато редовете на таблицата източник могат да бъдат актуализирани и всяка такава актуализация ще зададе стойността на последната модифицирана колона на текущия печат.

Когато изпълнявате последващ импорт, трябва да посочите –Последна стойност по този начин, за да сте сигурни, че импортирате само новите или актуализирани данни. Това се обработва автоматично чрез създаване на инкрементален импорт като запазена работа, което е предпочитаният механизъм за извършване на повтарящ се инкрементален импорт.

Първо, ние вмъкваме нов ред, който ще бъде актуализиран в нашия HDFS.

Командата за постепенно импортиране е:

sqoop импортиране - свързване jdbc: mysql: // localhost / служители - потребителско име edureka - таблица служители --target-dir / Последни_Служители - допълнително добавяне - чек-колона emp_no - последна стойност

Можете да видите на изображението по-долу, създава се нов файл с актуализираните данни.

  • Sqoop - Импортиране на всички таблици

Можете да импортирате всички таблици от сървъра на базата данни RDBMS в HDFS. Данните за всяка таблица се съхраняват в отделна директория и името на директорията е същото като името на таблицата. Задължително е всяка таблица в тази база данни да има поле за първичен ключ. Командата за импортиране на цялата таблица от база данни е:

sqoop import-all-tables --connect jdbc: mysql: // localhost / служители - потребителско име edureka

  • Sqoop - Списък с бази данни

Можете да изброите базите данни, присъстващи в базата данни на връзката, като използвате Sqoop. Инструментът Sqoop list-databases анализира и изпълнява заявката ‘SHOW DATABASES’ срещу сървъра на базата данни. Командата за изброяване на бази данни е:

sqoop list-databases --connect jdbc: mysql: // localhost / --username edureka

  • Sqoop - Таблици със списъци

Можете също така да изброите таблиците на определена база данни в сървъра на база данни MySQL, използвайки Sqoop. Инструментът Sqoop list-tables анализира и изпълнява заявката „ПОКАЗВАНЕ НА ТАБЛИЦИ“. Командата за изброяване на таблици е база данни е:

таблици на sqoop списък - свързване jdbc: mysql: // localhost / служители - потребителско име edureka

  • Sqoop - Експорт

Както обсъдихме по-горе, можете също да експортирате данни от HDFS в базата данни RDBMS. Целевата таблица трябва да съществува в целевата база данни.Данните се съхраняват като записи в HDFS. Тези записи се четат и анализират и разграничават с посочен от потребителя разделител.Операцията по подразбиране е да се вмъкне целият запис от входните файлове в таблицата на базата данни с помощта на израза INSERT. В режим на актуализация Sqoop генерира оператора UPDATE, който замества съществуващия запис в базата данни.

И така, първо създаваме празна таблица, където ще експортираме данните си.

Командата за експортиране на данни от HDFS в релационната база данни е:

sqoop износ - свързване jdbc: mysql: // localhost / служители - потребителско име edureka - таблица emp --export-dir / потребител / edureka / служители

  • Sqoop - Codegen

В обектно-ориентираното приложение всяка таблица на базата данни има един клас обект на достъп до данни, който съдържа методите ‘getter’ и ‘setter’ за инициализиране на обекти. Codegen генерира DAO класа автоматично. Той генерира DAO клас в Java, въз основа на структурата на табличната схема.

Командата за генериране на java код е:

sqoop codegen - свързване jdbc: mysql: // localhost / служители - потребителско име edureka - служители на таблица

Можете да видите пътя в горното изображение, където се генерира кодът. Нека тръгнем по пътя и проверим създадените файлове.

Надявам се, че този блог е информативен и с добавена стойност за вас. Ако се интересувате да научите повече, можете да преминете през това което ви разказва за големите данни и как Hadoop решава предизвикателства, свързани с големите данни.

След като разбрахте Apache Sqoop, разгледайте от Edureka, доверена компания за онлайн обучение с мрежа от над 250 000 доволни учащи, разпространени по целия свят. Курсът за обучение по сертифициране на големи данни Hadoop на Edureka помага на обучаемите да станат експерти в HDFS, прежди, MapReduce, Pig, Hive, HBase, Oozie, Flume и Sqoop, като използват случаи в реално време за търговия на дребно, социални медии, авиация, туризъм, финанси.

Имате въпрос към нас? Моля, споменете го в раздела за коментари и ние ще се свържем с вас.