2015-02-01 10 views
8

के साथ स्पार्क स्ट्रीमिंग मैं वर्तमान में लॉगफाइल जैसी प्रविष्टियों में लेने के लिए स्पार्क स्ट्रीमिंग का उपयोग कर रहा हूं और सांख्यिकीय कारणों से उन पर कुछ गणना करने के लिए देख रहा हूं।गतिशील लुकअप टेबल

एचडीएफएस पर रखे गए डेटासेट हैं, जो अभी एचबीएएस और हाइव से उपलब्ध हैं, जिन्हें कुछ डेटा देखने और इसे बदलने के लिए आवश्यक हैं, जैसे आईपी और मशीन नामों और मशीन मालिकों के बीच मैपिंग।

स्पार्क एप्लिकेशन हमारे क्लस्टर दिन पर दिन के बाहर, बिना किसी पुनरारंभ किए सप्ताहों तक चलने की उम्मीद है। हालांकि, ये संदर्भ सारणी हर कुछ घंटों में अपडेट होती हैं।

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

  1. ब्रॉडकास्ट चर डेटा सेट में पढ़ सकते हैं और इसे कुशलता से पास कर सकते हैं। हालांकि, एक बार ब्रॉडकास्ट वैरिएबल सेट हो जाने पर, इसे बदला नहीं जा सकता है, और ड्राइवर क्लास में डेटा फिर से लाया जा सकता है, नए को प्रसारित और प्रसारित नहीं किया जाएगा, क्योंकि श्रमिक पॉइंटर्स सभी पुराने डेटासेट को इंगित करते हैं। मुझे नहीं पता कि उसके आसपास जाने का कोई तरीका है या नहीं।

  2. एचबीएएस प्राप्त() प्रश्नों को बनाया जा सकता है। यदि डेटा लुकअप की कुंजी के आधार पर रेड्यूसर को निर्देशित किया जाता है, तो प्रत्येक रेड्यूसर समग्र डेटासेट के सबसेट का कैश रख सकता है, और अपना स्थानीय कैश रख सकता है। एकल रिकॉर्ड लाने में एचबीएएस में न्यूनतम विलंब होना चाहिए।

  3. कुछ और?

उत्तर

3

आपके यहां दो विकल्प हैं।

सबसे पहले अपने डीस्ट्रीम के शीर्ष पर foreachRDD परिवर्तन का उपयोग करना है। foreachRDD चालक पक्ष पर निष्पादित किया गया है, जिसका अर्थ है कि आप वहां कोई नया आरडीडी बना सकते हैं। आप टाइम काउंटर को स्टोर कर सकते हैं और प्रत्येक 10-15 मिनट

दूसरी बार transform में कुछ फ़ाइल को डीस्ट्रीम पर बदलने और स्मृति में इसके परिणामों को सहेजने के लिए है। इस दृष्टिकोण के साथ आपको प्रत्येक निष्पादक द्वारा संपूर्ण लुकअप टेबल को पढ़ना होगा, जो कुशल नहीं है

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

+0

मेरे पास एक संबंधित प्रश्न है। मेरी लुकअप टेबल लगभग 2 मिलियन पंक्तियां है और स्थिर है। कुंजी लगभग 100 char की एक स्ट्रिंग है, और मूल्य लगभग 10 char की स्ट्रिंग है। अभी मेरे पास यह डेटा एक अनुक्रमित मोंगो डीबी संग्रह में संग्रहीत है और मैं एक ट्रांसफॉर्म चरण के दौरान लुकअप करता हूं। मैं बैच में अपना कॉल करता हूं इसलिए मुझे केवल एक हिट प्रति रूपांतरण होता है, लेकिन फिर भी यह एक नेटवर्क कॉल है। क्या यह एक लुकअप टेबल बनाने के लिए एक बड़ा स्पार्क प्रसारण var बनाने के लिए समझ में आता है? –

+1

2 मिलियन रिकॉर्ड 110 बाइट प्रत्येक डेटा केवल 220 एमबी डेटा है - प्रसारण चर के लिए इतना नहीं। एचडब्ल्यू नोड प्रति 1 निष्पादक होने के बाद अपने क्लस्टर में संग्रहीत इस 220 एमबी की न्यूनतम आवश्यक प्रतियों को सुनिश्चित करना चाहिए। यदि यह स्थैतिक है तो आप इसे अपनी प्रसंस्करण की शुरुआत में स्मृति में लोड कर सकते हैं और बाद में इसका उपयोग कर सकते हैं। मैं आपको मोंगोडीबी जैसी केंद्रीकृत चीज़ों का उपयोग करने की सलाह नहीं देता क्योंकि क्लस्टर बढ़ने से यह आपकी बाधा बन जाएगी।यदि डेटा पूरी तरह स्थिर है तो आप प्रत्येक नोड पर फ़ाइल में डेटा को संग्रहीत करने या प्रत्येक नोड पर स्थानीय स्टोर में (उदाहरण के लिए रेडिस) पर डेटा संग्रहीत करने पर विचार कर सकते हैं। – 0x0FFF

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