2017-04-24 19 views
16

Apache Beam अपाचे स्पार्क और फ्लिंक सहित कई धावक बैकएंड का समर्थन करता है। मैं स्पार्क/फ्लिंक से परिचित हूं और मैं बैच प्रोसेसिंग के लिए बीम के पेशेवरों/विपक्ष को देखने की कोशिश कर रहा हूं।बैच प्रोसेसिंग के लिए स्पार्क/फ्लिंक पर अपाचे बीम के क्या फायदे हैं?

Beam word count example पर देखकर, ऐसा लगता है कि यह मूल स्पार्क/फ्लिंक समकक्षों के समान ही है, शायद थोड़ा और वर्बोज सिंटैक्स के साथ।

मुझे वर्तमान में इस तरह के कार्य के लिए स्पार्क/फ्लिंक पर बीम चुनने का बड़ा लाभ नहीं दिख रहा है। केवल एक ही अवलोकन जो मैं अब तक कर सकता हूं:

  • प्रो: विभिन्न निष्पादन बैकएंड पर एब्स्ट्रक्शन।
  • कॉन: यह अमूर्त स्पार्क/फ्लिंक में वास्तव में निष्पादित किए जाने पर कम नियंत्रण रखने की कीमत पर आता है।

क्या बेहतर उदाहरण हैं जो बीम मॉडल के अन्य पेशेवरों/विपक्ष को उजागर करते हैं? क्या नियंत्रण की हानि प्रदर्शन को प्रभावित करती है इस बारे में कोई जानकारी है?

ध्यान दें कि मैं स्ट्रीमिंग पहलुओं में अंतर की मांग नहीं कर रहा हूं, जो आंशिक रूप से this question में शामिल हैं और this article (स्पार्क 1.X के कारण पुराना) में संक्षेप में सारांशित हैं।

उत्तर

20

कुछ ऐसी चीजें हैं जो बीम कई मौजूदा इंजनों में जोड़ती हैं।

  • बैच और स्ट्रीमिंग को एकीकृत करना। कई सिस्टम बैच और स्ट्रीमिंग दोनों को संभाल सकते हैं, लेकिन वे अक्सर अलग-अलग एपीआई के माध्यम से ऐसा करते हैं। लेकिन बीम में, बैच और स्ट्रीमिंग विलंबता, पूर्णता और लागत के स्पेक्ट्रम पर केवल दो अंक हैं। स्ट्रीमिंग के लिए बैच से कोई सीखना/पुनर्लेखन क्लिफ नहीं है। तो यदि आप आज बैच पाइपलाइन लिखते हैं लेकिन कल आपकी विलंबता को बदलने की जरूरत है, तो यह समायोजित करने के लिए अविश्वसनीय रूप से आसान है। आप इस तरह की यात्रा Mobile Gaming examples में देख सकते हैं।

  • एपीआई कि अमूर्त के स्तर को बढ़ा: बीम के API आपके डेटा और आपके तर्क के गुणों पर कब्जा करने के बजाय के माध्यम से अंतर्निहित क्रम रिसाव का ब्यौरा दे पर ध्यान केंद्रित। यह पोर्टेबिलिटी के लिए दोनों कुंजी है (अगले पैराग्राफ देखें) और रनटाइम्स को निष्पादित करने में बहुत लचीलापन भी दे सकता है। ParDo संलयन (उर्फ फ़ंक्शन संरचना) की तरह कुछ एक सुंदर बुनियादी अनुकूलन है कि धावकों का विशाल बहुमत पहले से ही करता है। कुछ धावकों के लिए अभी भी अन्य अनुकूलन लागू किए जा रहे हैं। उदाहरण के लिए, बीम का Source APIs विशेष रूप से पाइपलाइन के भीतर शेडिंग ओवरस्पेसिफिकेशन से बचने के लिए बनाया गया है। इसके बजाए, वे धावक को उपलब्ध मशीनों में गतिशील रूप से पुनर्विक्रय करने के लिए सही हुक देते हैं। यह अनिवार्य रूप से straggler shards को खत्म करके प्रदर्शन में एक बड़ा अंतर कर सकते हैं। आम तौर पर, जितना अधिक स्मारक हम धावकों में बना सकते हैं, उतना बेहतर हम होंगे। डेटा, कोड और वातावरण शिफ्ट के रूप में भी सबसे सावधान हाथ ट्यूनिंग विफल हो जाएगी।

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

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

  • Keyed State विभिन्न इंजनों में मौजूद कार्यक्षमता का एक शानदार उदाहरण है और दिलचस्प और सामान्य उपयोग के मामलों को सक्षम करता है, लेकिन मूल रूप से बीम में स्पष्ट नहीं था। बीम के design principles के अनुसार हमने हाल ही में बीम मॉडल का विस्तार इस कार्यक्षमता के संस्करण को शामिल करने के लिए किया है।
  • और इसके विपरीत, हम उम्मीद करते हैं कि बीम विभिन्न इंजनों के रोडमैप को भी प्रभावित करेगा। उदाहरण के लिए, बीम (नी डेटाफ्लो) मॉडल द्वारा फ्लिंक के डेटास्ट्रीम के अर्थशास्त्र influenced थे।
  • इसका यह भी अर्थ है कि समय पर किसी दिए गए बिंदु पर विभिन्न बीम धावकों में क्षमताएं बिल्कुल समान नहीं होंगी। इसलिए हम चीजों की स्थिति को स्पष्ट रूप से संवाद करने की कोशिश करने के लिए capability matrix का उपयोग कर रहे हैं।
संबंधित मुद्दे