Komanda Mail.ru mÄkoÅa risinÄjumi piedÄvÄjumus raksta tulkojums inženieris Rahul Bhatia no Clairvoyant par to, kÄdi failu formÄti ir lielajos datos, kÄdas ir Hadoop formÄtu visizplatÄ«tÄkÄs funkcijas un kÄdu formÄtu labÄk izmantot.
KÄpÄc ir nepiecieÅ”ami dažÄdi failu formÄti?
Liela veiktspÄjas vÄjÄ vieta HDFS iespÄjotÄm lietojumprogrammÄm, piemÄram, MapReduce un Spark, ir laiks, kas nepiecieÅ”ams datu meklÄÅ”anai, lasÄ«Å”anai un rakstÄ«Å”anai. Å Ä«s problÄmas pastiprina grÅ«tÄ«bas pÄrvaldÄ«t lielas datu kopas, ja mums ir mainÄ«ga, nevis fiksÄta shÄma vai ja ir daži uzglabÄÅ”anas ierobežojumi.
Lielo datu apstrÄde palielina krÄtuves apakÅ”sistÄmas slodzi ā Hadoop glabÄ datus lieki, lai panÄktu kļūdu toleranci. Papildus diskiem tiek ielÄdÄts procesors, tÄ«kls, ievades/izvades sistÄma utt. Pieaugot datu apjomam, pieaug arÄ« to apstrÄdes un uzglabÄÅ”anas izmaksas.
DažÄdi failu formÄti Hadoop izgudrots, lai atrisinÄtu tieÅ”i Ŕīs problÄmas. AtbilstoÅ”a faila formÄta izvÄle var sniegt dažas bÅ«tiskas priekÅ”rocÄ«bas:
ÄtrÄks lasÄ«Å”anas laiks.
ÄtrÄks ierakstÄ«Å”anas laiks.
Koplietotie faili.
Atbalsts shÄmas attÄ«stÄ«bai.
PaplaÅ”inÄts kompresijas atbalsts.
Daži failu formÄti ir paredzÄti vispÄrÄjai lietoÅ”anai, citi ā konkrÄtÄkiem lietojumiem, un daži ir izstrÄdÄti, lai atbilstu konkrÄtÄm datu Ä«paŔībÄm. TÄtad izvÄle tieÅ”Äm ir diezgan liela.
Avro faila formÄts
Par datu serializÄcija Avro tiek plaÅ”i izmantots - tas uz virknes bÄzes, tas ir, virknes datu uzglabÄÅ”anas formÄts Hadoop. TÄ saglabÄ shÄmu JSON formÄtÄ, padarot to viegli lasÄmu un interpretÄjamu jebkurÄ programmÄ. PaÅ”i dati ir binÄrÄ formÄtÄ, kompakti un efektÄ«vi.
Avro serializÄcijas sistÄma ir neitrÄla valodai. Failus var apstrÄdÄt dažÄdÄs valodÄs, paÅ”laik C, C++, C#, Java, Python un Ruby.
GalvenÄ Avro iezÄ«me ir tÄ stabilais atbalsts datu shÄmÄm, kas laika gaitÄ mainÄs, tas ir, attÄ«stÄs. Avro saprot shÄmas izmaiÅas ā lauku dzÄÅ”anu, pievienoÅ”anu vai mainÄ«Å”anu.
Avro atbalsta dažÄdas datu struktÅ«ras. PiemÄram, varat izveidot ierakstu, kurÄ ir masÄ«vs, uzskaitÄ«ts tips un apakÅ”ieraksts.
Å is formÄts ir ideÄli piemÄrots rakstÄ«Å”anai datu ezera nolaiÅ”anÄs (pÄrejas) zonÄ (datu ezers, vai datu ezers ā gadÄ«jumu kolekcija dažÄda veida datu glabÄÅ”anai papildus tieÅ”i datu avotiem).
TÄtad Å”is formÄts ir vislabÄk piemÄrots rakstÄ«Å”anai datu ezera piezemÄÅ”anÄs zonÄ Å”Ädu iemeslu dÄļ:
Datus no Ŕīs zonas parasti nolasa pilnÄ«bÄ, lai tie tÄlÄk apstrÄdÄtu pakÄrtotajÄs sistÄmÄs, un Å”ajÄ gadÄ«jumÄ efektÄ«vÄks ir uz rindÄm balstÄ«ts formÄts.
PakÄrtotÄs sistÄmas var viegli izgÅ«t shÄmu tabulas no failiem ā nav nepiecieÅ”ams atseviŔķi uzglabÄt shÄmas ÄrÄjÄ meta krÄtuvÄ.
Jebkuras izmaiÅas sÄkotnÄjÄ shÄmÄ ir viegli apstrÄdÄjamas (shÄmas evolÅ«cija).
Parketa faila formÄts
Parkets ir Hadoop atvÄrtÄ pirmkoda faila formÄts, kas tiek uzglabÄts ligzdotas datu struktÅ«ras plakanÄ kolonnu formÄtÄ.
SalÄ«dzinot ar tradicionÄlo rindu pieeju, parkets ir efektÄ«vÄks uzglabÄÅ”anas un veiktspÄjas ziÅÄ.
Tas ir Ä«paÅ”i noderÄ«gi vaicÄjumiem, kas nolasa noteiktas kolonnas no plaÅ”as (daudz kolonnu) tabulas. Pateicoties faila formÄtam, tiek nolasÄ«tas tikai nepiecieÅ”amÄs kolonnas, tÄpÄc I/O tiek samazinÄts lÄ«dz minimumam.
Neliela atkÄpe un skaidrojums: Lai labÄk izprastu parketa faila formÄtu programmÄ Hadoop, apskatÄ«sim, kas ir kolonnu, t.i., kolonnu formÄts. Å is formÄts saglabÄ lÄ«dzÄ«gas vÄrtÄ«bas katrai kolonnai kopÄ.
PiemÄram, ierakstÄ ir ietverti lauki ID, nosaukums un nodaļa. Å ajÄ gadÄ«jumÄ visas ID kolonnas vÄrtÄ«bas tiks saglabÄtas kopÄ, tÄpat kÄ kolonnas Name vÄrtÄ«bas un tÄ tÄlÄk. Tabula izskatÄ«sies apmÄram Å”Ädi:
ID VÄrds nodaļa
1
emp1
d1
2
emp2
d2
3
emp3
d3
Virknes formÄtÄ dati tiks saglabÄti Å”Ädi:
1
emp1
d1
2
emp2
d2
3
emp3
d3
Kolonnu faila formÄtÄ tie paÅ”i dati tiks saglabÄti Å”Ädi:
1
2
3
emp1
emp2
emp3
d1
d2
d3
Kolonnu formÄts ir efektÄ«vÄks, ja nepiecieÅ”ams vaicÄt vairÄkas tabulas kolonnas. Tas nolasÄ«s tikai vajadzÄ«gÄs kolonnas, jo tÄs atrodas blakus. TÄdÄ veidÄ I/O operÄcijas tiek samazinÄtas lÄ«dz minimumam.
PiemÄram, jums ir nepiecieÅ”ama tikai kolonna NAME. IN virknes formÄts Katrs datu kopas ieraksts ir jÄielÄdÄ, jÄparsÄ pa laukiem un pÄc tam jÄizvelk dati NAME. Kolonnas formÄts ļauj veikt lejupielÄdi tieÅ”i kolonnÄ Nosaukums, jo visas Ŕīs kolonnas vÄrtÄ«bas tiek glabÄtas kopÄ. Jums nav jÄskenÄ viss ieraksts.
TÄdÄjÄdi kolonnu formÄts uzlabo vaicÄjuma veiktspÄju, jo tas prasa mazÄk meklÄÅ”anas laika, lai nokļūtu vajadzÄ«gajÄs kolonnÄs, un samazina I/O operÄciju skaitu, jo tiek lasÄ«tas tikai vÄlamÄs kolonnas.
Viena no unikÄlajÄm Ä«paŔībÄm Parkets ir tas, ka Å”ajÄ formÄtÄ to var uzglabÄt datus ar ligzdotÄm struktÅ«rÄm. Tas nozÄ«mÄ, ka parketa failÄ pat ligzdotos laukus var nolasÄ«t atseviŔķi, nelasot visus ligzdotÄs struktÅ«ras laukus. Parkets izmanto smalcinÄÅ”anas un montÄžas algoritmu, lai uzglabÄtu ligzdotas struktÅ«ras.
Rindu grupa (rindu grupa): loÄ£isks horizontÄls datu sadalÄ«jums rindÄs. Rindu grupa sastÄv no katras datu kopas kolonnas fragmenta.
Kolonnas fragments (kolonnas gabals): noteiktas kolonnas fragments. Å ie kolonnu fragmenti atrodas noteiktÄ rindu grupÄ un ir garantÄti failÄ blakus.
Page (lapa): Kolonnu fragmenti tiek sadalÄ«ti lapÄs, kas rakstÄ«tas viena pÄc otras. LapÄm ir kopÄ«gs nosaukums, tÄpÄc, lasot, varat izlaist nevajadzÄ«gÄs.
Å eit virsrakstÄ ir tikai maÄ£iskais skaitlis PAR1 (4 baiti), kas identificÄ failu kÄ parketa failu.
KÄjene saka:
Faila metadati, kas satur katras kolonnas metadatu sÄkuma koordinÄtas. Lasot, vispirms jÄizlasa faila metadati, lai atrastu visus interesÄjoÅ”os kolonnu fragmentus. PÄc tam kolonnas daļas jÄlasa secÄ«gi. Citi metadati ietver formÄta versiju, shÄmu un visus papildu atslÄgu un vÄrtÄ«bu pÄrus.
Metadatu garums (4 baiti).
Maģiskais skaitlis PAR1 (4 baiti).
ORC faila formÄts
OptimizÄts rindu-kolonnu faila formÄts (OptimizÄta rindas kolonna, CRO) piedÄvÄ Ä¼oti efektÄ«vu datu glabÄÅ”anas veidu un tika izstrÄdÄts, lai pÄrvarÄtu citu formÄtu ierobežojumus. SaglabÄ datus perfekti kompaktÄ formÄ, ļaujot izlaist nevajadzÄ«gas detaļas, neprasot lielu, sarežģītu vai manuÄli uzturÄtu indeksu izveidi.
ORC formÄta priekÅ”rocÄ«bas:
Viens fails ir katra uzdevuma izvade, kas samazina NameNode (nosaukuma mezgla) slodzi.
Atbalsts Hive datu veidiem, tostarp DateTime, decimÄldatu un sarežģītu datu tipiem (struktÅ«ra, saraksts, karte un savienÄ«ba).
Viena un tÄ paÅ”a faila vienlaicÄ«ga lasÄ«Å”ana dažÄdos RecordReader procesos.
IespÄja sadalÄ«t failus bez marÄ·ieru skenÄÅ”anas.
MaksimÄlÄs iespÄjamÄs kaudzes atmiÅas pieŔķirÅ”anas aprÄÄ·ins lasÄ«Å”anas/rakstÄ«Å”anas procesiem, pamatojoties uz informÄciju faila kÄjenÄ.
Metadati tiek glabÄti Protocol Buffers binÄrÄ serializÄcijas formÄtÄ, kas ļauj pievienot un noÅemt laukus.
ORC virkÅu kolekcijas glabÄ vienÄ failÄ, un kolekcijÄ virkÅu dati tiek glabÄti kolonnu formÄtÄ.
ORC fails faila kÄjenÄ saglabÄ lÄ«niju grupas, ko sauc par svÄ«trÄm, un atbalsta informÄciju. Postscript faila beigÄs satur saspieÅ”anas parametrus un saspiestÄs kÄjenes lielumu.
NoklusÄjuma joslas izmÄrs ir 250 MB. Pateicoties tik lielÄm svÄ«trÄm, nolasÄ«Å”ana no HDFS tiek veikta efektÄ«vÄk: lielos blakus esoÅ”os blokos.
Faila kÄjenÄ tiek ierakstÄ«ts failÄ esoÅ”o joslu saraksts, rindu skaits vienÄ joslÄ un katras kolonnas datu tips. Tur ir ierakstÄ«ta arÄ« katras kolonnas iegÅ«tÄ vÄrtÄ«ba count, min, max un summa.
Sloksnes kÄjenÄ ir straumes atraÅ”anÄs vietu direktorijs.
SkenÄjot tabulas, tiek izmantoti rindu dati.
Indeksa dati ietver katras kolonnas minimÄlÄs un maksimÄlÄs vÄrtÄ«bas un rindu atraÅ”anÄs vietu katrÄ kolonnÄ. ORC indeksus izmanto tikai svÄ«tru un rindu grupu atlasei, nevis atbildÄm uz vaicÄjumiem.
DažÄdu failu formÄtu salÄ«dzinÄjums
Avro salīdzinot ar Parketu
Avro ir rindu uzglabÄÅ”anas formÄts, savukÄrt Parkets datus glabÄ kolonnÄs.
Parkets ir labÄk piemÄrots analÄ«tiskiem vaicÄjumiem, kas nozÄ«mÄ, ka lasÄ«Å”anas un datu vaicÄjumu darbÄ«bas ir daudz efektÄ«vÄkas nekÄ rakstÄ«Å”ana.
RakstÄ«Å”anas darbÄ«bas Avro tiek veiktas efektÄ«vÄk nekÄ ParketÄ.
Avro daudz nobrieduÅ”Äk nodarbojas ar Ä·Ädes attÄ«stÄ«bu. Parkets atbalsta tikai shÄmas pievienoÅ”anu, savukÄrt Avro atbalsta daudzfunkcionÄlu attÄ«stÄ«bu, tas ir, kolonnu pievienoÅ”anu vai mainÄ«Å”anu.
Parkets ir ideÄli piemÄrots kolonnu apakÅ”kopas vaicÄÅ”anai vairÄku kolonnu tabulÄ. Avro ir piemÄrots ETL operÄcijÄm, kurÄs mÄs vaicÄjam visas kolonnas.