एवरो बनाम लकड़ी की छत


91

मैं अपने हडॉप संबंधित परियोजना के लिए हडूप फ़ाइल प्रारूप में से एक का उपयोग करने की योजना बना रहा हूं। मैं समझता हूं कि पूर्ण-स्कैन के लिए या जब हमें सभी कॉलम डेटा की आवश्यकता होती है, तो कॉलम आधारित क्वेरी और एवरो के लिए लकड़ी की छत कुशल है!

इससे पहले कि मैं आगे बढ़ूँ और फ़ाइल प्रारूप में से किसी एक को चुनूँ, मैं समझना चाहता हूँ कि एक के बाद एक नुकसान / कमियाँ क्या हैं। क्या कोई मुझे सरल शब्दों में समझा सकता है?

जवाबों:


53

यदि आपने पहले से तय नहीं किया है, तो मैं आगे जाऊंगा और आपके डेटा के लिए एवरो स्कीमा लिखूंगा। एक बार ऐसा करने के बाद, एवरो कंटेनर फ़ाइलों और लकड़ी की छत फ़ाइलों के बीच चयन करना आसान होता है जैसे कि स्वैपिंग जैसे,

job.setOutputFormatClass(AvroKeyOutputFormat.class);
AvroJob.setOutputKeySchema(MyAvroType.getClassSchema());

के लिये

job.setOutputFormatClass(AvroParquetOutputFormat.class);
AvroParquetOutputFormat.setSchema(job, MyAvroType.getClassSchema());

लिखने के पक्ष में Parquet प्रारूप थोड़ा अधिक कम्प्यूटेशनल रूप से गहन लगता है - उदाहरण के लिए, बफ़रिंग और CPU को डेटा आदि के लिए रैम की आवश्यकता होती है, लेकिन यह I / O, भंडारण और हस्तांतरण लागत को कम करने के साथ-साथ कुशल भी बनाता है। विशेष रूप से SQL- जैसे (जैसे, हाइव या स्पार्कक्यूएस) प्रश्नों के साथ पढ़ता है जो केवल कॉलम के एक हिस्से को संबोधित करते हैं।

एक परियोजना में, मैंने Parquet से Avro कंटेनरों में पुन: प्रवेश किया क्योंकि स्कीमा बहुत व्यापक और नेस्टेड था (कुछ काफी पदानुक्रमिक ऑब्जेक्ट-ओरिएंटेड क्लासेस से प्राप्त किया गया था) और परिणामस्वरूप Parquet कॉलम की अधिकतम संख्या। बदले में, हमारे पंक्ति समूह वास्तव में व्यापक और उथले थे, जिसका अर्थ था कि यह हमेशा के लिए लिया गया था इससे पहले कि हम प्रत्येक समूह के अंतिम कॉलम में छोटी संख्या में पंक्तियों को संसाधित कर सकें।

मुझे अभी तक अधिक सामान्यीकृत / समझदार डेटा के लिए लकड़ी की छत का उपयोग करने का अधिक मौका नहीं मिला है, लेकिन मैं समझता हूं कि यदि अच्छी तरह से उपयोग किया जाता है, तो यह महत्वपूर्ण प्रदर्शन में सुधार के लिए अनुमति देता है।


2
Parquet नेस्टेड डेटासेट / संग्रह का भी समर्थन करता है।
तगर

@Ruslan: हाँ, यह तकनीकी रूप से नेस्टेड संरचनाओं का समर्थन करता था। डेटा के व्यापक डी-सामान्यकरण के कारण समस्या बहुत अधिक थी। यह काम किया लेकिन यह बहुत धीमा था।
स्टीमर 25

4
हाँ, लकड़ी की छत में डेटा लिखना अधिक महंगा है। रीड्स अन्य तरीके से होते हैं, खासकर यदि आपके प्रश्न सामान्यतया कॉलम का सबसेट पढ़ते हैं।
तगर

4
मुझे लगता है कि लकड़ी की छत ज्यादातर उपयोग के मामलों के लिए उपयुक्त है, सिवाय इसके कि एक ही कॉलम में डेटा बहुत भिन्न होता है, और हमेशा लगभग सभी स्तंभों पर विश्लेषण किया जाता है।
रॉकी यांग

अपाचे एरो भी अभी तक मिश्रित घोंसले के शिकार (सूचियों के साथ शब्दकोशों या शब्दकोशों के साथ सूचियों) का समर्थन नहीं करता है। इसलिए यदि आप लकड़ी की छत में जटिल घोंसले के शिकार के साथ काम करना चाहते हैं, तो आप स्पार्क, हाइव, आदि और ऐसे उपकरण के साथ फंस गए हैं जो लकड़ी की छत पर पढ़ने और लिखने के लिए तीर पर भरोसा नहीं करते हैं।
जोसिया

49

एवरो एक पंक्ति आधारित प्रारूप है। यदि आप समग्र रूप से डेटा को पुनः प्राप्त करना चाहते हैं तो आप एवरो का उपयोग कर सकते हैं

Parquet एक कॉलम आधारित प्रारूप है। यदि आपके डेटा में बहुत सारे कॉलम हैं, लेकिन आप कॉलम के सबसेट में रुचि रखते हैं तो आप Parquet का उपयोग कर सकते हैं

HBase तब उपयोगी होता है जब डेटा का लगातार अद्यतन शामिल होता है। एवरो रिट्रीवल में तेज है, लकड़ी की छत बहुत तेज है।


7
कृपया अंतिम पैराग्राफ में अपने 2 अंतिम वाक्य तय करें। वे सर्वथा असंगत हैं।
Cbhihe

39

एवरो

  • व्यापक रूप से एक क्रमांकन मंच के रूप में उपयोग किया जाता है
  • पंक्ति-आधारित, एक कॉम्पैक्ट और तेज़ बाइनरी प्रारूप प्रदान करता है
  • स्कीमा फ़ाइल पर एन्कोड की गई है ताकि डेटा अनटैग हो सके
  • फाइलें ब्लॉक कम्प्रेशन का समर्थन करती हैं और शानदार हैं
  • स्कीमा विकास का समर्थन करता है

लकड़ी की छत

  • स्तंभ-उन्मुख बाइनरी फ़ाइल स्वरूप
  • Dremel पेपर में वर्णित रिकॉर्ड श्रेडिंग और असेंबली एल्गोरिथम का उपयोग करता है
  • प्रत्येक डेटा फ़ाइल में पंक्तियों के सेट के लिए मान होते हैं
  • डिस्क I / O के संदर्भ में कुशल जब विशिष्ट कॉलम को क्वेर करने की आवश्यकता होती है

से एक HDFS डेटा भंडारण प्रारूप एवरो बनाम लकड़ी और अधिक का चयन


29

Avro और Parquet दोनों "स्व-विवरणी" भंडारण प्रारूप हैं, जिसका अर्थ है कि किसी फ़ाइल में डेटा संग्रहीत करते समय डेटा, मेटाडेटा जानकारी और स्कीमा दोनों एम्बेड करते हैं। या तो संग्रहण स्वरूपों का उपयोग उपयोग के मामले पर निर्भर करता है। तीन पहलू उस आधार पर बनते हैं जिसके आधार पर आप चुन सकते हैं कि आपके मामले में कौन सा प्रारूप इष्टतम होगा:

  1. पढ़ें / लिखें ऑपरेशन : लकड़ी की छत एक स्तंभ-आधारित फ़ाइल स्वरूप है। यह अनुक्रमण का समर्थन करता है। इसकी वजह से यह लिखने-एक बार पढ़ने और गहन, जटिल या विश्लेषणात्मक क्वेरी, कम-विलंबता डेटा प्रश्नों के लिए उपयुक्त है। यह आमतौर पर अंत उपयोगकर्ताओं / डेटा वैज्ञानिकों द्वारा उपयोग किया जाता है।
    इस बीच, एवरो, एक पंक्ति-आधारित फ़ाइल प्रारूप होने के नाते, लेखन-गहन संचालन के लिए सबसे अच्छा उपयोग किया जाता है। यह आमतौर पर डेटा इंजीनियरों द्वारा उपयोग किया जाता है। दोनों क्रमबद्धता और संपीड़न प्रारूपों का समर्थन करते हैं, हालांकि वे अलग-अलग तरीकों से ऐसा करते हैं।

  2. टूल्स : इम्पाला के लिए लकड़ी की छत एक अच्छा फिट है। (इम्पाला एक बड़े पैमाने पर समानांतर प्रसंस्करण (एमपीपी) आरडीबीएम एसक्यूएल-क्वेरी इंजन है जो जानता है कि एक या कुछ बाहरी भंडारण इंजनों में रहने वाले डेटा पर कैसे काम किया जाए।) फिर से लकड़ी की छत जटिल / इंटरैक्टिव क्वेरी और फास्ट (कम विलंबता) के लिए अच्छी तरह से उधार देती है। ) HDFS में डेटा पर आउटपुट। यह CDH (Cloudera वितरण Hadoop) द्वारा समर्थित है। Hadoop अपाचे के ऑप्टिमाइज़्ड रो कॉलम (ORC) फॉरमेट (चयन Hadoop वितरण पर निर्भर करता है) का समर्थन करता है, जबकि एवरो स्पार्क प्रसंस्करण के लिए सबसे उपयुक्त है।

  3. स्कीमा इवोल्यूशन : एक डीबी स्कीमा को विकसित करने का मतलब है कि डीबी की संरचना को बदलना, इसलिए इसका डेटा, और इस प्रकार इसकी क्वेरी प्रोसेसिंग।
    Parquet और Avro दोनों स्कीमा विकास का समर्थन करते हैं, लेकिन अलग-अलग डिग्री तक।
    Parquet 'परिशिष्ट' परिचालनों के लिए अच्छा है, उदाहरण के लिए स्तंभ जोड़ना, लेकिन स्तंभों का नाम बदलने के लिए नहीं जब तक कि 'रीड' इंडेक्स द्वारा नहीं किया जाता है।
    एवरो Parquet की तुलना में एप्लाइड, डिलीट और आम तौर पर म्यूटिंग कॉलम के लिए बेहतर अनुकूल है। ऐतिहासिक रूप से एवरो ने पैर्केट की तुलना में स्कीमा विकास की संभावनाओं का एक समृद्ध सेट प्रदान किया है, और यद्यपि उनकी स्कीमा विकास क्षमताओं को धुंधला करना पड़ता है, एवरो अभी भी उस क्षेत्र में चमकता है, जब पैरक की तुलना में।


5
"उपकरण" भाग थोड़ा भ्रामक है। Parquet कुशलता से स्पार्क, प्रेस्टो, हाइव इत्यादि कई अन्य रूपरेखाओं द्वारा उपयोग किया जाता है। एवरो स्पार्क के लिए विशिष्ट नहीं है, यह व्यापक रूप से एचडीएफएस भंडारण प्रारूप और कफका जैसे संदेश गुजर परिदृश्यों के रूप में उपयोग किया जाता है।
at देवम्बरीस

2
आकाश अग्रवाल: क्या आप बता सकते हैं कि "एवरो स्पार्क प्रोसेसिंग के लिए सबसे उपयुक्त है" के साथ पैरा 2 में आपका क्या मतलब है? जैसा कि देवम्बरी द्वारा उल्लेख किया गया है, Parquet स्पार्क प्रसंस्करण वातावरण में भी बहुत अच्छी तरह से एकीकृत है। o_O?!?
Cbhihe

11

आपकी समझ सही है। वास्तव में, हम अपने DWH में डेटा माइग्रेशन के दौरान एक समान स्थिति में भागे थे। हमने एवरो पर Parquet को चुना क्योंकि हमें जो डिस्क सेविंग मिली वह एवरो के साथ मिली तुलना में लगभग दोगुनी थी। इसके अलावा, क्वेरी प्रसंस्करण समय एवरो की तुलना में बहुत बेहतर था। लेकिन हां, हमारे प्रश्न एकत्रीकरण, स्तंभ आधारित संचालन आदि पर आधारित थे, इसलिए Parquet अनुमानित रूप से एक स्पष्ट विजेता था।

हम CDH डिस्ट्रो से Hive 0.12 का उपयोग कर रहे हैं। आपने उल्लेख किया कि आप हाइव + लकड़ी की छत के साथ मुद्दों पर चल रहे हैं, वे क्या हैं? हमारा कोई मुकाबला नहीं हुआ।


3

सिल्वर ब्लेज़ ने एक उदाहरण उपयोग के मामले में अच्छी तरह से वर्णन किया और बताया कि कैसे लकड़ी की छत उनके लिए सबसे अच्छा विकल्प था। यह आपकी आवश्यकताओं के आधार पर एक दूसरे पर विचार करने के लिए समझ में आता है। मैं समय अंतरिक्ष जटिलता तुलना के साथ-साथ विभिन्न अन्य फ़ाइल स्वरूपों का संक्षिप्त विवरण भी दे रहा हूं। उम्मीद है की वो मदद करदे।

फ़ाइल स्वरूपों का एक गुच्छा है जिसे आप हाइव में उपयोग कर सकते हैं। उल्लेखनीय उल्लेख AVRO, Parquet हैं। RCFile और ORC। ऑनलाइन कुछ अच्छे दस्तावेज़ उपलब्ध हैं जिनका उल्लेख आप कर सकते हैं यदि आप इन फ़ाइल स्वरूपों के प्रदर्शन और स्थान उपयोग की तुलना करना चाहते हैं। कुछ उपयोगी लिंक का अनुसरण करता है जो आपको मिलेंगे।

यह ब्लॉग पोस्ट

MapR से यह लिंक [वे पर चर्चा नहीं करते हैं]

इन्क्विडिया से यह लिंक

ऊपर दिए गए लिंक आपको चलते मिलेंगे। मुझे उम्मीद है कि यह आपके प्रश्न का उत्तर देगा।

धन्यवाद!


0

बस Parquet पर एक विवरण के लिए, आप यहाँ देख सकते हैं: http://bigdata.devcodenote.com/2015/04/parquet-file-format.html

मैं एवरो पर बहुत जल्द लिखने का इरादा रखता हूं और साथ ही 2 के बीच तुलना करता हूं। एक बार यहां करने के बाद पोस्ट करेंगे।


तुलना की प्रतीक्षा की जा रही है। वर्तमान में मैंने अपने प्रोजेक्ट के लिए एवरो को चुना क्योंकि पैराकेट में हाइव के साथ कॉम्पिटिबिलिटी के मुद्दे हैं :)
अभिषेक

1
@Abshinek, क्या आप हाइव और एवरो
ईबी के

@EB कोई समस्या नहीं होनी चाहिए, अगर वहाँ हैं, तो उनका उल्लेख cwiki.apache.org/confluence/display/Hive/AvroSerDe
OneCricketeer
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.