3.1 Kasaysayan ng paglitaw ng terminong BigData

Ang terminong Big Data ay lumitaw kamakailan lamang. Ipinapakita ng Google Trends ang simula ng aktibong paglago sa paggamit ng parirala mula noong 2011:

At the same time, ang tamad lang ang hindi gumagamit ng term ngayon. Lalo na madalas, ang termino ay ginagamit nang hindi naaangkop ng mga marketer. Kaya ano ba talaga ang Big Data? Dahil nagpasya akong sistematikong sabihin at i-highlight ang isyu, kinakailangan na tukuyin ang konsepto.

Sa aking pagsasanay, nakilala ko ang iba't ibang mga kahulugan:

  • Ang Big Data ay kapag mayroong higit sa 100GB ng data (500GB, 1TB, kahit anong gusto mo).
  • Ang Big Data ay data na hindi mapoproseso sa Excel.
  • Ang Big Data ay data na hindi mapoproseso sa isang computer.

At maging ang mga ito:

  • Ang Big Data sa pangkalahatan ay anumang data.
  • Wala ang Big Data, naimbento ito ng mga marketer.

Mananatili ako sa kahulugan mula sa wikipedia:

Ang malaking data ay isang serye ng mga diskarte, tool at pamamaraan para sa pagproseso ng nakabalangkas at hindi nakabalangkas na data ng napakalaking dami at makabuluhang pagkakaiba-iba upang makakuha ng mga resulta na nakikita ng tao na epektibo sa mga kondisyon ng patuloy na paglaki, pamamahagi sa maraming mga node ng isang network ng computer, na nabuo. sa huling bahagi ng 2000s, alternatibo sa tradisyonal na database management system at business intelligence class solutions.

Kaya, sa pamamagitan ng Big Data ay mauunawaan ko hindi ang ilang partikular na halaga ng data at hindi ang data mismo, ngunit ang mga pamamaraan ng pagproseso ng mga ito, na nagpapahintulot sa ipinamahagi na pagproseso ng impormasyon. Maaaring ilapat ang mga pamamaraang ito sa malalaking dataset (gaya ng nilalaman ng lahat ng page sa Internet) pati na rin sa maliliit na dataset (gaya ng nilalaman ng lecture na ito).

Narito ang ilang halimbawa ng kung ano ang maaaring isang data source na nangangailangan ng malalaking diskarte sa data:

  • Mga tala ng pag-uugali ng gumagamit sa Internet
  • Mga signal ng GPS mula sa mga kotse para sa isang kumpanya ng transportasyon
  • Ang data na kinuha mula sa mga sensor sa Large Hadron Collider
  • Digitized na mga libro sa Russian State Library
  • Impormasyon tungkol sa mga transaksyon ng lahat ng mga customer sa bangko
  • Impormasyon tungkol sa lahat ng pagbili sa isang malaking retail chain, atbp.

Ang bilang ng mga pinagmumulan ng data ay mabilis na lumalaki, na nangangahulugan na ang mga teknolohiya sa pagpoproseso ng data ay lalong humihiling.

3.2 Mga prinsipyo ng malaking data

Batay sa kahulugan ng Big Data, maaari naming bumalangkas ng mga pangunahing prinsipyo ng pagtatrabaho sa naturang data:

1. Pahalang na scalability. Dahil maaaring magkaroon ng di-makatwirang malaking halaga ng data, ang anumang system na nagsasangkot ng pagproseso ng malalaking data ay dapat na mapalawak. Ang dami ng data ay nadagdagan ng 2 beses - ang dami ng bakal sa kumpol ay nadagdagan ng 2 beses at ang lahat ay patuloy na gumagana.

2. Fault tolerance. Ang prinsipyo ng pahalang na scalability ay nagpapahiwatig na maaaring mayroong maraming mga makina sa isang kumpol. Halimbawa, ang Hadoop cluster ng Yahoo ay mayroong mahigit 42,000 machine (maaari mong makita ang mga laki ng cluster sa mga organisasyon sa link na ito). Nangangahulugan ito na ang ilan sa mga makinang ito ay garantisadong mabibigo. Ang mga kasanayan sa malalaking data ay kailangang magkaroon ng kamalayan sa mga pagkagambalang ito at makaligtas sa mga ito nang walang anumang makabuluhang kahihinatnan.

3. Lokalidad ng data. Sa malalaking distributed system, ang data ay ipinamamahagi sa malaking bilang ng mga makina. Kung ang data ay pisikal na matatagpuan sa isang server at naproseso sa isa pa, ang mga gastos sa paglilipat ng data ay maaaring lumampas sa mga gastos sa mismong pagpoproseso. Samakatuwid, ang isa sa pinakamahalagang prinsipyo para sa pagdidisenyo ng mga solusyon sa BigData ay ang prinsipyo ng lokalidad ng data - kung maaari, pinoproseso namin ang data sa parehong makina kung saan namin ito iniimbak.

Sinusunod ng lahat ng modernong malaking data tool ang tatlong prinsipyong ito sa isang paraan o iba pa. Upang masundan ang mga ito, kinakailangan na makabuo ng ilang mga pamamaraan, pamamaraan at paradigma para sa pagbuo ng mga tool sa pagbuo ng data. Isa sa mga pinaka-klasikong pamamaraan na susuriin ko sa lecture ngayon.

3.3 MapReduce

Ang MapReduce ay isang distributed data processing model na iminungkahi ng Google para sa pagproseso ng malaking halaga ng data sa mga cluster ng computer. Ang MapReduce ay mahusay na inilalarawan ng sumusunod na larawan:

Ipinapalagay ng MapReduce na ang data ay nakaayos sa ilang talaan. Ang pagproseso ng data ay nangyayari sa 3 yugto:

1. Yugto ng mapa . Sa yugtong ito, ang data ay preprocessed gamit ang mapa() function, na tinukoy ng user. Ang gawain ng yugtong ito ay i-preprocess at i-filter ang data. Ang operasyon ay halos kapareho sa pagpapatakbo ng mapa sa mga functional programming language - isang custom na function ang inilalapat sa bawat input record.

Ang mapa() function na inilapat sa iisang input record ay gumagawa ng maraming key-value pairs. Itakda - iyon ay, maaari itong ibalik lamang ang isang tala, maaaring wala itong ibalik, o maaari itong magbalik ng ilang mga pares ng key-value. Ang magiging susi at ang halaga ay nasa gumagamit, ngunit ang susi ay isang napakahalagang bagay, dahil ang data na may isang susi sa hinaharap ay mahuhulog sa isang pagkakataon ng pagpapababa ng function.

2. Stage Shuffle. Ito ay hindi napapansin ng gumagamit. Sa yugtong ito, ang output ng function ng mapa ay "binned" - ang bawat bin ay tumutugma sa isang output key ng yugto ng mapa. Sa hinaharap, ang mga basket na ito ay magsisilbing input para mabawasan.

3. Stage Bawasan. Ang bawat "basket" na may mga value na nabuo sa shuffle stage ay napupunta sa input ng reduce() function.

Ang reduce function ay ibinibigay ng user at kinakalkula ang huling resulta para sa isang "basket" . Ang set ng lahat ng value na ibinalik ng reduce() function ay ang huling resulta ng MapReduce na gawain.

Ilang karagdagang katotohanan tungkol sa MapReduce:

  1. Ang lahat ng pagpapatakbo ng mapa function ay gumagana nang nakapag-iisa at maaaring tumakbo nang magkatulad, kabilang ang sa iba't ibang cluster machine.
  2. Ang lahat ng mga pagpapatakbo ng reduce function ay gumagana nang nakapag-iisa at maaaring tumakbo nang magkatulad, kabilang ang sa iba't ibang cluster machine.
  3. Ang shuffle sa loob ay kumakatawan sa isang parallel sort, kaya maaari din itong gumana sa iba't ibang cluster machine. Binibigyang-daan ka ng mga puntos 1-3 na ipatupad ang prinsipyo ng horizontal scalability .
  4. Ang function ng mapa ay karaniwang ginagamit sa parehong makina kung saan naka-imbak ang data - binabawasan nito ang pagpapadala ng data sa network (ang prinsipyo ng lokalidad ng data).
  5. Ang MapReduce ay palaging isang buong pag-scan ng data, walang mga index. Nangangahulugan ito na ang MapReduce ay hindi naaangkop kapag ang isang tugon ay kinakailangan nang napakabilis.

3.4 Mga halimbawa ng mga gawain na epektibong nalutas sa MapReduce

bilang ng salita

Magsimula tayo sa klasikong gawain - Bilang ng Salita. Ang gawain ay nabuo tulad ng sumusunod: mayroong isang malaking corpus ng mga dokumento. Ang gawain ay kalkulahin ang kabuuang bilang ng beses na nangyari ito sa corpus para sa bawat salita na nangyayari kahit isang beses sa corpus.

Solusyon:

Dahil mayroon kaming malaking corpus ng mga dokumento, hayaan ang isang dokumento na maging isang input record para sa MapRreduce na gawain. Sa MapReduce, maaari lamang nating tukuyin ang mga function na tinukoy ng gumagamit, na gagawin natin (gagamitin natin ang mala-python na pseudocode):

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

Ginagawa ng mapa function ang input na dokumento sa isang hanay ng mga pares (salita, 1), shuffle nang malinaw para sa amin ginagawa itong mga pares (salita, [1,1,1,1,1,1]), bawasan ang mga kabuuan ng mga ito, bumabalik ang huling sagot para sa salita.

Pagproseso ng mga log ng sistema ng advertising

Ang pangalawang halimbawa ay kinuha mula sa tunay na kasanayan ng Data-Centric Alliance.

Gawain: mayroong isang csv-log ng sistema ng advertising ng form:

<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 
… 

Kinakailangang kalkulahin ang average na halaga ng pagpapakita ng advertising sa mga lungsod ng Russia.

Solusyon:

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) 

Sinusuri ng function ng mapa kung kailangan namin ang entry na ito - at kung gagawin namin, nag-iiwan lamang ito ng kinakailangang impormasyon (lungsod at halaga ng pagbabayad). Kinakalkula ng reduce function ang huling sagot para sa isang lungsod na binigyan ng listahan ng lahat ng mga pagbabayad sa lungsod na iyon.