2016-01-22 13 views
5

मैंने महीनों पहले फीनिक्स जोड़े का उपयोग शुरू किया। नीचे पर्यावरण और संस्करण विवरण हैं।अपाचे फीनिक्स क्वेरी प्रदर्शन में शामिल हों

हैडोप - क्लौडेरा सीडीएच 5.4.7-1। फीनिक्स - 4.3 - फीनिक्स जो सीडीएच 5.4.7-1 पर पार्सल के रूप में आता है। एचबीएएस संस्करण - एचबीएस 1.0.0 जेडीके - 1.7.0_67 1 मास्टर और 3 क्षेत्र सर्वर।

हमने अपाचे फीनिक्स का मूल्यांकन करने के लिए एक पीओसी करना शुरू किया। हमारे पास ओरेकल डीबी पर 12 अलग-अलग तालिकाओं में डेटा है। हम ओरेकल गोल्डन गेट का उपयोग करके डेटा को हडोप सिस्टम में प्राप्त करते हैं।

12 अलग फीनिक्स टेबल हैं जिनमें प्रत्येक सौ पंक्तियों के साथ 40-100 कॉलम हैं। हम एक परिवर्तन प्रक्रिया करते हैं और फिर अंतिम तालिका में लोड होते हैं। यह मूल ईटीएल है जिसे हम कर रहे हैं। परिवर्तन प्रक्रिया कुछ मध्यवर्ती चरणों के माध्यम से जाती है जहां हम मध्यवर्ती तालिकाओं को पॉप्युलेट करते हैं। इसलिए टेबल के बीच "जुड़ता है"।

सबकुछ बढ़िया काम करता है और हम पूरी ईटीएल प्रक्रिया को लागू करने में सक्षम थे। मैं उपयोग और कार्यान्वयन की आसानी से बहुत खुश था।

समस्याएं तब शुरू हुई जब हमने लाखों पंक्तियों के साथ प्रदर्शन परीक्षण के साथ शुरुआत की। नीचे मुद्दे हैं।

  1. मध्यवर्ती परिवर्तन प्रक्रिया क्षेत्र सर्वरों को दुर्घटनाग्रस्त करती है: दो तालिकाओं में शामिल होना, प्रत्येक 20 मिलियन पंक्तियों के साथ। कॉलम पर बनाया गया माध्यमिक इंडेक्स जिसमें मैं शामिल हूं। दो टेबल 9 बाल्टी के साथ नमकीन हैं। यह अच्छी तरह से प्रदर्शन किया गया है यदि शामिल होने से उत्पन्न पंक्तियों की संख्या ~ 200k से कम है। 200k पंक्तियों को निष्पादित करने में 10 मिनट से अधिक समय लगता है। यदि परिणामस्वरूप पंक्तियों की संख्या अधिक है, तो क्षेत्र सर्वर क्रैश होने लगते हैं। टेस्ट कोड चयन गणना (available_bal) की व्याख्या salted.b_acct2 बा से भीतरी में शामिल होने के (salted.m_item2 मील से c_item_id का चयन करें जहां s_info_id = 12345) मील रूप ba.c_item_id = mi.c_item_id पर;

    + ------------------------------------------ + | योजना | + ------------------------------------------ + | क्लाइंट 9-चंक पैरालेल 9-वे पूर्ण स्कैन से अधिक स्कैन .2_BA_CI_IDX | | एकल पंक्ति में सर्वर AGGREGATE | | पैरालेल इनर-जॉइन टेबल 0 (स्किप मेर्ज) | | क्लाइंट 9-चंक पैरालेल 9-रास्ता रेंज स्कैन पर स्कैन स्कैन ._एमआई_एसआई_आईडीएक्स [0,19,266] | | क्लाइंट मेर्ज सॉर्ट | | TO_BIGINT द्वारा डायनामिक सर्वर फ़िल्टर ("C_ITEM_ID") IN (MI.C_ITEM_ID) | + ------------------------------------------ +

  2. अंतिम परिवर्तन के लिए 6 टेबल में शामिल होना लटकता है: अनुक्रमित कॉलम पर 6 टेबल में शामिल होने से 1 एम से कम पंक्तियों के लिए डेटा लौटाता है। इसमें 10-12 मिनट लगते हैं। लेकिन यदि परिणाम परिणाम 1 एम से अधिक हैं, तो यह लटकता है और नतीजा वापस नहीं आता है। प्रारंभ में मुझे अपर्याप्त मैमरी अपवाद मिला, जिसे मैंने कॉन्फ़िगरेशन को बदलकर और स्मृति को बढ़ाकर हल किया। मुझे अपर्याप्त MemoryException दोबारा नहीं मिलता है, लेकिन क्वेरी 20 मिनट से अधिक के लिए निष्पादित नहीं होती है। हम कुछ सेकंड के भीतर निष्पादित होने की उम्मीद कर रहे हैं।

    jvm.bootoptions= -Xms512m –Xmx9999M. 
    hbase.regionserver.wal.codec : org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec 
    hbase.rpc.timeout 600000 
    phoenix.query.timeoutMs 360000000 
    phoenix.query.maxServerCacheBytes 10737418240 
    phoenix.coprocessor.maxServerCacheTimeToLiveMs 900000 
    hbase.client.scanner.timeout.period 600000 
    phoenix.query.maxGlobalMemoryWaitMs 100000 
    phoenix.query.maxGlobalMemoryPercentage 50 
    hbase.regionserver.handler.count 50 
    

    सारांश::

नीचे मापदंड हैं कोर मुद्दों प्रश्नों में शामिल होने की धीमी गति से निष्पादन किया जा रहा है और जब डेटा पंक्तियों की 1 लाख से परे चला जाता क्षेत्र सर्वर के अंत में दुर्घटनाग्रस्त। निष्पादन पर कोई सीमा है? कृपया इन मुद्दों को हल करने में मेरी सहायता करें क्योंकि हम मूल्यांकन प्रक्रिया के माध्यम से जा रहे हैं और मैं फीनिक्स जाने नहीं देना चाहता! अगर मैं उपरोक्त प्रश्नों को त्वरित समय में निष्पादित करने में सक्षम हूं, तो मैं फीनिक्स का उपयोग करने में संकोच नहीं करूंगा।

सादर, Shivamohan

उत्तर

1

डिफ़ॉल्ट रूप से, फीनिक्स का उपयोग करता हैश मिलती है, स्मृति में फिट करने के लिए डेटा की जरूरत पड़ेगी। आप (बहुत बड़े तालिकाओं के साथ) समस्याएं आ रही हों, तो आप फीनिक्स (config सेटिंग) के लिए आवंटित स्मृति की मात्रा को बढ़ा सकते हैं या एक प्रश्न "संकेत" सेट (यानी। SELECT /*+ USE_SORT_MERGE_JOIN*/ FROM ...) का उपयोग करने के तरह-मर्ज मिलती है जो एक ही नहीं है आवश्यकता। वे भविष्य में आदर्श शामिल एल्गोरिदम को स्वत: पहचानने की योजना बना रहे हैं। इसके अतिरिक्त, फीनिक्स वर्तमान में केवल संचालन के संचालन का एक सबसेट का समर्थन करता है।

+0

धन्यवाद kliew! मैंने कॉन्फ़िगरेशन सेटिंग्स को बदलने का प्रयास किया (प्रश्न में मेरी नवीनतम सेटिंग्स देखें) और इसे काम करने के लिए बनाया लेकिन केवल एक निश्चित सीमा तक। प्रदर्शन के मुद्दों के कारण मैं दस लाख से अधिक रिकॉर्ड नहीं जा सका। आखिरकार फीनिक्स को एचबीएएस पर एक पूर्ण एसक्यूएल के रूप में छोड़ दिया। अब हम कच्चे एचबीज़ का मूल्यांकन कर रहे हैं। और आवश्यकता के आधार पर फीनिक्स का उपयोग किया जा सकता है। –

+0

'USE_SORT_MERGE_JOIN' "क्वेरी संकेत" एसक्यूएल क्वेरी में जोड़ा गया है, कॉन्फ़िगरेशन सेटिंग्स पर नहीं। क्या आपने इस क्वेरी संकेत का उपयोग करके अपने जुड़ने की कोशिश की है? जब आप इस क्वेरी संकेत को सेट करते हैं, तो फीनिक्स वैकल्पिक वैकल्पिक एल्गोरिदम का उपयोग करेगा जिसमें अधिक स्मृति की आवश्यकता नहीं होती है। – kliew

0

यू एलएचएस & आरएचएस अवधारणा है जो एक प्रदर्शन का अनुकूलन सुविधा (http://phoenix.apache.org/joins.html) के रूप में फोनिक्स प्रलेखन में वर्णित किया गया है की कोशिश? एक आंतरिक के मामले में शामिल होने के क्या के शामिल होने के सर्वर कैश में एक हैश तालिका के रूप में बनाया जाएगा एलएचएस इसलिए कृपया सुनिश्चित करें कि आपकी छोटी तालिका आंतरिक जुड़ने के एलएचएस बनाती है। क्या वे कॉलम थे जिन्हें आपने क्वेरी में चुना था जो आपके द्वारा बनाए गए माध्यमिक इंडेक्स का हिस्सा था? यदि आपने ऊपर की कोशिश की है और अभी भी मिनटों में विलंबता प्राप्त कर रही है तो आपको हबेस क्षेत्र सर्वर की याददाश्त की जांच करनी होगी और क्या वे आपकी क्वेरी को पूरा करने के लिए पर्याप्त हैं या नहीं।

संबंधित मुद्दे