జట్టు Mail.ru క్లౌడ్ సొల్యూషన్స్ ఆఫర్లు వ్యాసం యొక్క అనువాదం Clairvoyant నుండి ఇంజనీర్ రాహుల్ భాటియా పెద్ద డేటాలో ఏ ఫైల్ ఫార్మాట్లు ఉన్నాయి, హడూప్ ఫార్మాట్ల యొక్క అత్యంత సాధారణ లక్షణాలు ఏమిటి మరియు ఏ ఫార్మాట్ని ఉపయోగించడం ఉత్తమం అనే దాని గురించి.
వేర్వేరు ఫైల్ ఫార్మాట్లు ఎందుకు అవసరం?
MapReduce మరియు Spark వంటి HDFS-ప్రారంభించబడిన అనువర్తనాలకు ప్రధాన పనితీరు అడ్డంకి ఏమిటంటే డేటాను శోధించడానికి, చదవడానికి మరియు వ్రాయడానికి పట్టే సమయం. మేము స్థిరమైన దాని కంటే అభివృద్ధి చెందుతున్న స్కీమాను కలిగి ఉన్నట్లయితే లేదా కొన్ని నిల్వ పరిమితులు ఉన్నట్లయితే, పెద్ద డేటా సెట్లను నిర్వహించడంలో ఇబ్బంది కారణంగా ఈ సమస్యలు ఏర్పడతాయి.
పెద్ద డేటాను ప్రాసెస్ చేయడం వల్ల స్టోరేజ్ సబ్సిస్టమ్పై లోడ్ పెరుగుతుంది - హడూప్ ఫాల్ట్ టాలరెన్స్ సాధించడానికి డేటాను అనవసరంగా నిల్వ చేస్తుంది. డిస్క్లతో పాటు, ప్రాసెసర్, నెట్వర్క్, ఇన్పుట్/అవుట్పుట్ సిస్టమ్ మరియు మొదలైనవి లోడ్ చేయబడతాయి. డేటా పరిమాణం పెరిగేకొద్దీ, దానిని ప్రాసెస్ చేయడానికి మరియు నిల్వ చేయడానికి అయ్యే ఖర్చు కూడా పెరుగుతుంది.
వివిధ ఫైల్ ఫార్మాట్లలో హడూప్ ఈ సమస్యలను ఖచ్చితంగా పరిష్కరించడానికి కనుగొనబడింది. తగిన ఫైల్ ఆకృతిని ఎంచుకోవడం వలన కొన్ని ముఖ్యమైన ప్రయోజనాలను అందించవచ్చు:
వేగంగా చదివే సమయం.
వేగవంతమైన రికార్డింగ్ సమయం.
షేర్డ్ ఫైల్స్.
స్కీమా పరిణామానికి మద్దతు.
విస్తరించిన కుదింపు మద్దతు.
కొన్ని ఫైల్ ఫార్మాట్లు సాధారణ ఉపయోగం కోసం, మరికొన్ని నిర్దిష్ట ఉపయోగాల కోసం ఉద్దేశించబడ్డాయి మరియు కొన్ని నిర్దిష్ట డేటా లక్షణాలకు అనుగుణంగా రూపొందించబడ్డాయి. కాబట్టి ఎంపిక నిజంగా చాలా పెద్దది.
Avro ఫైల్ ఫార్మాట్
కోసం డేటా సీరియలైజేషన్ Avro విస్తృతంగా ఉపయోగించబడుతుంది - ఇది స్ట్రింగ్ ఆధారంగా, అంటే, హడూప్లోని స్ట్రింగ్ డేటా స్టోరేజ్ ఫార్మాట్. ఇది స్కీమాను JSON ఆకృతిలో నిల్వ చేస్తుంది, ఇది ఏదైనా ప్రోగ్రామ్ ద్వారా చదవడం మరియు అర్థం చేసుకోవడం సులభం చేస్తుంది. డేటా బైనరీ ఆకృతిలో, కాంపాక్ట్ మరియు సమర్థవంతమైనది.
అవ్రో యొక్క సీరియలైజేషన్ సిస్టమ్ భాష తటస్థంగా ఉంది. ఫైల్లను వివిధ భాషలలో ప్రాసెస్ చేయవచ్చు, ప్రస్తుతం C, C++, C#, Java, Python మరియు Ruby.
Avro యొక్క ముఖ్య లక్షణం కాలక్రమేణా మారే డేటా స్కీమాలకు దాని బలమైన మద్దతు, అంటే అభివృద్ధి చెందుతుంది. Avro స్కీమా మార్పులను అర్థం చేసుకుంటుంది-తొలగించడం, జోడించడం లేదా ఫీల్డ్లను మార్చడం.
అవ్రో వివిధ రకాల డేటా స్ట్రక్చర్లకు మద్దతు ఇస్తుంది. ఉదాహరణకు, మీరు శ్రేణి, లెక్కించబడిన రకం మరియు సబ్రికార్డ్ని కలిగి ఉన్న రికార్డ్ను సృష్టించవచ్చు.
డేటా సరస్సు యొక్క ల్యాండింగ్ (పరివర్తన) జోన్కు వ్రాయడానికి ఈ ఫార్మాట్ అనువైనది (డేటా సరస్సు, లేదా డేటా లేక్ - నేరుగా డేటా సోర్స్లతో పాటు వివిధ రకాల డేటాను నిల్వ చేయడానికి ఉదాహరణల సమాహారం).
కాబట్టి, కింది కారణాల వల్ల డేటా సరస్సు యొక్క ల్యాండింగ్ జోన్కు వ్రాయడానికి ఈ ఫార్మాట్ ఉత్తమంగా సరిపోతుంది:
దిగువ సిస్టమ్ల ద్వారా తదుపరి ప్రాసెసింగ్ కోసం ఈ జోన్ నుండి డేటా సాధారణంగా పూర్తిగా చదవబడుతుంది - మరియు ఈ సందర్భంలో వరుస-ఆధారిత ఆకృతి మరింత ప్రభావవంతంగా ఉంటుంది.
డౌన్స్ట్రీమ్ సిస్టమ్లు ఫైల్ల నుండి స్కీమా టేబుల్లను సులభంగా తిరిగి పొందగలవు-బాహ్య మెటా నిల్వలో స్కీమాలను విడిగా నిల్వ చేయవలసిన అవసరం లేదు.
అసలు స్కీమాకు ఏదైనా మార్పు సులభంగా ప్రాసెస్ చేయబడుతుంది (స్కీమా ఎవల్యూషన్).
పార్కెట్ ఫైల్ ఫార్మాట్
పార్కెట్ అనేది స్టోర్ చేసే హడూప్ కోసం ఓపెన్ సోర్స్ ఫైల్ ఫార్మాట్ సమూహ డేటా నిర్మాణాలు ఫ్లాట్ స్తంభ ఆకృతిలో.
సాంప్రదాయ వరుస విధానంతో పోలిస్తే, నిల్వ మరియు పనితీరు పరంగా Parquet మరింత సమర్థవంతమైనది.
విస్తృత (అనేక నిలువు వరుసలు) పట్టిక నుండి నిర్దిష్ట నిలువు వరుసలను చదివే ప్రశ్నలకు ఇది ప్రత్యేకంగా ఉపయోగపడుతుంది. ఫైల్ ఆకృతికి ధన్యవాదాలు, అవసరమైన నిలువు వరుసలు మాత్రమే చదవబడతాయి, కాబట్టి I/O కనిష్టంగా ఉంచబడుతుంది.
ఒక చిన్న డైగ్రెషన్ మరియు వివరణ: హడూప్లోని పార్కెట్ ఫైల్ ఫార్మాట్ను బాగా అర్థం చేసుకోవడానికి, కాలమ్-ఆధారిత - అంటే స్తంభం - ఫార్మాట్ అంటే ఏమిటో చూద్దాం. ఈ ఫార్మాట్ ప్రతి నిలువు వరుస కోసం ఒకే విధమైన విలువలను నిల్వ చేస్తుంది.
ఉదాహరణకు, రికార్డ్లో ID, పేరు మరియు డిపార్ట్మెంట్ ఫీల్డ్లు ఉన్నాయి. ఈ సందర్భంలో, అన్ని ID కాలమ్ విలువలు కలిసి నిల్వ చేయబడతాయి, అలాగే పేరు కాలమ్ విలువలు మరియు మొదలైనవి. పట్టిక ఇలా కనిపిస్తుంది:
ID పేరు శాఖ
1
emp1
d1
2
emp2
d2
3
emp3
d3
స్ట్రింగ్ ఆకృతిలో, డేటా క్రింది విధంగా సేవ్ చేయబడుతుంది:
1
emp1
d1
2
emp2
d2
3
emp3
d3
నిలువు ఫైల్ ఫార్మాట్లో, అదే డేటా ఇలా సేవ్ చేయబడుతుంది:
1
2
3
emp1
emp2
emp3
d1
d2
d3
మీరు పట్టిక నుండి బహుళ నిలువు వరుసలను ప్రశ్నించవలసి వచ్చినప్పుడు నిలువు ఆకృతి మరింత ప్రభావవంతంగా ఉంటుంది. ఇది అవసరమైన నిలువు వరుసలను మాత్రమే చదువుతుంది ఎందుకంటే అవి ప్రక్కనే ఉన్నాయి. ఈ విధంగా, I/O కార్యకలాపాలు కనిష్టంగా ఉంచబడతాయి.
ఉదాహరణకు, మీకు NAME నిలువు వరుస మాత్రమే అవసరం. IN స్ట్రింగ్ ఫార్మాట్ డేటాసెట్లోని ప్రతి రికార్డ్ను లోడ్ చేసి, ఫీల్డ్ వారీగా అన్వయించి, ఆపై NAME డేటాను సంగ్రహించాలి. కాలమ్ ఫార్మాట్ మిమ్మల్ని నేరుగా పేరు కాలమ్కు డ్రిల్ చేయడానికి అనుమతిస్తుంది ఎందుకంటే ఆ నిలువు వరుస యొక్క అన్ని విలువలు కలిసి నిల్వ చేయబడతాయి. మీరు మొత్తం రికార్డింగ్ను స్కాన్ చేయాల్సిన అవసరం లేదు.
అందువల్ల, నిలువు ఆకృతి ప్రశ్న పనితీరును మెరుగుపరుస్తుంది ఎందుకంటే ఇది అవసరమైన నిలువు వరుసలను పొందడానికి తక్కువ శోధన సమయం అవసరం మరియు I/O ఆపరేషన్ల సంఖ్యను తగ్గిస్తుంది ఎందుకంటే కావలసిన నిలువు వరుసలు మాత్రమే చదవబడతాయి.
ప్రత్యేక లక్షణాలలో ఒకటి ప్రదర్శనశాలకు ఈ ఫార్మాట్లో అది చేయగలదు సమూహ నిర్మాణాలతో డేటాను నిల్వ చేయండి. దీనర్థం పార్క్వెట్ ఫైల్లో, నెస్టెడ్ స్ట్రక్చర్లోని అన్ని ఫీల్డ్లను చదవకుండానే నెస్టెడ్ ఫీల్డ్లను కూడా ఒక్కొక్కటిగా చదవవచ్చు. పార్క్వెట్ సమూహ నిర్మాణాలను నిల్వ చేయడానికి ష్రెడింగ్ మరియు అసెంబ్లీ అల్గారిథమ్ను ఉపయోగిస్తుంది.
హడూప్లోని పార్కెట్ ఫైల్ ఆకృతిని అర్థం చేసుకోవడానికి, మీరు ఈ క్రింది నిబంధనలను తెలుసుకోవాలి:
తీగల సమూహం (వరుస సమూహం): అడ్డు వరుసలుగా డేటా యొక్క తార్కిక సమాంతర విభజన. అడ్డు వరుస సమూహం డేటా సెట్లోని ప్రతి నిలువు వరుస యొక్క భాగాన్ని కలిగి ఉంటుంది.
కాలమ్ భాగం (కాలమ్ భాగం): నిర్దిష్ట నిలువు వరుస యొక్క భాగం. ఈ నిలువు వరుసల శకలాలు నిర్దిష్ట వరుసల సమూహంలో నివసిస్తాయి మరియు ఫైల్లో పరస్పరం హామీ ఇవ్వబడతాయి.
పేజీ (పేజీ): కాలమ్ శకలాలు ఒకదాని తర్వాత ఒకటి వ్రాసిన పేజీలుగా విభజించబడ్డాయి. పేజీలకు సాధారణ శీర్షిక ఉంటుంది, కాబట్టి మీరు చదివేటప్పుడు అనవసరమైన వాటిని దాటవేయవచ్చు.
ఇక్కడ టైటిల్ మ్యాజిక్ నంబర్ను మాత్రమే కలిగి ఉంది PAR1 (4 బైట్లు) ఇది ఫైల్ను పార్కెట్ ఫైల్గా గుర్తిస్తుంది.
ఫుటరు ఈ క్రింది వాటిని చెబుతుంది:
ప్రతి నిలువు వరుస మెటాడేటా యొక్క ప్రారంభ కోఆర్డినేట్లను కలిగి ఉన్న ఫైల్ మెటాడేటా. చదివేటప్పుడు, ఆసక్తి ఉన్న అన్ని నిలువు వరుసలను కనుగొనడానికి మీరు మొదట ఫైల్ మెటాడేటాను చదవాలి. కాలమ్ భాగాలను వరుసగా చదవాలి. ఇతర మెటాడేటా ఫార్మాట్ వెర్షన్, స్కీమా మరియు ఏదైనా అదనపు కీ-విలువ జతలను కలిగి ఉంటుంది.
మెటాడేటా పొడవు (4 బైట్లు).
మేజిక్ సంఖ్య PAR1 (4 బైట్లు).
ORC ఫైల్ ఫార్మాట్
ఆప్టిమైజ్ చేయబడిన అడ్డు వరుస-నిలువు వరుస ఫైల్ ఫార్మాట్ (ఆప్టిమైజ్ చేసిన అడ్డు వరుస కాలమ్, CRO) డేటాను నిల్వ చేయడానికి చాలా సమర్థవంతమైన మార్గాన్ని అందిస్తుంది మరియు ఇతర ఫార్మాట్ల పరిమితులను అధిగమించడానికి రూపొందించబడింది. పెద్ద, సంక్లిష్టమైన లేదా మాన్యువల్గా నిర్వహించబడే ఇండెక్స్ల నిర్మాణం అవసరం లేకుండానే - అనవసరమైన వివరాలను దాటవేయడానికి మిమ్మల్ని అనుమతిస్తుంది, ఖచ్చితమైన కాంపాక్ట్ రూపంలో డేటాను నిల్వ చేస్తుంది.
ORC ఫార్మాట్ యొక్క ప్రయోజనాలు:
ఒక ఫైల్ అనేది ప్రతి పని యొక్క అవుట్పుట్, ఇది నేమ్నోడ్ (నేమ్ నోడ్) పై లోడ్ను తగ్గిస్తుంది.
తేదీ సమయం, దశాంశ మరియు సంక్లిష్ట డేటా రకాలు (నిర్మాణం, జాబితా, మ్యాప్ మరియు యూనియన్) సహా హైవ్ డేటా రకాలకు మద్దతు.
వివిధ RecordReader ప్రక్రియల ద్వారా ఒకే ఫైల్ని ఏకకాలంలో చదవడం.
మార్కర్ల కోసం స్కాన్ చేయకుండా ఫైల్లను విభజించగల సామర్థ్యం.
ఫైల్ ఫుటర్లోని సమాచారం ఆధారంగా రీడ్/రైట్ ప్రాసెస్ల కోసం సాధ్యమయ్యే గరిష్ట హీప్ మెమరీ కేటాయింపు అంచనా.
మెటాడేటా ప్రోటోకాల్ బఫర్ల బైనరీ సీరియలైజేషన్ ఫార్మాట్లో నిల్వ చేయబడుతుంది, ఇది ఫీల్డ్లను జోడించడానికి మరియు తీసివేయడానికి అనుమతిస్తుంది.
ORC స్ట్రింగ్ల సేకరణలను ఒకే ఫైల్లో నిల్వ చేస్తుంది మరియు సేకరణలో, స్ట్రింగ్ డేటా నిలువు ఆకృతిలో నిల్వ చేయబడుతుంది.
ORC ఫైల్ స్ట్రైప్స్ అని పిలువబడే లైన్ల సమూహాలను మరియు ఫైల్ యొక్క ఫుటరులో సహాయక సమాచారాన్ని నిల్వ చేస్తుంది. ఫైల్ చివరిలో ఉన్న పోస్ట్స్క్రిప్ట్లో కంప్రెషన్ పారామీటర్లు మరియు కంప్రెస్డ్ ఫుటర్ పరిమాణం ఉంటాయి.
డిఫాల్ట్ స్ట్రిప్ పరిమాణం 250 MB. అటువంటి పెద్ద చారల కారణంగా, HDFS నుండి పఠనం మరింత సమర్ధవంతంగా నిర్వహించబడుతుంది: పెద్ద ప్రక్కనే ఉన్న బ్లాక్లలో.
ఫైల్ ఫుటర్ ఫైల్లోని లేన్ల జాబితాను, ఒక్కో లేన్కు వరుసల సంఖ్యను మరియు ప్రతి నిలువు వరుస యొక్క డేటా రకాన్ని రికార్డ్ చేస్తుంది. ప్రతి నిలువు వరుసకు గణన, నిమి, గరిష్టం మరియు మొత్తం యొక్క ఫలిత విలువ కూడా అక్కడ వ్రాయబడుతుంది.
స్ట్రిప్ యొక్క ఫుటర్ స్ట్రీమ్ స్థానాల డైరెక్టరీని కలిగి ఉంది.
పట్టికలను స్కాన్ చేస్తున్నప్పుడు వరుస డేటా ఉపయోగించబడుతుంది.
ఇండెక్స్ డేటాలో ప్రతి నిలువు వరుస యొక్క కనిష్ట మరియు గరిష్ట విలువలు మరియు ప్రతి నిలువు వరుసల స్థానం ఉంటాయి. ORC సూచికలు చారలు మరియు వరుస సమూహాలను ఎంచుకోవడానికి మాత్రమే ఉపయోగించబడతాయి, ప్రశ్నలకు సమాధానం ఇవ్వడానికి కాదు.
వివిధ ఫైల్ ఫార్మాట్ల పోలిక
అవ్రో పార్కెట్తో పోలిస్తే
Avro అనేది అడ్డు వరుస నిల్వ ఆకృతి, అయితే Parquet డేటాను నిలువు వరుసలలో నిల్వ చేస్తుంది.
విశ్లేషణాత్మక ప్రశ్నలకు Parquet బాగా సరిపోతుంది, అంటే రీడ్ ఆపరేషన్లు మరియు క్వెరీయింగ్ డేటా వ్రాత కంటే చాలా సమర్థవంతంగా ఉంటాయి.
అవ్రోలో వ్రాత కార్యకలాపాలు Parquet కంటే మరింత సమర్థవంతంగా నిర్వహించబడతాయి.
అవ్రో సర్క్యూట్ పరిణామంతో మరింత పరిణతితో వ్యవహరిస్తుంది. Parquet స్కీమా జోడింపుకు మాత్రమే మద్దతు ఇస్తుంది, అయితే Avro మల్టిఫంక్షనల్ ఎవల్యూషన్కు మద్దతు ఇస్తుంది, అంటే నిలువు వరుసలను జోడించడం లేదా మార్చడం.
బహుళ-నిలువు వరుస పట్టికలో నిలువు వరుసల ఉపసమితిని ప్రశ్నించడానికి పార్కెట్ అనువైనది. మేము అన్ని నిలువు వరుసలను ప్రశ్నించే ETL కార్యకలాపాలకు Avro అనుకూలంగా ఉంటుంది.