३.१ BigData या संज्ञेच्या उदयाचा इतिहास

बिग डेटा हा शब्द तुलनेने अलीकडे दिसून आला. Google Trends 2011 पासून वाक्यांशाच्या वापरामध्ये सक्रिय वाढीची सुरुवात दर्शवते :

त्याच वेळी, आता फक्त आळशी हा शब्द वापरत नाही. विशेषतः अनेकदा, हा शब्द विक्रेत्यांद्वारे अयोग्यपणे वापरला जातो. मग बिग डेटा म्हणजे नेमकं काय? मी पद्धतशीरपणे मुद्दा मांडण्याचा आणि हायलाइट करण्याचा निर्णय घेतल्याने, संकल्पना परिभाषित करणे आवश्यक आहे.

माझ्या सरावात, मला वेगवेगळ्या व्याख्या मिळाल्या:

  • बिग डेटा म्हणजे 100GB पेक्षा जास्त डेटा (500GB, 1TB, तुम्हाला आवडेल तो).
  • बिग डेटा हा डेटा आहे ज्यावर एक्सेलमध्ये प्रक्रिया केली जाऊ शकत नाही.
  • बिग डेटा हा डेटा आहे ज्यावर एकाच संगणकावर प्रक्रिया केली जाऊ शकत नाही.

आणि हे देखील:

  • बिग डेटा सामान्यतः कोणताही डेटा असतो.
  • बिग डेटा अस्तित्वात नाही, तो विपणकांनी शोधला होता.

मी विकिपीडियावरील व्याख्येला चिकटून राहीन:

बिग डेटा हा संगणक नेटवर्कच्या असंख्य नोड्सवर सतत वाढ, वितरणाच्या परिस्थितीत प्रभावी असणारे मानवी-ग्रहण करण्यायोग्य परिणाम मिळविण्यासाठी प्रचंड व्हॉल्यूम आणि लक्षणीय विविधतेच्या संरचित आणि असंरचित डेटावर प्रक्रिया करण्यासाठी पद्धती, साधने आणि पद्धतींची मालिका आहे. 2000 च्या दशकाच्या उत्तरार्धात, पारंपारिक डेटाबेस व्यवस्थापन प्रणाली आणि व्यवसाय बुद्धिमत्ता वर्ग सोल्यूशन्सचा पर्याय.

अशाप्रकारे, बिग डेटाद्वारे मला काही विशिष्ट प्रमाणात डेटा समजणार नाही आणि डेटा देखील नाही, परंतु त्यावर प्रक्रिया करण्याच्या पद्धती, ज्यामुळे माहितीच्या वितरित प्रक्रियेस परवानगी मिळते. या पद्धती मोठ्या डेटासेटवर लागू केल्या जाऊ शकतात (जसे की इंटरनेटवरील सर्व पृष्ठांची सामग्री) तसेच लहान डेटासेट (जसे की या व्याख्यानातील सामग्री).

मोठ्या डेटा तंत्रांची आवश्यकता असलेल्या डेटा स्रोत काय असू शकतात याची येथे काही उदाहरणे आहेत:

  • इंटरनेटवरील वापरकर्त्याच्या वर्तनाचे लॉग
  • वाहतूक कंपनीसाठी कारमधून GPS सिग्नल
  • लार्ज हॅड्रॉन कोलायडरमधील सेन्सरमधून घेतलेला डेटा
  • रशियन स्टेट लायब्ररीमध्ये डिजीटल पुस्तके
  • सर्व बँक ग्राहकांच्या व्यवहारांची माहिती
  • मोठ्या किरकोळ साखळीतील सर्व खरेदीची माहिती इ.

डेटा स्त्रोतांची संख्या झपाट्याने वाढत आहे, याचा अर्थ डेटा प्रोसेसिंग तंत्रज्ञानाची मागणी अधिक होत आहे.

3.2 मोठी डेटा तत्त्वे

बिग डेटाच्या व्याख्येवर आधारित, आम्ही अशा डेटासह कार्य करण्याचे मूलभूत तत्त्वे तयार करू शकतो:

1. क्षैतिज स्केलेबिलिटी. अनियंत्रितपणे मोठ्या प्रमाणात डेटा असू शकतो, कोणतीही प्रणाली ज्यामध्ये मोठ्या डेटावर प्रक्रिया करणे समाविष्ट आहे ते विस्तारण्यायोग्य असणे आवश्यक आहे. डेटाची मात्रा 2 पट वाढली - क्लस्टरमधील लोहाचे प्रमाण 2 पटीने वाढले आणि सर्व काही कार्य करत राहिले.

2. दोष सहिष्णुता. क्षैतिज स्केलेबिलिटीच्या तत्त्वाचा अर्थ असा होतो की क्लस्टरमध्ये अनेक मशीन असू शकतात. उदाहरणार्थ, Yahoo च्या Hadoop क्लस्टरमध्ये 42,000 पेक्षा जास्त मशीन्स आहेत (या लिंकवर तुम्ही सर्व संस्थांमध्ये क्लस्टर आकार पाहू शकता). याचा अर्थ यापैकी काही यंत्रे निकामी होण्याची हमी दिली जाईल. मोठ्या डेटा पद्धतींना या व्यत्ययांची जाणीव असणे आणि कोणत्याही महत्त्वपूर्ण परिणामांशिवाय ते टिकून राहणे आवश्यक आहे.

3. डेटा स्थानिकता. मोठ्या वितरण प्रणालींमध्ये, डेटा मोठ्या संख्येने मशीनवर वितरित केला जातो. जर डेटा भौतिकरित्या एका सर्व्हरवर स्थित असेल आणि दुसर्‍या सर्व्हरवर प्रक्रिया केली असेल, तर डेटा ट्रान्सफरची किंमत प्रक्रियेच्या खर्चापेक्षा जास्त असू शकते. म्हणून, बिगडेटा सोल्यूशन्स डिझाइन करण्यासाठी सर्वात महत्वाचे तत्त्वांपैकी एक म्हणजे डेटा लोकॅलिटीचे तत्त्व - शक्य असल्यास, आम्ही डेटा ज्या मशीनवर संग्रहित करतो त्याच मशीनवर प्रक्रिया करतो.

सर्व आधुनिक मोठी डेटा साधने या तीन तत्त्वांचे एक ना एक प्रकारे पालन करतात. त्यांचे अनुसरण करण्यासाठी, डेटा विकास साधने विकसित करण्यासाठी काही पद्धती, पद्धती आणि प्रतिमानांसह येणे आवश्यक आहे. आजच्या व्याख्यानात मी विश्‍लेषण करीन सर्वात क्लासिक पद्धतींपैकी एक.

3.3 MapReduce

MapReduce संगणक क्लस्टरवर मोठ्या प्रमाणात डेटा प्रक्रिया करण्यासाठी Google द्वारे प्रस्तावित वितरित डेटा प्रोसेसिंग मॉडेल आहे. MapReduce खालील चित्राद्वारे चांगले स्पष्ट केले आहे:

MapReduce असे गृहीत धरते की डेटा काही रेकॉर्डमध्ये आयोजित केला जातो. डेटा प्रोसेसिंग 3 टप्प्यात होते:

1. नकाशा स्टेज . या टप्प्यावर, डेटा मॅप() फंक्शन वापरून प्रीप्रोसेस केला जातो, जो वापरकर्त्याद्वारे परिभाषित केला जातो. या स्टेजचे काम डेटाची प्रीप्रोसेस आणि फिल्टर करणे आहे. हे ऑपरेशन फंक्शनल प्रोग्रामिंग भाषांमधील नकाशा ऑपरेशनसारखेच आहे - प्रत्येक इनपुट रेकॉर्डवर एक सानुकूल फंक्शन लागू केले जाते.

एका इनपुट रेकॉर्डवर लागू केलेले नकाशा() फंक्शन अनेक की-व्हॅल्यू जोड्या तयार करते. सेट - म्हणजे, ते फक्त एक रेकॉर्ड परत करू शकते, ते काहीही परत करू शकत नाही किंवा ते अनेक की-व्हॅल्यू जोड्या परत करू शकते. की आणि व्हॅल्यूमध्ये काय असेल ते वापरकर्त्यावर अवलंबून आहे, परंतु की ही एक अतिशय महत्त्वाची गोष्ट आहे, कारण भविष्यात एका कीसह डेटा रिड्यूफ फंक्शनच्या एका घटनेत येईल.

2. स्टेज शफल. हे वापरकर्त्याच्या लक्षात येत नाही. या स्टेजमध्ये, मॅप फंक्शनचे आउटपुट "बिन केलेले" आहे - प्रत्येक बिन नकाशा स्टेजच्या एका आउटपुट कीशी संबंधित आहे. भविष्यात, या टोपल्या कमी करण्यासाठी इनपुट म्हणून काम करतील.

3. स्टेज कमी. शफल स्टेजवर व्युत्पन्न केलेल्या मूल्यांसह प्रत्येक "बास्केट" रिड्यू() फंक्शनच्या इनपुटला मिळते.

रिड्यू फंक्शन वापरकर्त्याद्वारे दिले जाते आणि एकल "बास्केट" साठी अंतिम निकालाची गणना करते . reduce() फंक्शनद्वारे परत केलेल्या सर्व मूल्यांचा संच हा MapReduce कार्याचा अंतिम परिणाम आहे.

MapReduce बद्दल काही अतिरिक्त तथ्ये:

  1. मॅप फंक्शनच्या सर्व रन स्वतंत्रपणे कार्य करतात आणि वेगवेगळ्या क्लस्टर मशीनसह समांतरपणे चालू शकतात.
  2. रिड्यू फंक्शनचे सर्व रन स्वतंत्रपणे कार्य करतात आणि वेगवेगळ्या क्लस्टर मशीन्ससह समांतरपणे चालू शकतात.
  3. शफल आंतरिकरित्या समांतर क्रमवारी दर्शवते, म्हणून ते वेगवेगळ्या क्लस्टर मशीनवर देखील कार्य करू शकते. पॉइंट 1-3 तुम्हाला क्षैतिज स्केलेबिलिटीच्या तत्त्वाची अंमलबजावणी करण्यास अनुमती देतात .
  4. नकाशा फंक्शन सामान्यतः त्याच मशीनवर वापरले जाते जेथे डेटा संग्रहित केला जातो - यामुळे नेटवर्कवरील डेटाचे प्रसारण कमी होते (डेटा लोकॅलिटीचे तत्त्व).
  5. MapReduce हा नेहमी संपूर्ण डेटा स्कॅन असतो, तेथे कोणतेही निर्देशांक नसतात. याचा अर्थ असा की जेव्हा प्रतिसाद खूप लवकर आवश्यक असतो तेव्हा MapReduce खराबपणे लागू होते.

3.4 MapReduce सह प्रभावीपणे सोडवलेल्या कार्यांची उदाहरणे

शब्द संख्या

चला क्लासिक कार्यासह प्रारंभ करूया - शब्द गणना. कार्य खालीलप्रमाणे तयार केले आहे: दस्तऐवजांचा मोठा संग्रह आहे. कॉर्पसमध्ये किमान एकदा येणार्‍या प्रत्येक शब्दासाठी कॉर्पसमध्ये किती वेळा येतो याची गणना करणे हे कार्य आहे.

उपाय:

आमच्याकडे दस्तऐवजांचा मोठा संग्रह असल्याने, MapRreduce कार्यासाठी एक दस्तऐवज एक इनपुट रेकॉर्ड असू द्या. MapReduce मध्ये, आम्ही फक्त वापरकर्ता-परिभाषित फंक्शन्स परिभाषित करू शकतो, जे आम्ही करू (आम्ही पायथन सारखी स्यूडोकोड वापरू):

def map(doc): 
for word in doc: 
yield word, 1 
def reduce(word, values): 
yield word, sum(values) 

मॅप फंक्शन इनपुट डॉक्युमेंटला जोड्यांच्या संचामध्ये बदलते (शब्द, 1), आमच्यासाठी पारदर्शकपणे फेरफार केल्याने ते जोड्यांमध्ये बदलते (शब्द, [1,1,1,1,1,1]), ही बेरीज कमी करते , परत येते शब्दासाठी अंतिम उत्तर.

जाहिरात प्रणाली लॉगवर प्रक्रिया करत आहे

दुसरे उदाहरण डेटा-केंद्रित युतीच्या वास्तविक सरावातून घेतले आहे.

कार्य: फॉर्मच्या जाहिरात प्रणालीचा एक सीएसव्ही-लॉग आहे:

<user_id>,<country>,<city>,<campaign_id>,<creative_id>,<payment></p> 
 
11111,RU,Moscow,2,4,0.3 
22222,RU,Voronezh,2,3,0.2 
13413,UA,Kyiv,4,11,0.7 
… 

रशियाच्या शहरांमध्ये जाहिराती प्रदर्शित करण्याच्या सरासरी खर्चाची गणना करणे आवश्यक आहे.

उपाय:

def map(record): 
user_id, country, city, campaign_id, creative_id, payment = record.split(",") 
payment=float(payment) 
if country == "RU": 
yield city, payment 
def reduce(city, payments): 
yield city, sum(payments)/len(payments) 

नकाशा फंक्शन आम्हाला या एंट्रीची आवश्यकता आहे का ते तपासते - आणि जर आम्ही तसे केले तर ते फक्त आवश्यक माहिती (शहर आणि देय रक्कम) सोडते. रिड्यू फंक्शन त्या शहरातील सर्व पेमेंटची यादी दिल्यास शहरासाठी अंतिम उत्तराची गणना करते.