2010-05-21 10 views
9

हे सब, बस Hadoop और उत्सुक mapreduce में सबसे अच्छा तरीका है अगर आपके लॉगफ़ाइल इस तरह देखा अद्वितीय विज़िटर की गणना करने के लिए किया जाएगा क्या पर शुरू हो रही है ...हडोप के साथ अद्वितीय आगंतुकों को गिनने का सबसे अच्छा तरीका क्या है?

DATE  siteID action username 
05-05-2010 siteA pageview jim 
05-05-2010 siteB pageview tom 
05-05-2010 siteA pageview jim 
05-05-2010 siteB pageview bob 
05-05-2010 siteA pageview mike 

और प्रत्येक साइट आप पता लगाने के लिए करना चाहता था के लिए प्रत्येक साइट के लिए अद्वितीय आगंतुकों?

मैं सोच रहा था कि मैपर साइट आईडी \ टी उपयोगकर्ता नाम उत्सर्जित करेगा और reducer प्रति कुंजी अद्वितीय उपयोगकर्ता नामों का एक सेट() रखेगा और फिर उस सेट की लंबाई को उत्सर्जित करेगा। हालांकि यह स्मृति में लाखों उपयोगकर्ता नामों को संभावित रूप से संग्रहीत करेगा जो सही नहीं लगता है। किसी के पास एक बेहतर तरीका है?

मैं जिस तरह से अजगर स्ट्रीमिंग का उपयोग कर रहा हूँ

धन्यवाद

उत्तर

3

आप एक 2-मंच संचालन के रूप में यह कर सकता है:

प्रथम चरण, फेंकना (username => siteID), और कम करने के लिए है बस कई पतन set का उपयोग करके साइटआईडी की घटनाएं - चूंकि आपके पास आम तौर पर उपयोगकर्ताओं की तुलना में बहुत कम साइटें होती हैं, यह ठीक होना चाहिए।

फिर दूसरे चरण में, आप (siteID => username) उत्सर्जित कर सकते हैं और डुप्लिकेट हटा दिए जाने के बाद से एक साधारण गणना कर सकते हैं।

1

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

यहां कुछ documentation है।

1

मेरे aproach समान है क्या tzaman एक छोटा सा मोड़ के साथ दिया

  1. नक्शा उत्पादन: (उपयोगकर्ता नाम, siteid) => ("")
  2. उत्पादन को कम: (siteid) => (1)
  3. नक्शा: पहचान नक्शाकार
  4. को कम: longsumreducer (यानी बस संक्षेप में प्रस्तुत)

ध्यान दें कि पहले को कम आर के किसी भी पर जाने के लिए की जरूरत नहीं है पारिवारिक प्रस्तुत किया जाता है। आप बस कुंजी की जांच कर सकते हैं और आउटपुट का उत्पादन कर सकते हैं।

HTH

0

यह अक्सर तेजी से होता है कई सरल कार्य सॉर्ट करने के लिए HiveQL उपयोग करने के लिए। हाइव आपके प्रश्नों को हडोप मैपरेडस में अनुवादित करेगा। इस मामले में आप उपयोग कर सकते हैं

SELECT COUNT(DISTINCT username) FROM logviews 

आप एक और अधिक उन्नत उदाहरण यहां मिल सकता है: http://www.dataminelab.com/blog/calculating-unique-visitors-in-hadoop-and-hive/

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