जर्जर बनाम ओआरसी बनाम ओआरसी


87

मैं हाइव के साथ उपलब्ध भंडारण प्रारूपों पर कुछ परीक्षण चला रहा हूं और प्रमुख विकल्पों के रूप में Parquet और ORC का उपयोग कर रहा हूं। मैंने ORC को एक बार डिफ़ॉल्ट संपीड़न के साथ और एक बार स्नैपी के साथ शामिल किया।

मैंने कई दस्तावेजों को पढ़ा है कि ओआरसी की तुलना में समय / स्थान की जटिलता में बेहतर होने के लिए राज्य की लकड़ी की छत बेहतर है, लेकिन मेरे परीक्षण उन दस्तावेजों के विपरीत हैं जिनसे मैं गुजरा था।

मेरे डेटा के कुछ विवरण का अनुसरण करता है।

Table A- Text File Format- 2.5GB

Table B - ORC - 652MB

Table C - ORC with Snappy - 802MB

Table D - Parquet - 1.9 GB

जहां तक ​​मेरी मेज के लिए संपीड़न का संबंध है, तब तक लकड़ी की छत सबसे खराब थी।

उपरोक्त सारणियों के साथ मेरे परीक्षणों के बाद परिणाम मिले।

पंक्ति गणना ऑपरेशन

Text Format Cumulative CPU - 123.33 sec

Parquet Format Cumulative CPU - 204.92 sec

ORC Format Cumulative CPU - 119.99 sec 

ORC with SNAPPY Cumulative CPU - 107.05 sec

एक कॉलम ऑपरेशन का योग

Text Format Cumulative CPU - 127.85 sec   

Parquet Format Cumulative CPU - 255.2 sec   

ORC Format Cumulative CPU - 120.48 sec   

ORC with SNAPPY Cumulative CPU - 98.27 sec

एक कॉलम ऑपरेशन का औसत

Text Format Cumulative CPU - 128.79 sec

Parquet Format Cumulative CPU - 211.73 sec    

ORC Format Cumulative CPU - 165.5 sec   

ORC with SNAPPY Cumulative CPU - 135.45 sec 

क्लॉज का उपयोग करके किसी दिए गए रेंज से 4 कॉलम का चयन करना

Text Format Cumulative CPU -  72.48 sec 

Parquet Format Cumulative CPU - 136.4 sec       

ORC Format Cumulative CPU - 96.63 sec 

ORC with SNAPPY Cumulative CPU - 82.05 sec 

क्या इसका मतलब है कि ORC तेज है और फिर Parquet? या ऐसा कुछ है जो मैं क्वेरी प्रतिक्रिया समय और संपीड़न अनुपात के साथ इसे बेहतर बनाने के लिए कर सकता हूं?

धन्यवाद!


1
क्या आप उस प्रयोग को करने के लिए उपयोग किए जाने वाले एक सामान्य एल्गोरिथ्म को साझा कर सकते हैं? हालांकि एक ही डेटा का उपयोग करना आवश्यक है। लेकिन अलग-अलग डेटासेट के साथ एक ही परिणाम प्राप्त करने के लिए बाकी सब कुछ साझा करना आपको बेहतर जवाब देने या यह साबित करने के लिए बहुत उपयोगी हो सकता है कि आपके पास एक बहुत अच्छा बिंदु है और दुनिया को हमेशा के लिए बदल सकता है।
मेस्त्रे सैन

क्या आपके पास orc vs parquet का उपयोग करके कोई स्पार्क बनाम तेज़ परिणाम है? मैंने जो देखा है उससे ऐसा लगता है जैसे orc फॉर्मेट का उपयोग करते समय tez तेज (3 गुना तेज) होता है।
डेविड एच

आपके अच्छे बेंचमार्किंग अवलोकन के लिए + 1। किसी भी तरह, क्या आप एक अद्यतन संस्करण प्रदान कर सकते हैं क्योंकि कुछ तकनीकी पहलुओं के पीछे के दृश्य बदल गए हैं (उदाहरण के लिए @jonathanChap के उत्तर में चर्चा की गई)?
मार्कस

जवाबों:


52

मैं कहूंगा, कि इन दोनों प्रारूपों के अपने फायदे हैं।

यदि आपके पास अत्यधिक नेस्टेड डेटा है, तो लकड़ी की छत बेहतर हो सकती है, क्योंकि यह अपने तत्वों को एक पेड़ के रूप में संग्रहीत करता है जैसे कि Google Dremel करता है ( यहां देखें )।
यदि आपकी फ़ाइल-संरचना चपटी है तो Apache ORC बेहतर हो सकता है।

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

लकड़ी की छत डिफ़ॉल्ट संपीड़न SNAPPY है। क्या टेबल A - B - C और D एक ही डेटासेट पकड़े हुए हैं? यदि हां ऐसा लगता है कि इसके बारे में कुछ छायादार है, जब यह केवल 1.9 जीबी तक संपीड़ित करता है


2
तालिका A - पाठ फ़ाइल प्रारूप - कोई संपीड़न नहीं ......... तालिका B - ZLIB संपीड़न के साथ ORC फ़ाइल प्रारूप ......... तालिका C - ORC तेज़ के साथ ....... तालिका डी - स्नेकी के साथ लकड़ी की छत ..... मैंने एक और टेबल पर काम किया ~ 150 कॉलम और ~ 160 जीबी आकार में यह जांचने के लिए कि फ़ाइल प्रारूप कैसे प्रदर्शन करते हैं। Parquet ने 35 GB लिया, उस 160GB डेटा को संग्रहीत करने के लिए, जबकि ORC ने स्नैपी के साथ 39GB लिया ...... संपीड़न Parquet के लिए बेहतर लग रहा था क्योंकि प्रश्न में पोस्ट किए गए परीक्षण की तुलना में, लेकिन प्रदर्शन फिर से इसी तरह की तर्ज पर किया गया था .. ORC यहां तक ​​कि साथ में चमकता है ORC + SNAPPY संयोजन से बेहतर प्रदर्शन।
राहुल

1
मेरे उपयोग के मामलों की डेटा संरचना बिना किसी नेस्टिंग के थी। मैं Parquet बनाम ORC पर आपकी अनुक्रमण टिप्पणी से सहमत हूं और इससे वास्तव में फर्क पड़ता है। क्या आपके पास दोनों के प्रदर्शन की तुलना से साझा करने के लिए कोई परिणाम है? यह मेरे विवेक को शांत करने में मदद कर सकता है कि मैं स्वरूपों को सही ढंग से लागू कर रहा हूं। :)
राहुल

मैंने अपने डेटासेट को कभी भी लकड़ी की छत पर परीक्षण नहीं किया क्योंकि सूचकांक एक आवश्यक आवश्यकता थी और हमारे पास एक फ्लैट डेटा संरचना भी है जिसमें कोई नेस्टेड जानकारी नहीं है। मुझे जो पता चला है, वह यह है कि जहां आप अपनी फ़ाइलों को संग्रहीत करते हैं, उसके आधार पर आपको सर्वोत्तम परिणाम प्राप्त करने के लिए एक अलग पट्टी और फ़ाइल आकार की आवश्यकता होती है। जब आप अपनी फ़ाइलों को स्थायी रूप से HDFS पर संग्रहीत करते हैं तो बड़ी फ़ाइलों और पट्टियों का होना बेहतर होता है। "mapred.max.split.size = 4096000000 सेट करें" वह पैरामीटर था जिसका उपयोग मैंने फ़ाइल के आकार और पट्टी के आकार को उसके डिफ़ॉल्ट मान को प्रभावित करने के लिए किया था। इस सेटिंग के साथ इसने मुझे लगभग 94% क्वेरी और कम्प्रेशन बूस्ट दिया।
फन्थोमस

अगर आप अमेजन S3 पर अपनी फाइल को कोल्ड स्टोरेज के रूप में स्टोर करना चाहते हैं तो छोटी फाइल और स्ट्राइप साइज ने मुझे काफी बेहतर परिणाम दिए हैं। मैं 40-60MB के साइज़ की फाइलों का इस्तेमाल करता था जिसमें सिंगल स्ट्राइप होता था।
फन्थोमास

44

आप इसे देख रहे हैं क्योंकि:

  • हाइव में एक सदिश ORC रीडर है, लेकिन कोई सदिश पैराक्वेट रीडर नहीं है।

  • स्पार्क में एक वेक्टरकृत पैराकिट रीडर और कोई वेक्टर ओआरसी रीडर नहीं है।

  • स्पार्क लकड़ी की छत के साथ सबसे अच्छा प्रदर्शन करता है, हाइव ORC के साथ सबसे अच्छा प्रदर्शन करता है।

मैंने ORC और Parquet को स्पार्क के साथ चलाते समय समान अंतर देखा है।

वैश्वीकरण का अर्थ है कि पंक्तियों को बैचों में डिकोड किया जाता है, नाटकीय रूप से मेमोरी इलाके और कैश उपयोग में सुधार होता है।

(हाइव 2.0 और स्पार्क 2.1 के रूप में सही)


18
2.3.0 के रूप में, चिंगारी है : एक vectorized ओआरसी पाठक है issues.apache.org/jira/browse/SPARK-16060
स्टीन


स्पार्क 2.3 के बाद से, स्पार्क एक सदिश
अनुराग शर्मा

10

Parquet और ORC दोनों के अपने फायदे और नुकसान हैं। लेकिन मैं बस अंगूठे के एक सरल नियम का पालन करने की कोशिश करता हूं - "आपका डेटा कितना नेस्टेड है और कितने कॉलम हैं" । यदि आप Google Dremel का अनुसरण करते हैं, तो आप पा सकते हैं कि कैसे लकड़ी की छत तैयार की गई है। वे डेटा को संग्रहीत करने के लिए एक पेड़ की तरह की संरचना का निर्माण करते हैं। अधिक घोंसले के शिकार पेड़ को गहरा करते हैं।

लेकिन ORC एक चपटा फ़ाइल स्टोर के लिए डिज़ाइन किया गया है। इसलिए यदि आपका डेटा कम स्तंभों के साथ समतल है, तो आप ORC के साथ जा सकते हैं, अन्यथा, आपके लिए लकड़ी की छत ठीक रहेगा। चपटा डेटा पर संपीड़न ORC में आश्चर्यजनक रूप से काम करता है।

हमने एक बड़ी चपटी फाइल के साथ कुछ बेंचमार्किंग की, इसे डेटाफ्रेम स्पार्क में परिवर्तित किया और इसे S3 में Parquet और ORC दोनों प्रारूप में संग्रहीत किया और ** Redshift-Spectrum ** के साथ क्वेरी की।

Size of the file in parquet: ~7.5 GB and took 7 minutes to write
Size of the file in ORC: ~7.1. GB and took 6 minutes to write
Query seems faster in ORC files.

जल्द ही हम नेस्टेड डेटा के लिए कुछ बेंचमार्किंग करेंगे और यहां परिणाम अपडेट करेंगे।


6

हमने अलग-अलग उपयोग मामलों में अलग-अलग फ़ाइल स्वरूपों (एवरो, JSON, ORC, और लकड़ी की छत) की तुलना करते हुए कुछ बेंचमार्क किया।

https://www.slideshare.net/oom65/file-format-benchmarks-avro-json-orc-parquet

डेटा सभी सार्वजनिक रूप से उपलब्ध है और बेंचमार्क कोड सभी खुले स्रोत पर है:

https://github.com/apache/orc/tree/branch-1.4/java/bench


5
यह वास्तव में उपयोगी है, लेकिन एक अस्वीकरण होना चाहिए कि @ ओवेन हॉर्टन वर्क्स के लिए काम करता है, जिसने मूल रूप से ओआरसी फ़ाइल प्रारूप विकसित किया
डैनियल कैट्स

1
धन्यवाद! लेकिन दूसरी कड़ी टूट गई है। क्या आप अपने जवाब से इसे ठीक कर सकते हैं या हटा सकते हैं?
दानिलो गोम्स

3

दोनों के अपने फायदे हैं। हम हाइव और इम्पाला के साथ एक साथ काम पर लकड़ी की छत का उपयोग करते हैं, लेकिन बस परक पर ओआरसी के कुछ फायदे बताना चाहते थे: लंबे समय तक चलने वाले प्रश्नों के दौरान, जब हाइव प्रश्न ORC तालिकाओं GC को लगभग 10 गुना कम बार कहा जाता है । कई परियोजनाओं के लिए कुछ भी नहीं हो सकता है, लेकिन दूसरों के लिए महत्वपूर्ण हो सकता है।

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

इसके अलावा, ORC संपीड़न कभी-कभी थोड़ा यादृच्छिक होता है, जबकि लकड़ी की छत संपीड़न अधिक सुसंगत है। ऐसा लगता है कि जब ORC तालिका में कई संख्या स्तंभ हैं - यह भी संपीड़ित नहीं करता है। यह zlib और snappy संपीड़न दोनों को प्रभावित करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.