2015-04-14 8 views
6

मैं स्पार्क स्ट्रीमिंग में एक (सरलीकृत) समस्या को हल करने की कोशिश कर रहा हूं: मान लीजिए कि मेरे पास उपयोगकर्ताओं द्वारा बनाई गई घटनाओं का एक लॉग है, जहां प्रत्येक घटना एक टुपल (उपयोगकर्ता नाम, गतिविधि, समय) है, उदाहरण:क्या स्पार्क स्ट्रीमिंग नौकरी की स्थिति में लाखों कुंजी को दो महीने तक रखना संभव है?

("user1", "view", "2015-04-14T21:04Z") 
("user1", "click", "2015-04-14T21:05Z") 

अब मैं उपयोगकर्ता द्वारा कुछ विश्लेषण करने के लिए ईवेंट इकट्ठा करना चाहता हूं। घटनाओं भी 2 महीने के लिए रखा जाना चाहिए

("user1", List(("view", "2015-04-14T21:04Z"),("click", "2015-04-14T21:05Z")) 

: मान लें कि उत्पादन का विश्लेषण में है। उस समय के दौरान 500 मिलियन ऐसी घटनाओं के बारे में हो सकता है, और लाखों अद्वितीय उपयोगकर्ता, जो यहां कुंजी हैं।

मेरे प्रश्न हैं:

  • यह updateStateByKey DStream पर साथ ऐसा करना संभव है, जब मैं कुंजी के लाखों लोगों संग्रहीत है?
  • क्या मैं सही हूं कि DStream.window यहां कोई उपयोग नहीं है, जब मेरे पास 2 महीने की लंबाई खिड़की है और कुछ सेकंड की स्लाइड लेना चाहेंगे?

पीएस मुझे पता चला कि updateStateByKey प्रत्येक स्लाइड पर सभी चाबियों पर कॉल किया जाता है, इसका मतलब है कि इसे हर कुछ सेकंड में लाखों बार कहा जाएगा।

  • राज्य
  • ट्राइडेंट राज्य का उपयोग के लिए कैसेंड्रा का उपयोग कर (कैसेंड्रा शायद के साथ)
  • अपने राज्य प्रबंधन के साथ Samza का उपयोग कर: यह मुझे इस डिजाइन में शक और मैं नहीं बल्कि वैकल्पिक समाधान के बारे में सोच रहा हूँ की तरह बना देता है।
+0

मेरे पास इसके बारे में एक बहुत ही सटीक सवाल है, बस एक त्वरित शोध करें और कुछ अंक प्राप्त करें 1) स्पार्क राज्य अपडेट करने पर अपना रास्ता सुधारता है https://databricks.com/blog/2016/02/01/faster-stateful- स्ट्रीम-प्रसंस्करण-इन-स्पार्क-स्ट्रीमिंग.html 2) ऐसा लगता है कि अगर आप samza https://samza.apache.org/learn/documentation/0.10/comparisons/spark-streaming.html का उपयोग करते हैं तो यह आपके उपयोग के मामले में अधिक फिट बैठता है, वैसे भी, आप इसे कैसे कार्यान्वित करते हैं? चूंकि सवाल काफी पुराना है, मुझे लगता है कि आप एक समाधान – rendybjunior

उत्तर

0

ऐसा लगता है कि आपको को क्षैतिज रूप से क्षीण करने वाली विंडो की आवश्यकता है।

आप उनके बारे में Rajaraman, Anand, and Jeffrey David Ullman. Mining of massive datasets. Cambridge University Press, 2011. में पढ़ सकते हैं, कार्यान्वयन विवरण के लिए धारा 4.7 और विशेष रूप से धारा 4.7.3 देखें।

1

मुझे लगता है कि यह इस बात पर निर्भर करता है कि आप भविष्य में डेटा कैसे क्वेरी करते हैं। मेरे पास समान परिदृश्य हैं। मैंने अभी मैप पार्टिशन के माध्यम से परिवर्तन किया है और बाईकी को कम किया है और डेटा को कैसंद्रा में स्टोर किया है।

+0

के साथ समाप्त हो सकते हैं क्या आप कृपया अपने उत्तर का समर्थन करने के लिए दस्तावेज के लिए कुछ कोड या लिंक प्रदान कर सकते हैं? – Suever

+0

KafkaUtils.createDirectStream [स्ट्रिंग, स्ट्रिंग, StringDecoder, StringDecoder] ( एसएससी, मानचित्र ("auto.offset.reset" -> "सबसे बड़ी", "auto.commit.enable" -> "गलत", "मेटाडेटा .broker.list "->" ?? " ), सेट (" ?? ") )। mapPartitions (विभाजन => { विभाजन।नक्शा (टपल => { // आपके परिवर्तन }) })। reduceByKey ((मान 1, मान 2) => { // आंकड़ों के एक टाइमस्टैम्प का आवंटन और उन्हें सेल्सियस के लिए * }) की दुकान डेटा पूछते समय, आप टाइमस्टैम्प की एक श्रृंखला से खोज सकते हैं – Grant

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