2010-09-10 8 views
18

मैं कैस्केडिंग की कोशिश कर रहा हूं, लेकिन मुझे क्लासिक मानचित्र पर नौकरियों को लिखने के दृष्टिकोण को कम करने का कोई फायदा नहीं दिख रहा है।क्या कोई हैडोप मानचित्र के लिए कैस्केडिंग खोजता है उपयोगी?

मानचित्र कम करें नौकरियां मुझे और अधिक आजादी देती हैं और कैस्केडिंग में कई बाधाएं लगती हैं।

सरल चीजों को सरल बनाने के लिए एक अच्छा काम कर सकता है, लेकिन जटिल चीजों .. मैं उन्हें बेहद कठिन

लगता है कि वहाँ कुछ मैं याद कर रहा हूँ है। क्लासिक दृष्टिकोण पर कैस्केडिंग का कोई स्पष्ट फायदा है?

क्लासिक दृष्टिकोण पर मुझे किस परिदृश्य में कैस्केडिंग करना चाहिए? कोई भी इसका इस्तेमाल कर रहा है और खुश है?

उत्तर

24

मैं अब कुछ वर्षों से कैस्केडिंग का उपयोग कर रहा हूं। मुझे यह बेहद सहायक लगता है। आखिरकार, यह उत्पादकता लाभ के बारे में है। सादे जावा कोड की तुलना में मैं एम/आर नौकरियों को बनाने और बनाए रखने में और अधिक कुशल हो सकता हूं। यहां कुछ कारण दिए गए हैं:

  • नौकरी शुरू करने के लिए उपयोग किए जाने वाले बहुत सारे बॉयलरप्लेट कोड पहले से ही आपके लिए लिखे गए हैं।
  • कंपोज़ेबिलिटी। आम तौर पर कोड को पढ़ने के लिए आसान और पुन: उपयोग करना आसान होता है जब इसे घटक (ऑपरेशंस) के रूप में लिखा जाता है जो कुछ और जटिल प्रसंस्करण करने के लिए एक साथ सिलाई जाती है।
  • मुझे यूनिट परीक्षण आसान होने लगता है। कैस्केडिंग पैकेज में उदाहरण हैं कि फ्लो के आउटपुट का परीक्षण करने के लिए सरल यूनिट परीक्षण कैसे लिखना है।
  • टैप (स्रोत और सिंक) प्रतिमान नौकरी के इनपुट और आउटपुट को बदलना आसान बनाता है, उदाहरण के लिए, आप आउटपुट के साथ विकास और डिबगिंग के लिए STDOUT से प्रारंभ कर सकते हैं और फिर बैच नौकरियों के लिए एचडीएफएस अनुक्रमफाइल पर स्विच कर सकते हैं और फिर छद्म-वास्तविक समय अपडेट के लिए एक HBase टैप पर स्विच करें।
  • कैस्केडिंग नौकरियों को लिखने का एक और बड़ा फायदा यह है कि आप वास्तव में ऐसे कारखाने को लिख रहे हैं जो नौकरियां पैदा करता है। यह एक बड़ा फायदा हो सकता है जब आपको गतिशील रूप से कुछ बनाने की आवश्यकता होती है (यानी।एक नौकरी के परिणाम के परिणामस्वरूप आप जो काम करते हैं और चलाते हैं)। या, एक और मामले में, मुझे 6 बाइनरी चर के प्रत्येक संयोजन के लिए नौकरी बनाने की आवश्यकता थी। यह 64 नौकरियां हैं जो सभी समान हैं। यह सिर्फ हडूप मानचित्र कक्षाओं को कम करने के साथ परेशानी होगी।

जबकि वहाँ है कि आप एक साथ बना सकता है, अगर आपके संसाधन तर्क का एक विशेष खंड है जैसे कि यह आसान हो बस सीधे जावा में लिखने के लिए होगा लगता है पहले से बने घटकों के एक बहुत हैं, तो आप हमेशा एक व्यापक समारोह बना सकते हैं इसे लपेटने के लिए। यह आपको कैस्केडिंग के लाभ प्राप्त करने की अनुमति देता है, लेकिन बहुत ही कस्टम ऑपरेशन सीधे जावा कार्यों के रूप में लिखा जा सकता है (एक कैस्केडिंग इंटरफेस को कार्यान्वित करना)।

+0

क्या "कैस्केडिंग के साथ एंटरप्राइज़ वर्कफ़्लोज़" के अलावा कैस्केडिंग सीखने के लिए कोई अन्य पुस्तक है? वर्तमान में मैं इस पुस्तक को पढ़ रहा हूं लेकिन ऐसा लगता है कि उस पुस्तक में कोड कुछ हद तक पुराना है। ऐसा लगता है कि इस पुस्तक को लिखा गया था क्योंकि कैस्केडिंग में कई चीजें बदल गई हैं। – Shekhar

+0

हैलो मार्क क्या आप इस प्रश्न पर कैस्केडिंग का उपयोग कर समाधान का सुझाव दे सकते हैं ..http: //stackoverflow.com/questions/27506306/piping-data-into-jobs-in-hadoop-mr-pig –

1

व्यापक आप जो, "... परिष्कृत, अत्यधिक composable कोड है कि साझा किया जा सकता बनाने के लिए विवरण के किसी गलत स्तर पर हो जाते हैं Hadoop द्वारा की पेशकश की आदिम प्रकार के स्थान पर सरल फ़ील्ड का नाम और tuples उपयोग करने के लिए अनुमति देता है विभिन्न डेवलपर्स के बीच " (Tom White, Hadoop The Definitive Guide)। कैस्केडिंग उन समस्याओं को हल करने के लिए डिज़ाइन किया गया था। ध्यान रखें, कैस्केडिंग, हाइव, पिग इत्यादि जैसे कुछ अनुप्रयोग समानांतर में विकसित किए गए थे और कभी-कभी वही काम करते थे। यदि आपको कैस्केडिंग पसंद नहीं है या इसे भ्रमित करना पसंद है, तो शायद आप कुछ और इस्तेमाल करने के बेहतर होंगे?

मुझे यकीन है कि आपके पास पहले से ही यह है, लेकिन यहां उपयोगकर्ता मार्गदर्शिका है: http://www.cascading.org/1.1/userguide/pdf/userguide.pdf। यह एक ठेठ कैस्केडिंग अनुप्रयोग में डेटा के प्रवाह के माध्यम से एक सभ्य चलना प्रदान करता है। मन में

+0

का उपयोग करके फ़ाइलों को लॉग करने के लिए डेटा के टेराबाइट्स को पोर्ट किया गया है, आपके शीर्षक में प्रश्न का उत्तर देने के लिए: http://sharethis.com/ कैस्केडिंग का उपयोग करता है, इसलिए उन्हें इसे ढूंढना होगा उपयोगी। – sholsapp

51

रखते हुए मैं व्यापक के लेखक हूँ ...

मेरे सुझाव सुअर या हाइव उपयोग करने के लिए अगर वे आपकी समस्या के लिए कोई मतलब, सुअर विशेष रूप से है।

लेकिन यदि आप डेटा के व्यवसाय में हैं, और न केवल अंतर्दृष्टि के लिए अपने डेटा के आसपास पोकिंग करते हैं, तो आप पाएंगे कि कच्चे MapReduce की तुलना में अधिकांश समस्याओं के लिए कैस्केडिंग दृष्टिकोण अधिक समझ में आता है।

कच्चे MapReduce के साथ आपकी पहली बाधा MapReduce में सोच रही होगी। मैड्रिडस में मामूली समस्याएं सरल होती हैं, लेकिन जटिल अनुप्रयोगों को विकसित करना बहुत आसान होता है यदि आप ऐसे मॉडल के साथ काम कर सकते हैं जो आपके समस्या डोमेन पर अधिक आसानी से मानचित्र डालता है (इसे फ़िल्टर करें, उसको पार्स करें, उनको सॉर्ट करें, बाकी में शामिल हों, आदि)।

अगला आपको पता चलेगा कि हडोप में काम की सामान्य इकाई में कई मैपरेडस नौकरियां शामिल हैं। एक साथ काम करने वाली नौकरियां एक हल करने योग्य समस्या है लेकिन इसे आपके आवेदन डोमेन स्तर कोड में रिसाव नहीं करना चाहिए, यह छुपा और पारदर्शी होना चाहिए।

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

कैस्केडिंग जितना संभव हो सके तेजी से विफल होने में विश्वास करता है। योजनाकार हैडोप क्लस्टर भी काम में व्यस्त होने से पहले उन सभी फील्ड नामों के बीच निर्भरताओं को हल करने और संतुष्ट करने का प्रयास करता है। इसका मतलब यह है कि सभी मुद्दों का 9 0% + आपके नौकरी के निष्पादन के दौरान इसे ढूंढने के घंटों के इंतजार से पहले मिलेगा।

आप कच्चे MapReduce कोड में व्यक्ति या दस्तावेज़ जैसे डोमेन ऑब्जेक्ट्स बनाकर इसे कम कर सकते हैं, लेकिन कई अनुप्रयोगों को स्ट्रीम के सभी फ़ील्ड की आवश्यकता नहीं है। विचार करें कि क्या आपको सभी पुरुषों की औसत आयु की आवश्यकता है। आप नेटवर्क के चारों ओर एक पूरे व्यक्ति को पारित करने के आईओ दंड का भुगतान नहीं करना चाहते हैं, जब आपको केवल एक बाइनरी लिंग और संख्यात्मक आयु चाहिए।

असफल तेज़ अर्थशास्त्र और सिंक और स्रोतों के आलसी बाध्यकारी के साथ, कैस्केडिंग पर ढांचे का निर्माण करना बहुत आसान हो जाता है जो खुद को कैस्केडिंग प्रवाह बनाता है (जो कई हडोप मैपरेडिस नौकरियां बनता है)। एक प्रोजेक्ट जो मैं वर्तमान में शामिल हूं, 100 मैपड्रिज जॉब्स प्रति रन के साथ समाप्त होता है, कई डेटा संसाधित होने से प्रतिक्रिया के आधार पर फ्लाई मिड रन पर बनाए जाते हैं। जटिल प्रक्रियाओं को बनाने के लिए क्लोजर आधारित ढांचे का उदाहरण देखने के लिए Cascalog के लिए खोजें। या Bixo वेब खनन टूलकिट और ढांचे के लिए जो नच से अनुकूलित करना कहीं अधिक आसान है।

अंत में हैडोप का कभी भी अकेला उपयोग नहीं किया जाता है, इसका मतलब है कि आपका डेटा हमेशा किसी बाहरी स्रोत से खींचा जाता है और प्रसंस्करण के बाद दूसरे को धक्का दिया जाता है। हैडोप के बारे में गंदा रहस्य यह है कि यह एक बहुत ही प्रभावी ईटीएल ढांचा है (इसलिए यह मूर्खतापूर्ण है कि ईटीएल विक्रेता अपने उपकरण का उपयोग करने के बारे में बात करते हैं ताकि डेटा को हडोप पर/धक्का दिया जा सके)। कैस्केडिंग कुछ हद तक इस दर्द को आसान बनाता है जिससे आप अपने ऑपरेशन, एप्लिकेशन और यूनिट परीक्षण को एकीकरण अंत-बिंदुओं से स्वतंत्र लिख सकते हैं। व्यापक Membase, Memcached, एस्टर डाटा, लचीला खोज, HBase, Hypertable, कैसेंड्रा, आदि जैसे सिस्टम लोड करने के लिए उत्पादन में प्रयोग किया जाता है कृपया (दुर्भाग्य नहीं सभी एडेप्टर उनके लेखकों द्वारा जारी किया गया है।)

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

+0

धन्यवाद, महान जवाब क्रिस। मुझे हडोप के बारे में बिंदु विशेष रूप से एक ईटीएल ढांचे के रूप में पसंद है ... –

+0

क्या आप शुद्ध कैस्केडिंग का उपयोग कब और कैस्कलॉग या स्केलिंग का उपयोग करने के बारे में कुछ विचार दे सकते हैं? सादा Casacading पर Cascalog या Scalding का कोई फायदा है? – Shekhar

6

मैंने एक बड़े सोशल नेटवर्क के लिए पूर्ण एंटी-स्पैम लिंक वर्गीकरण पाइपलाइन लिखने के लिए बिक्सो के साथ कैस्केडिंग का उपयोग किया।

कैस्केडिंग पाइपलाइन के परिणामस्वरूप 27 एमआर नौकरियां हुईं, जो सादे एमआर में बनाए रखना बहुत कठिन होता। मैंने पहले एमआर नौकरियां लिखी हैं, लेकिन कैस्केडिंग जैसे कुछ का उपयोग असेंबलर से जावा (insert_fav_language_here) में स्विच करने जैसा लगता है।

हाइव या पिग आईएमएचओ पर बड़े फायदों में से एक यह है कि कैस्केडिंग एक सिंगल जार है, जिसे आप अपने काम के साथ बंडल करते हैं। सुअर और हाइव में अधिक निर्भरताएं (उदा। MySQL) हैं या एम्बेड करने में आसान नहीं हैं।

अस्वीकरण: जबकि मैं व्यक्तिगत रूप से क्रिस वेन्सल को जानता हूं, मुझे लगता है कि कैस्केडिंग ** को लात मारता है। इसकी जटिलता को ध्यान में रखते हुए यह बेहद प्रभावशाली है कि मुझे इसका उपयोग करके एक भी बग नहीं मिला है।

2

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

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

6

मैं स्केल असीमित के लिए हैडोप बूट कैंप कोर्स पढ़ता हूं, और बिक्सो में कैस्केडिंग का व्यापक उपयोग भी करता हूं और बिक्सो लैब्स में वेब खनन ऐप्स बनाने के लिए - इसलिए मुझे लगता है कि मुझे दोनों दृष्टिकोणों के लिए अच्छी प्रशंसा मिली है।

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

कैस्केडिंग के साथ सबसे बड़ी चुनौती यह है कि यह डेटा प्रोसेसिंग वर्कफ़्लोज़ के बारे में सोचने का एक अलग तरीका है, और एक समान वैचारिक "कूबड़" है जिसे आपको समझने से पहले खत्म होने की आवश्यकता है। प्लस त्रुटि संदेश ("पारी में संघर्ष/कम करने") लेक्स/याक से उत्पादन में से एक याद दिला सकता है :)

- केन

1

मैं वर्ष की जोड़ी के लिए व्यापक पर काम किया और नीचे useful things in cascading हैं।

1. code testability 
2. easy integration with other tools 
3. easily extensibile 
4. you will focus only on business logic not on keys and values 
5. proven in production and used by even twitter. 

मैं लोगों को अधिकांश बार कैस्केडिंग का उपयोग करने की सलाह देता हूं।

0

कैस्केडिंग हैडोप के चारों ओर एक रैपर है जो हडोप से और उसके लिए टैप्स और सिंक प्रदान करता है।

लेखन आपके सभी कार्यों के लिए मैपर और रेड्यूसर लिखना कठिन हो जाएगा। एक कैस्केडिंग नौकरी लिखने का प्रयास करें और फिर आप किसी भी मैपर और reducers लिखने से बचने के लिए तैयार हैं।

आप भी कैस्केडिंग टैप्स और स्कीम देखना चाहते हैं (इस प्रकार आप अपने कैस्केडिंग प्रोसेसिंग जॉब में डेटा इनपुट करते हैं)।

इन दोनों के साथ, यानी रेड्यूकर्स के साथ विज्ञापन-हॉक हडोप मैपर लिखने से बचने की क्षमता और डेटा स्रोतों की एक विस्तृत विविधता का उपभोग करने की क्षमता, आप अपने बहुत से डेटा प्रोसेसिंग को बहुत तेज और प्रभावी हल कर सकते हैं।

कैस्केडिंग हैडूप के आसपास बस एक साधारण आवरण से अधिक है, मैं जवाब को सरल रखने की कोशिश कर रहा हूं। उदाहरण के लिए, मैंने एक विशाल mysql डेटाबेस पोर्ट किया है जिसमें कैस्केडिंग जेडीबीसी टैप

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