ДБИнпутФормат за пренос података из СКЛ-а у НоСКЛ базу података



Циљ овог блога је научити како преносити податке из СКЛ база података у ХДФС, како преносити податке из СКЛ база података у НоСКЛ базе података.

На овом блогу ћемо истражити могућности и могућности једне од најважнијих компоненти Хадооп технологије, тј. МапРедуце.

Данас компаније усвајају Хадооп фрамеворк као свој први избор за складиштење података због његових могућности ефикасног руковања великим подацима. Али такође знамо да су подаци свестрани и да постоје у разним структурама и форматима. Да би се контролисала тако велика разноликост података и њихових различитих формата, требало би да постоји механизам који може да прилагоди све сорте, а да истовремено добије ефикасан и доследан резултат.





Најмоћнија компонента у Хадооп оквиру је МапРедуце која може пружити контролу над подацима и њиховом структуром боље од осталих колега. Иако то захтева опсег кривуље учења и сложеност програмирања, ако можете да се носите са овим сложењима, сигурно можете да обрађујете било коју врсту података са Хадооп-ом.

МапРедуце оквир дели све своје задатке обраде у основи у две фазе: Мапирање и Смањење.



Припрема ваших сирових података за ове фазе захтева разумевање неких основних класа и интерфејса. Супер класа за ову прераду је ИнпутФормат.

Тхе ИнпутФормат цласс је једна од основних класа у АПИ-ју Хадооп МапРедуце. Ова класа је одговорна за дефинисање две главне ствари:

  • Подаци се деле
  • Читач записа

Подјела података је основни концепт у оквиру Хадооп МапРедуце који дефинише величину појединачних задатака мапе и потенцијални сервер извршења. Тхе Рецорд Реадер одговоран је за стварне записе о читању из улазне датотеке и предаје их (као парове кључ / вредност) мапирачу.



Број мапирања одређује се на основу броја подела. Посао ИнпутФормат-а је да креира поделе. Већина временски подељене величине еквивалентна је величини блока, али не увек ће се дељења стварати на основу величине ХДФС блока. То у потпуности зависи од тога како је метода гетСплитс () вашег ИнпутФормат-а надјачана.

Постоји фундаментална разлика између МР сплит и ХДФС блока. Блок је физички комад података, док је сплит само логични комад који маппер чита. Подјела не садржи улазне податке, она само садржи референцу или адресу података. Сплит у основи има две ствари: дужину у бајтовима и скуп локација за складиштење, које су само низови.

Да бисмо ово боље разумели, узмимо један пример: Обрада података сачуваних у МиСКЛ-у помоћу МР-а. Будући да у овом случају не постоји концепт блокова, теорија: „поделе се увек креирају на основу ХДФС блока“,не успе. Једна од могућности је стварање подела на основу опсега редова у вашој МиСКЛ табели (а то је оно што ДБИнпутФормат ради, улазни формат за читање података из релационих база података). Можемо имати к број подела које се састоје од н редова.

Само за ИнпутФорматс засноване на ФилеИнпутФормат (ИнпутФормат за руковање подацима ускладиштеним у датотекама) поделе се креирају на основу укупне величине улазних датотека, у бајтовима. Међутим, величина блока ФилеСистем улазних датотека третира се као горња граница за улазне поделе. Ако имате датотеку мању од величине блока ХДФС, добићете само 1 мапирање за ту датотеку. Ако желите да имате другачије понашање, можете да користите мапред.мин.сплит.сизе. Али то опет зависи искључиво од гетСплитс () вашег ИнпутФормат-а.

Имамо толико већ постојећих формата уноса доступних у пакету орг.апацхе.хадооп.мапредуце.либ.инпут.

ЦомбинеФилеИнпутФормат.хтмл

ЦомбинеФилеРецордРеадер.хтмл

ЦомбинеФилеРецордРеадерВраппер.хтмл

ЦомбинеФилеСплит.хтмл

ЦомбинеСекуенцеФилеИнпутФормат.хтмл

ЦомбинеТектИнпутФормат.хтмл

ФилеИнпутФормат.хтмл

подаци инстанце за јава класу

ФилеИнпутФорматЦоунтер.хтмл

ФилеСплит.хтмл

ФикедЛенгтхИнпутФормат.хтмл

ИнвалидИнпутЕкцептион.хтмл

КеиВалуеЛинеРецордРеадер.хтмл

КеиВалуеТектИнпутФормат.хтмл

МултиплеИнпутс.хтмл

НЛинеИнпутФормат.хтмл

СекуенцеФилеАсБинариИнпутФормат.хтмл

СекуенцеФилеАсТектИнпутФормат.хтмл

СекуенцеФилеАсТектРецордРеадер.хтмл

СекуенцеФилеИнпутФилтер.хтмл

СекуенцеФилеИнпутФормат.хтмл

СекуенцеФилеРецордРеадер.хтмл

ТектИнпутФормат.хтмл

хасхмап и хасхтабле у јави

Подразумевано је ТектИнпутФормат.

Слично томе, имамо толико излазних формата који чита податке са редуктора и складишти их у ХДФС:

ФилеОутпутЦоммиттер.хтмл

ФилеОутпутФормат.хтмл

ФилеОутпутФорматЦоунтер.хтмл

ФилтерОутпутФормат.хтмл

ЛазиОутпутФормат.хтмл

МапФилеОутпутФормат.хтмл

МултиплеОутпутс.хтмл

НуллОутпутФормат.хтмл

ПартиалФилеОутпутЦоммиттер.хтмл

ПартиалОутпутЦоммиттер.хтмл

СекуенцеФилеАсБинариОутпутФормат.хтмл

СекуенцеФилеОутпутФормат.хтмл

ТектОутпутФормат.хтмл

Подразумевано је ТектОутпутФормат.

Док прочитате овај блог, научили бисте:

  • Како написати програм за смањење карте
  • О различитим врстама ИнпутФормат-а доступних у Мапредуце-у
  • Шта је потребно ИнпутФорматс
  • Како се пише прилагођени ИнпутФорматс
  • Како пренети податке из СКЛ база података у ХДФС
  • Како пренети податке из СКЛ (овде МиСКЛ) база података у НоСКЛ базе података (овде Хбасе)
  • Како пребацити податке из једне СКЛ базе података у другу табелу у СКЛ базама података (Можда ово можда није толико важно ако то радимо у истој бази података СКЛ. Међутим, нема ништа лоше у познавању исте. Никад се не зна како може да уђе у употребу)

Предуслов:

  • Хадооп је унапред инсталиран
  • Унапред инсталиран СКЛ
  • Унапред инсталиран Хбасе
  • Основно разумевање Јаве
  • МапСмањи знање
  • Хадооп фрамеворк основно знање

Хајде да разумемо изјаву о проблему коју ћемо овде решити:

Табелу запослених имамо у МиСКЛ ДБ у нашој релационој бази података Едурека. Сада, према пословном захтеву, морамо пребацити све податке доступне у релационом ДБ-у у систем датотека Хадооп, тј. ХДФС, НоСКЛ ДБ познат као Хбасе.

Имамо много могућности за обављање овог задатка:

  • Скооп
  • Флуме
  • Карта смањити

Сада не желите да инсталирате и конфигуришете ниједан други алат за ову операцију. Преостала вам је само једна опција, а то је Хадооп-ов оквир за обраду МапРедуце. МапРедуце оквир ће вам пружити потпуну контролу над подацима током преноса. Можете да манипулишете колонама и ставите их директно на било коју од две циљне локације.

Белешка:

  • Морамо да преузмемо и ставимо МиСКЛ конектор у стазу класе Хадооп да бисмо преузели табеле из МиСКЛ табеле. Да бисте то урадили, преузмите конектор цом.мискл.јдбц_5.1.5.јар и задржите га у директоријуму Хадооп_хоме / схаре / Хадооп / МаПредуце / либ.
цп Довнлоадс / цом.мискл.јдбц_5.1.5.јар $ ХАДООП_ХОМЕ / схаре / хадооп / мапредуце / либ /
  • Такође, ставите све Хбасе тегле под Хадооп стазу како би ваш МР програм приступио Хбасе-у. Да бисте то урадили, извршите следећу наредбу :
цп $ ХБАСЕ_ХОМЕ / либ / * $ ХАДООП_ХОМЕ / схаре / хадооп / мапредуце / либ /

Верзије софтвера које сам користио у извршавању овог задатка су:

  • Хадоооп-2.3.0
  • ХБаза 0,98,9-Хадооп2
  • Ецлипсе Моон

Да бих избегао програм у било ком проблему компатибилности, предлажем читаоцима да покрену команду са сличним окружењем.

Прилагођени ДБИнпутВритабле:

пакет цом.инпутФормат.цопи импорт јава.ио.ДатаИнпут импорт јава.ио.ДатаОутпут импорт јава.ио.ИОЕкцептион импорт јава.скл.РесултСет импорт јава.скл.ПрепаредСтатемент импорт јава.скл.СКЛЕкцептион импорт орг.апацхе.хадооп.иодо .Вритабле импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБВритабле јавна класа ДБИнпутВритабле имплементира Вритабле, ДБВритабле {привате инт ид привате Стринг наме, депт публиц воид реадФиелдс (ДатаИнпут ин) баца ИОЕкцептион {} публиц воид реадФиелдс (РесултСет) баца СКЛЕкцептион // Ресултсет објект представља податке враћене из СКЛ израза {ид = рс.гетИнт (1) наме = рс.гетСтринг (2) депт = рс.гетСтринг (3)} публиц воид врите (ДатаОутпут оут) баца ИОЕкцептион { } публиц воид врите (ПрепаредСтатемент пс) баца СКЛЕкцептион {пс.сетИнт (1, ид) пс.сетСтринг (2, наме) пс.сетСтринг (3, депт)} публиц инт гетИд () {ретурн ид} публиц Стринг гетНаме () {ретурн име} јавни стринг гетДепт () {ретурн депт}}

Прилагођени ДБОутпутВритабле:

пакет цом.инпутФормат.цопи импорт јава.ио.ДатаИнпут импорт јава.ио.ДатаОутпут импорт јава.ио.ИОЕкцептион импорт јава.скл.РесултСет импорт јава.скл.ПрепаредСтатемент импорт јава.скл.СКЛЕкцептион импорт орг.апацхе.хадооп.иодо .Вритабле импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБВритабле јавна класа ДБОутпутВритабле имплементира Вритабле, ДБВритабле {привате Стринг наме привате инт ид привате Стринг депт публиц ДБОутпутВритабле (Стринг наме, инт ид, Стринг депт) {тхис.наме = наме тхис.ид = ид тхис.депт = депт} публиц воид реадФиелдс (ДатаИнпут ин) баца ИОЕкцептион {} публиц воид реадФиелдс (РесултСет рс) баца СКЛЕкцептион {} публиц воид врите (ДатаОутпут оут) баца ИОЕкцептион {} публиц воид врите (ПрепаредСтатемент пс) баца СКЛЕкцептион {пс.сетСтринг (1, име) пс.сетИнт (2, ид) пс.сетСтринг (3, депт)}}

Улазна табела:

креирај базу података едурека
креира табелу емп (емпид инт није нулл, име варцхар (30), депт варцхар (20), примарни кључ (емпид))
убаци у емп вредности (1, 'абхаи', 'девелопемент'), (2, 'брундесх', 'тест')
изаберите * из емп

Случај 1: Пренос са МиСКЛ на ХДФС

пакет цом.инпутФормат.цопи импорт јава.нет.УРИ импорт орг.апацхе.хадооп.цонф.Цонфигуратион импорт орг.апацхе.хадооп.фс.ФилеСистем импорт орг.апацхе.хадооп.фс.Патх импорт орг.апацхе.хадооп.мапредуце .Јоб импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБЦонфигуратион импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБИнпутФормат импорт орг.апацхе.хадооп.мапредуце.либ.оутпут.ФилеОутпутФормат импорт орг.апацхе.хадооп .ио.Тект импорт орг.апацхе.хадооп.ио.ИнтВритабле јавна класа МаинДбтохдфс {публиц статиц воид маин (Стринг [] аргс) баца изузетак {Цонфигуратион цонф = нев Цонфигуратион () ДБЦонфигуратион.цонфигуреДБ (цонф, 'цом.мискл.јдбц .Дривер ', // класа возача' јдбц: мискл: // лоцалхост: 3306 / едурека ', // дб урл' роот ', // корисничко име' роот ') // лозинка Посао посао = нови посао (цонф) посао .сетЈарБиЦласс (МаинДбтохдфс.цласс) јоб.сетМапперЦласс (Мап.цласс) јоб.сетМапОутпутКеиЦласс (Тект.цласс) јоб.сетМапОутпутВалуеЦласс (ИнтВритабле.цласс) јоб.сетИнпутФорматЦласс (ДБИнпутФормат.путмат). нова путања (аргс [0])) ДБИнпутФормат.сетИнпут (посао, ДБИнпутВритабле.цласс, 'емп', // име улазне табеле нулл, нулл, нев Стринг [] {'емпид', 'наме', 'депт'} / / колоне табеле) Путања п = нова путања (аргс [0]) ФилеСистем фс = ФилеСистем.гет (нови УРИ (аргс [0]), цонф) фс.делете (п) Систем.екит (јоб.ваитФорЦомплетион (труе)? 0: 1)}}

Овај део кода омогућава нам да припремимо или конфигуришемо улазни формат за приступ нашем изворном СКЛ ДБ-у. Параметар укључује класу управљачког програма, УРЛ има адресу СКЛ базе података, корисничко име и лозинку.

ДБЦонфигуратион.цонфигуреДБ (цонф, 'цом.мискл.јдбц.Дривер', // класа управљачког програма 'јдбц: мискл: // лоцалхост: 3306 / едурека', // дб урл 'роот', // корисничко име 'роот') //Лозинка

Овај део кода омогућава нам да проследимо детаље табела у базу података и поставимо их у објекту посла. Параметри укључују, наравно, инстанцу посла, прилагођену класу за уписивање која мора да имплементира ДБВритабле интерфејс, име изворне табеле, услов ако је било шта друго нулл, било који параметар сортирања елсе нулл, листу колона табеле.

ДБИнпутФормат.сетИнпут (посао, ДБИнпутВритабле.цласс, 'емп', // унос имена табеле нулл, нулл, нев Стринг [] {'емпид', 'наме', 'депт'} // колоне табеле)

Маппер

пакет цом.инпутФормат.цопи импорт јава.ио.ИОЕкцептион импорт орг.апацхе.хадооп.мапредуце.Маппер импорт орг.апацхе.хадооп.ио.ЛонгВритабле импорт орг.апацхе.хадооп.ио.Тект импорт орг.апацхе.хадооп.ио .ИнтВритабле јавна класа Мап проширује Маппер {
заштићена воид карта (ЛонгВритабле кључ, ДБИнпутВритабле вриједност, Цонтект цтк) {три {Стринг наме = валуе.гетНаме () ИнтВритабле ид = нев ИнтВритабле (валуе.гетИд ()) Стринг депт = валуе.гетДепт ()
цтк.врите (нови текст (име + '' + ид + '' + депт), ид)
} цатцх (ИОЕкцептион е) {е.принтСтацкТраце ()} цатцх (ИнтерруптедЕкцептион е) {е.принтСтацкТраце ()}}}

Редуктор: користи се редуктор идентитета

Команда за извођење:

шта прелазно значи у јави
хадооп јар дбхдфс.јар цом.инпутФормат.цопи.МаинДбтохдфс / дбтохдфс

Резултат: Табела МиСКЛ пребачена на ХДФС

хадооп дфс -лс / дбтохдфс / *

Случај 2: Пренос са једне табеле у МиСКЛ-у на другу у МиСКЛ-у

креирање излазне табеле у МиСКЛ-у

креирање табеле запосленик1 (име варцхар (20), ид инт, депт варцхар (20))

пакет цом.инпутФормат.цопи импорт орг.апацхе.хадооп.цонф.Цонфигуратион импорт орг.апацхе.хадооп.мапредуце.Јоб импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБЦонфигуратион импорт орг.апацхе.хадооп.мапредуце.либ .дб.ДБИнпутФормат импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБОутпутФормат импорт орг.апацхе.хадооп.ио.Тект импорт орг.апацхе.хадооп.ио.ИнтВритабле импорт орг.апацхе.хадооп.ио.НуллВритабле публиц цласс Маинонетабле_то_отхер_табле {публиц статиц воид маин (Стринг [] аргс) баца изузетак {Цонфигуратион цонф = нев Цонфигуратион () ДБЦонфигуратион.цонфигуреДБ (цонф, 'цом.мискл.јдбц.Дривер', // цласс цласс 'јдбц: мискл: // лоцалхост : 3306 / едурека ', // дб урл' роот ', // корисничко име' роот ') // лозинка Посао посао = нови Посао (цонф) јоб.сетЈарБиЦласс (Маинонетабле_то_отхер_табле.цласс) јоб.сетМапперЦласс (Мап.цласс) посао .сетРедуцерЦласс (Редуце.цласс) јоб.сетМапОутпутКеиЦласс (Тект.цласс) јоб.сетМапОутпутВалуеЦласс (ИнтВритабле.цласс) јоб.сетОутпутКеиЦласс (ДБОутпутВритабле.цласс) јоб.сетОутпутВалуеЦласс лВритабле.цласс) јоб.сетИнпутФорматЦласс (ДБИнпутФормат.цласс) јоб.сетОутпутФорматЦласс (ДБОутпутФормат.цласс) ДБИнпутФормат.сетИнпут (јоб, ДБИнпутВритабле.цласс, 'емп', // унос имена табеле нулл, нулл, нев Стринг [] {'емпид ',' наме ',' депт '} // колоне табеле) ДБОутпутФормат.сетОутпут (јоб,' воркер1 ', // оутпут табле наме нев Стринг [] {' наме ',' ид ',' депт '} // табле колоне) Систем.екит (јоб.ваитФорЦомплетион (тачно)? 0: 1)}}

Овај комад кода омогућава нам да конфигуришемо име излазне табеле у СКЛ ДБ-у. Параметри су инстанце посла, име излазне табеле и имена излазних ступаца.

ДБОутпутФормат.сетОутпут (посао, 'запосленик1', // име излазне табеле нови Стринг [] {'име', 'ид', 'депт'} // колоне табеле)

Маппер: Исто као случај 1

Редуктор:

пакет цом.инпутФормат.цопи импорт јава.ио.ИОЕкцептион импорт орг.апацхе.хадооп.мапредуце.Редуцер импорт орг.апацхе.хадооп.ио.Тект импорт орг.апацхе.хадооп.ио.ИнтВритабле импорт орг.апацхе.хадооп.ио .НуллВритабле јавна класа Редуце продужава Редуцер {заштићена воид редукција (Тект кеи, Итерабле валуес, Цонтект цтк) {инт сум = 0 Стринг лине [] = кеи.тоСтринг (). Сплит ('') три {цтк.врите (нев ДБОутпутВритабле (линија [0] .тоСтринг (), Интегер.парсеИнт (линија [1] .тоСтринг ()), линија [2] .тоСтринг ()), НуллВритабле.гет ())} улов (ИОЕкцептион е) {е.принтСтацкТраце ()} цатцх (ИнтерруптедЕкцептион е) {е.принтСтацкТраце ()}}}

Наредба за покретање:

хадооп јар дбхдфс.јар цом.инпутФормат.цопи.Маинонетабле_то_отхер_табле

Резултат: Пренети подаци из ЕМП табеле у МиСКЛ на другог запосленог у табели1 у МиСКЛ

Случај 3: Пренос из табеле у МиСКЛ у табелу НоСКЛ (Хбасе)

Креирање Хбасе табеле за смештај излаза из СКЛ табеле:

креирај 'запослени', 'службена_информација'

Класа возача:

пакет Дбтохбасе импорт орг.апацхе.хадооп.цонф.Цонфигуратион импорт орг.апацхе.хадооп.мапредуце.Јоб импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБЦонфигуратион импорт орг.апацхе.хадооп.мапредуце.либ.дб.ДБИнпутФормат импорт орг.апацхе.хадооп.хбасе.мапредуце.ТаблеОутпутФормат импорт орг.апацхе.хадооп.хбасе.ХБасеЦонфигуратион импорт орг.апацхе.хадооп.хбасе.цлиент.ХТабле импорт орг.апацхе.хадооп.хбасе.цлиент.ХТаблеИнтерфаце импорт орг.апацхе .хадооп.хбасе.ио.ИммутаблеБитесВритабле импорт орг.апацхе.хадооп.хбасе.мапредуце.ТаблеМапРедуцеУтил импорт орг.апацхе.хадооп.ио.Тект јавна класа МаинДбТоХбасе {публиц статиц воид маин (Стринг [] аргс) баца изузетак {Цонфигуратион цонф= = цонфигуратион = ХБасеЦонфигуратион.цреате () ХТаблеИнтерфаце митабле = нови ХТабле (цонф, 'емп') ДБЦонфигуратион.цонфигуреДБ (цонф, 'цом.мискл.јдбц.Дривер', // класа возача 'јдбц: мискл: // лоцалхост: 3306 / едурека' , // дб урл 'роот', // корисничко име 'роот') // лозинка Посао = нови посао (цонф, 'дбтохбасе') јоб.сетЈарБиЦласс (МаинДбТоХбасе.цласс) јоб.с етМапперЦласс (Мап.цласс) јоб.сетМапОутпутКеиЦласс (ИммутаблеБитесВритабле.цласс) јоб.сетМапОутпутВалуеЦласс (Тект.цласс) ТаблеМапРедуцеУтил.инитТаблеРедуцерЈоб ('запосленик', Редуце.цласс.ФорматИнпутФорсет.сетЦласс.Цласс. класа) ДБИнпутФормат.сетИнпут (посао, ДБИнпутВритабле.цласс, 'емп', // име улазне табеле нулл, нулл, нев Стринг [] {'емпид', 'наме', 'депт'} // колоне табеле) Систем.екит (јоб.ваитФорЦомплетион (тачно)? 0: 1)}}

Овај део кода вам омогућава да конфигуришете класу излазног кључа која је у случају хбасе ИммутаблеБитесВритабле

јоб.сетМапОутпутКеиЦласс (ИммутаблеБитесВритабле.цласс) јоб.сетМапОутпутВалуеЦласс (Тект.цласс)

Овде преносимо име хбасе табеле и редуктор да делују на табели.

ТаблеМапРедуцеУтил.инитТаблеРедуцерЈоб ('запослени', Редуце.цласс, посао)

Маппер:

пакет Дбтохбасе импорт јава.ио.ИОЕкцептион импорт орг.апацхе.хадооп.мапредуце.Маппер импорт орг.апацхе.хадооп.хбасе.ио.ИммутаблеБитесВритабле импорт орг.апацхе.хадооп.хбасе.утил.Битес импорт орг.апацхе.хадооп.ио .ЛонгВритабле импорт орг.апацхе.хадооп.ио.Тект импорт орг.апацхе.хадооп.ио.ИнтВритабле јавна класа Мап протеже Маппер {привате ИнтВритабле оне = нев ИнтВритабле (1) заштићена воид карта (ЛонгВритабле ид, ДБИнпутВритабле валуе, Цонтект цонтект) {три {Стринг лине = валуе.гетНаме () Стринг цд = валуе.гетИд () + '' Стринг депт = валуе.гетДепт () цонтект.врите (нев ИммутаблеБитесВритабле (Битес.тоБитес (цд)), нев Тект (лине + ' '+ депт))} цатцх (ИОЕкцептион е) {е.принтСтацкТраце ()} цатцх (ИнтерруптедЕкцептион е) {е.принтСтацкТраце ()}}}

У овом делу кода узимамо вредности од гетера из класе ДБинпутвритабле и прослеђујемо их
ИммутаблеБитесВритабле тако да дођу до редуктора у битевриатбле облику који Хбасе разуме.

Стринг лине = валуе.гетНаме () Стринг цд = валуе.гетИд () + '' Стринг депт = валуе.гетДепт () цонтект.врите (нев ИммутаблеБитесВритабле (Битес.тоБитес (цд)), нев Тект (лине + '' + депт )))

Редуктор:

пакет Дбтохбасе импорт јава.ио.ИОЕкцептион импорт орг.апацхе.хадооп.хбасе.цлиент.Пут импорт орг.апацхе.хадооп.хбасе.ио.ИммутаблеБитесВритабле импорт орг.апацхе.хадооп.хбасе.мапредуце.ТаблеРедуцер импорт орг.апацхе.хадооп .хбасе.утил.Битес импорт орг.апацхе.хадооп.ио.Тект јавна класа Редуце продужава ТаблеРедуцер {јавна празнина смањује (ИммутаблеБитесВритабле кључ, Итерабле вредности, контекст контекста) баца ИОЕкцептион, ИнтерруптедЕкцептион {Стринг [] узрок = нулл // Лооп вредности за (Текст вал: вредности) {узрок = вал.тоСтринг (). сплит ('')} // Стави на ХБасе Пут стави = нови Пут (кеи.гет ()) пут.адд (Битес.тоБитес ('оффициал_инфо') ), Битес.тоБитес ('име'), Битес.тоБитес (узрок [0])) пут.адд (Битес.тоБитес ('оффициал_инфо'), Битес.тоБитес ('одељење'), Битес.тоБитес (узрок [1 ])) цонтект.врите (кључ, пут)}}

Овај део кода омогућава нам да одредимо тачан ред и колону у којој ћемо чувати вредности из редуктора. Овде чувамо сваки емпид у засебном реду као што смо направили емпид као кључ реда који би био јединствен. У сваком реду чувамо званичне информације запослених под породицом колона „оффициал_инфо“ под колонама „име“ односно „одељење“.

Пут пут = ново Пут (кеи.гет ()) пут.адд (Битес.тоБитес ('оффициал_инфо'), Битес.тоБитес ('наме'), Битес.тоБитес (узрок [0])) пут.адд (Битес. тоБитес ('оффициал_инфо'), Битес.тоБитес ('департмент'), Битес.тоБитес (узрок [1])) цонтект.врите (кључ, пут)

Пренети подаци у Хбасе:

скенирати запосленог

Као што видимо успели смо да успешно обавимо задатак миграције наших пословних података из релационог СКЛ ДБ-а у НоСКЛ ДБ.

На следећем блогу научићемо како писати и извршавати кодове за друге формате уноса и излаза.

Наставите да објављујете коментаре, питања или било какве повратне информације. Волео бих да чујем вас.

Имате питање за нас? Молимо вас да то споменете у одељку за коментаре и јавићемо вам се.

Повезани постови: