Filformat i stora data: en kort introduktion

Filformat i stora data: en kort introduktion
Weather Deity by Remarin

Team Mail.ru Cloud Solutions erbjuder översÀttningen av artikeln Ingenjör Rahul Bhattia frÄn företaget Clairvoyant diskuterar vilka filformat som finns inom stora data, vilka funktioner av Hadoop-format som Àr vanligast och vilket format som Àr bÀst att anvÀnda.

Varför olika filformat behövs

En allvarlig flaskhals i prestandan hos applikationer som stöder HDFS, sÄsom MapReduce och Spark, Àr tiden för att söka, lÀsa och skriva data. Dessa problem förvÀrras av svÄrigheterna att hantera stora datamÀngder om vi har ett icke-fixerat, utan ett utvecklande schema, eller om det finns vissa lagringsbegrÀnsningar.

Bearbetning av stora data ökar belastningen pĂ„ lagersystemet – Hadoop lagrar data redundant för att sĂ€kerstĂ€lla driftsĂ€kerhet. Förutom diskarna belastas Ă€ven CPU, nĂ€tverk, in- och utgĂ„ngssystem med mera. I takt med att datavolymen ökar, ökar ocksĂ„ kostnaderna för bearbetning och lagring.

Olika filformat i Hadoop Àr utformade för att lösa dessa problem. Att vÀlja rÀtt filformat kan ge nÄgra betydande fördelar:

  1. Snabbare lÀstid.
  2. Snabbare skrivtid.
  3. Delade filer.
  4. Stöd för schemabedömning.
  5. Utökad stöd för komprimering.

Vissa filformat Àr avsedda för allmÀnt bruk, medan andra Àr för mer specifika fall, och vissa Àr designade med tanke pÄ specifika datakarakteristika. Valet Àr alltsÄ ganska stort.

Avro-filformatet

För för dataserialisering anvĂ€nds brett inom Avro – det Ă€r en radbaseradeller strĂ€ngbaserad lagringsformat i Hadoop. Det lagrar schemat i JSON-format, vilket underlĂ€ttar för att lĂ€sa och tolka av vilket program som helst. SjĂ€lva datan lagras i ett binĂ€rt format, kompakt och effektivt.

Avros serialiseringssystem Àr sprÄkneutralt. Filer kan hanteras med flera olika sprÄk, för nÀrvarande C, C++, C#, Java, Python och Ruby.

En nyckelfunktion hos Avro Ă€r den robusta stödet för dataskematisering, som förĂ€ndras över tid, det vill sĂ€ga utvecklas. Avro förstĂ„r schemaĂ€ndringar – borttagning, tillĂ€gg eller Ă€ndring av fĂ€lt.

Avro stöder en mÀngd olika datastrukturer. Till exempel kan man skapa en post som innehÄller en array, en upprÀkningsbar typ och en underskrivning.

Filformat i stora data: en kort introduktion
Det hĂ€r formatet Ă€r perfekt för att spela in i landningszonen för datalake (datalake, eller data lake — en samling instanser för lagring av olika datatyper utöver sjĂ€lva datakĂ€llorna).

SÄ, för inspelning i landningszonen för datalake Àr detta format bÀst av följande skÀl:

  1. Data frĂ„n detta omrĂ„de lĂ€ses vanligtvis i sin helhet för vidare bearbetning av underliggande system — och string-baserade format Ă€r mer effektiva i detta fall.
  2. Underliggande system kan enkelt extrahera schemas frĂ„n filer — det behövs ingen separat lagring av scheman i ett externt metadatalager.
  3. Eventuella förÀndringar av den ursprungliga schemat hanteras enkelt (schemaevolution).

Parquet-filformatet

Parquet Àr ett öppet filformat för Hadoop som lagrar inbÀddade datastukturer i ett platt kolumnformat..

JÀmfört med det traditionella radbaserade tillvÀgagÄngssÀttet Àr Parquet mer effektivt avseende lagring och prestanda.

Detta Àr sÀrskilt anvÀndbart för frÄgor som lÀser specifika kolumner frÄn en bred (med mÄnga kolumner) tabell. Tack vare filformatet lÀses endast de nödvÀndiga kolumnerna, vilket minimerar in- och utdata.

Ett litet avsnitt-förklaring: för att bĂ€ttre förstĂ„ Parquet-filformatet i Hadoop, lĂ„t oss titta pĂ„ vad som menas med kolumnbaserat — det vill sĂ€ga kolumnformat. I ett sĂ„dant format lagras liknande vĂ€rden för varje kolumn tillsammans.

Till exempel, raden inkluderar fÀlten ID, Name och Department. I detta fall kommer alla vÀrden för kolumnen ID att lagras tillsammans, likasÄ vÀrdena för kolumnen Name och sÄ vidare. Tabellen kommer att se ut ungefÀr sÄ hÀr:

ID
Namn
Department

1
emp1
d1

2
emp2
d2

3
emp3
d3

I radformat kommer data att sparas pÄ följande sÀtt:

1
emp1
d1
2
emp2
d2
3
emp3
d3

I kolumnformat lagras samma data sÄ hÀr:

1
2
3
emp1
emp2
emp3
d1
d2
d3

Kolumnformat Àr mer effektivt nÀr du behöver frÄga flera kolumner frÄn tabellen. Det lÀser endast de nödvÀndiga kolumnerna eftersom de ligger nÀra varandra. Detta minimerar in- och utdata operationer.

Till exempel, om du bara behöver kolumnen NAME. I radformat Varje post i datamÀngden mÄste laddas, delas upp i fÀlt och sedan extraheras data NAME. Kolumnformatet gör det möjligt att gÄ direkt till kolumnen Namn, eftersom alla vÀrden för denna kolumn lagras tillsammans. Det blir inte nödvÀndigt att skanna hela posten.

Det betyder att kolumnformatet ökar prestandan för frÄgorna, eftersom mindre tid krÀvs för att hitta de nödvÀndiga kolumnerna och antalet in- och utoperationer minskar, dÄ endast de nödvÀndiga kolumnerna lÀses.

En av de unika egenskaperna Parquet Àr att det i detta format kan lagra data med inbÀddade strukturer.Det betyder att i en Parquet-fil kan Àven inbÀddade fÀlt lÀsas separat utan att behöva lÀsa alla fÀlt i den inbÀddade strukturen. För att lagra inbÀddade strukturer anvÀnder Parquet algoritmen shredding and assembly.

Filformat i stora data: en kort introduktion
För att förstÄ Parquet-filformatet i Hadoop mÄste man kÀnna till följande termer:

  1. Radgrupp (row group): en logisk horisontell indelning av data i rader. Radgruppen bestÄr av ett fragment av varje kolumn i datamÀngden.
  2. Kolumnfragment (column chunk): ett fragment av en specifik kolumn. Dessa kolumnfragment finns inom en viss radgrupp och kommer garanterat att vara sammanhÀngande i filen.
  3. Sida (page): kolumnfragment delas upp i sidor, som skrivs efter varandra. Sidor har en gemensam header, sÄ att man kan hoppa över onödiga vid lÀsning.

Filformat i stora data: en kort introduktion
HÀr innehÄller headern helt enkelt ett magiskt nummer PAR1 (4 byte) som identifierar filen som en Parquet-fil.

I foten stÄr följande:

  1. Metadatan för filen som innehÄller startkoordinaterna för metadata i varje kolumn. Vid lÀsning mÄste man först lÀsa filens metadata för att hitta alla intressanta kolumnfragment. DÀrefter ska kolumnfragmenten lÀsas sekventiellt. Ytterligare metadata inkluderar formatversion, schema och eventuella ytterligare nyckel-vÀrde-par.
  2. LÀngden pÄ metadatan (4 byte).
  3. Det magiska numret PAR1 (4 byte).

Filformatet ORC

Optimerat rad- och kolumnformat för filer (Optimized Row Columnar, ORC) erbjuder en mycket effektiv metod för datalagring och har utvecklats för att övervinna begrĂ€nsningarna i andra format. Lagrar data i en perfekt kompakt form, vilket gör det möjligt att hoppa över onödiga detaljer — vilket samtidigt inte krĂ€ver att stora, komplicerade eller manuellt underhĂ„llna index byggs.

Fördelarna med ORC-formatet:

  1. En fil per utgÄng av varje jobb, vilket minskar belastningen pÄ NameNode.
  2. Stöd för Hive-datatypen, inklusive DateTime, decimaler och komplexa datatyper (struct, list, map och union).
  3. Samtidig lÀsning av samma fil av olika RecordReader-processer.
  4. Möjlighet att dela filer utan att skanna efter markörer.
  5. UtvÀrdering av den maximalt möjliga heap-minnesallokeringen för lÀs-/skrivprocesser baserat pÄ information i filens footer.
  6. Metadata sparas i ett binÀrt format för serialisering med Protocol Buffers, vilket gör det möjligt att lÀgga till och ta bort fÀlt.

Filformat i stora data: en kort introduktion
ORC lagrar samlingar av rader i en fil, och inom en samling lagras raddata i kolumnformat.

ORC-filen lagrar grupper av rader som kallas stripes och hjÀlpinformation i filens footer. Postscript i slutet av filen innehÄller komprimeringsparametrar och storleken pÄ den komprimerade footern.

Som standard Àr storleken pÄ en stripe 250 MB. Med stripes av den storleken utförs lÀsning frÄn HDFS mer effektivt: i stora, kontinuerliga block.

I filens footer registreras en lista över stripes i filen, antalet rader per stripe och datatypen för varje kolumn. DÀr registreras ocksÄ de resulterande vÀrdena count, min, max och sum för varje kolumn.

Footern för stripes innehÄller en katalog över flödenas placeringar.

Raddata anvÀnds vid skanning av tabeller.

Indexdata inkluderar minimala och maximala vÀrden för varje kolumn samt positionerna för rader i varje kolumn. ORC-index anvÀnds endast för att vÀlja stripes och grupper av rader, inte för att besvara förfrÄgningar.

JÀmförelse av olika filformat

Avro jÀmfört med Parquet

  1. Avro Àr ett rad-baserat lagringsformat, medan Parquet lagrar data kolumnvis.
  2. Parquet Àr bÀttre lÀmpad för analytiska förfrÄgningar, det vill sÀga att lÀs- och datafrÄgeoperationer Àr mycket mer effektiva Àn skrivningar.
  3. Skrivaroperationer i Avro utförs mer effektivt Àn i Parquet.
  4. Avro fungerar mer moget med schemors evolution. Parquet stöder endast tillÀgg av schema, medan Avro implementerar multifunktionell evolution, det vill sÀga tillÀgg eller Àndring av kolumner.
  5. Parquet Àr perfekt för att frÄga efter en delmÀngd av kolumner i en flerkolumnstabell. Avro Àr lÀmplig för ETL-operationer dÀr vi vill frÄga efter alla kolumner.

ORC jÀmfört med Parquet

  1. Parquet lagrar inbÀddade data bÀttre.
  2. ORC Àr bÀttre anpassat för predicates pushdown.
  3. ORC stöder ACID-egenskaper.
  4. ORC komprimerar data bÀttre.

Vad mer att lÀsa om Àmnet:

  1. Analys av stora data i molnet: hur företag blir datadrivna.
  2. En ödmjuk guide till databas-scheman.
  3. VÄr Telegram-kanal om digital transformation.

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster