मैंने महीनों पहले फीनिक्स जोड़े का उपयोग शुरू किया। नीचे पर्यावरण और संस्करण विवरण हैं।अपाचे फीनिक्स क्वेरी प्रदर्शन में शामिल हों
हैडोप - क्लौडेरा सीडीएच 5.4.7-1। फीनिक्स - 4.3 - फीनिक्स जो सीडीएच 5.4.7-1 पर पार्सल के रूप में आता है। एचबीएएस संस्करण - एचबीएस 1.0.0 जेडीके - 1.7.0_67 1 मास्टर और 3 क्षेत्र सर्वर।
हमने अपाचे फीनिक्स का मूल्यांकन करने के लिए एक पीओसी करना शुरू किया। हमारे पास ओरेकल डीबी पर 12 अलग-अलग तालिकाओं में डेटा है। हम ओरेकल गोल्डन गेट का उपयोग करके डेटा को हडोप सिस्टम में प्राप्त करते हैं।
12 अलग फीनिक्स टेबल हैं जिनमें प्रत्येक सौ पंक्तियों के साथ 40-100 कॉलम हैं। हम एक परिवर्तन प्रक्रिया करते हैं और फिर अंतिम तालिका में लोड होते हैं। यह मूल ईटीएल है जिसे हम कर रहे हैं। परिवर्तन प्रक्रिया कुछ मध्यवर्ती चरणों के माध्यम से जाती है जहां हम मध्यवर्ती तालिकाओं को पॉप्युलेट करते हैं। इसलिए टेबल के बीच "जुड़ता है"।
सबकुछ बढ़िया काम करता है और हम पूरी ईटीएल प्रक्रिया को लागू करने में सक्षम थे। मैं उपयोग और कार्यान्वयन की आसानी से बहुत खुश था।
समस्याएं तब शुरू हुई जब हमने लाखों पंक्तियों के साथ प्रदर्शन परीक्षण के साथ शुरुआत की। नीचे मुद्दे हैं।
मध्यवर्ती परिवर्तन प्रक्रिया क्षेत्र सर्वरों को दुर्घटनाग्रस्त करती है: दो तालिकाओं में शामिल होना, प्रत्येक 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) | + ------------------------------------------ +
अंतिम परिवर्तन के लिए 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
धन्यवाद kliew! मैंने कॉन्फ़िगरेशन सेटिंग्स को बदलने का प्रयास किया (प्रश्न में मेरी नवीनतम सेटिंग्स देखें) और इसे काम करने के लिए बनाया लेकिन केवल एक निश्चित सीमा तक। प्रदर्शन के मुद्दों के कारण मैं दस लाख से अधिक रिकॉर्ड नहीं जा सका। आखिरकार फीनिक्स को एचबीएएस पर एक पूर्ण एसक्यूएल के रूप में छोड़ दिया। अब हम कच्चे एचबीज़ का मूल्यांकन कर रहे हैं। और आवश्यकता के आधार पर फीनिक्स का उपयोग किया जा सकता है। –
'USE_SORT_MERGE_JOIN' "क्वेरी संकेत" एसक्यूएल क्वेरी में जोड़ा गया है, कॉन्फ़िगरेशन सेटिंग्स पर नहीं। क्या आपने इस क्वेरी संकेत का उपयोग करके अपने जुड़ने की कोशिश की है? जब आप इस क्वेरी संकेत को सेट करते हैं, तो फीनिक्स वैकल्पिक वैकल्पिक एल्गोरिदम का उपयोग करेगा जिसमें अधिक स्मृति की आवश्यकता नहीं होती है। – kliew