3.1 История на появата на термина BigData

Терминът Big Data се появи сравнително наскоро. Google Trends показва началото на активен растеж в използването на фразата от 2011 г. насам:

В същото време само мързеливият не използва термина сега. Особено често терминът се използва неподходящо от търговците. И така, Howво всъщност е Big Data? Тъй като реших систематично да изложа и подчертая проблема, е необходимо да дефинирам понятието.

В моята практика се срещнах с различни определения:

  • Big Data е, когато има повече от 100GB данни (500GB, 1TB, Howвото искате).
  • Big Data са данни, които не могат да бъдат обработени в Excel.
  • Big Data са данни, които не могат да бъдат обработени на един компютър.

И дори тези:

  • Големите данни обикновено са всяHowви данни.
  • Големи данни не съществуват, те са измислени от търговци.

Ще се придържам към определението от wikipedia:

Големите данни са поредица от подходи, инструменти и методи за обработка на структурирани и неструктурирани данни с огромни обеми и значително разнообразие, за да се получат възприемани от човека резултати, които са ефективни в условия на непрекъснат растеж, разпространение в множество възли на компютърна мрежа, формирана в края на 2000-те години, алтернатива на традиционните системи за управление на бази данни и решения от клас бизнес разузнаване.

Така под Big Data ще разбирам не няHowво конкретно количество данни и дори не самите данни, а методи за тяхната обработка, които позволяват разпределена обработка на информация. Тези методи могат да се прилагат към големи масиви от данни (като съдържанието на всички страници в Интернет), Howто и към малки набори от данни (като съдържанието на тази лекция).

Ето няколко примера за това Howво може да бъде източник на данни, който изисква техники за големи данни:

  • Дневници на потребителското поведение в интернет
  • GPS сигнали от автомобor за транспортна фирма
  • Данни, взети от сензори в Големия адронен колайдер
  • Дигитализирани книги в Руската държавна библиотека
  • Информация за транзакции на всички клиенти на банката
  • Информация за всички покупки в голяма търговска верига и др.

Броят на източниците на данни нараства бързо, което означава, че технологиите за обработка на данни стават все по-търсени.

3.2 Принципи на големите данни

Въз основа на определението за големи данни можем да формулираме основните принципи на работа с такива данни:

1. Хоризонтална мащабируемост. Тъй като може да има произволно голямо количество данни, всяка система, която включва обработка на големи данни, трябва да бъде разширяема. Обемът на данните се увеличи 2 пъти - количеството желязо в клъстера беше увеличено 2 пъти и всичко продължи да работи.

2. Устойчивост на грешки. Принципът на хоризонталната мащабируемост предполага, че в клъстер може да има много машини. Например Hadoop клъстерът на Yahoo има над 42 000 машини (можете да видите размерите на клъстерите в организациите на тази връзка). Това означава, че някои от тези машини ще се провалят гарантирано. Практиките за големи данни трябва да са наясно с тези смущения и да ги преживеят без значителни последствия.

3. Локалност на данните. В големите разпределени системи данните се разпределят между голям брой машини. Ако данните се намират физически на един сървър и се обработват на друг, разходите за трансфер на данни може да надвишат разходите за самата обработка. Ето защо, един от най-важните принципи за проектиране на BigData решения е принципът за локалност на данните – ако е възможно, обработваме данните на същата машина, на която ги съхраняваме.

Всички съвременни инструменти за големи данни следват тези три принципа по един or друг начин. За да ги следваме, е необходимо да се измислят някои методи, методи и парадигми за разработване на инструменти за разработка на данни. Един от най-класическите методи ще анализирам в днешната лекция.

3.3 MapReduce

MapReduce е модел за разпределена обработка на данни, предложен от Google за обработка на големи количества данни в компютърни клъстери. MapReduce е добре илюстриран от следната снимка:

MapReduce предполага, че данните са организирани в някои записи. Обработката на данните се извършва на 3 етапа:

1. Етап на картата . На този етап данните се обработват предварително с помощта на функцията map(), която се дефинира от потребителя. Работата на този етап е предварителна обработка и филтриране на данните. Операцията е много подобна на операцията с карта във функционалните езици за програмиране - персонализирана функция се прилага към всеки входен запис.

Функцията map(), приложена към един входен запис, създава много двойки ключ-стойност. Set - тоест може да върне само един запис, може да не върне нищо or може да върне няколко двойки ключ-стойност. Какво ще бъде в ключа и в стойността зависи от потребителя, но ключът е много важно нещо, тъй като данните с един ключ в бъдеще ще попадат в един екземпляр на функцията за намаляване.

2. Сценично разбъркване. Това остава незабелязано от потребителя. В този етап изходът на функцията на картата е "групиран" - всеки бин съответства на един изходен ключ на етапа на картата. В бъдеще тези кошници ще служат като вход за намаление.

3. Етап Намаляване. Всяка "кошница" със стойности, генерирани на етапа на разбъркване, стига до входа на функцията reduce().

Функцията за намаляване се задава от потребителя и изчислява крайния резултат за една "кошница" . Наборът от всички стойности, върнати от функцията reduce(), е крайният резултат от задачата MapReduce.

Някои допълнителни факти за MapReduce:

  1. Всички изпълнения на функцията за карта работят независимо и могат да работят паралелно, включително на различни клъстерни машини.
  2. Всички изпълнения на функцията за намаляване работят независимо и могат да работят паралелно, включително на различни клъстерни машини.
  3. Shuffle вътрешно представлява паралелно сортиране, така че може да работи и на различни клъстерни машини. Точки 1-3 ви позволяват да приложите принципа на хоризонтална мащабируемост .
  4. Функцията map обикновено се използва на същата машина, където се съхраняват данните - това намалява предаването на данни по мрежата (принципът на локализация на данните).
  5. MapReduce винаги е пълно сканиране на данни, няма индекси. Това означава, че MapReduce е слабо приложим, когато се изисква много бърз отговор.

3.4 Примери за задачи, ефективно решени с MapReduce

Брой думи

Да започнем с класическата задача – Броене на думи. Задачата е формулирана по следния начин: има голям корпус от documentи. Задачата е да се изчисли общият брой пъти, които тя се среща в корпуса за всяка дума, която се среща поне веднъж в корпуса.

Решение:

Тъй като имаме голям корпус от documentи, нека един document бъде един входен запис за задачата MapRreduce. В MapReduce можем да дефинираме само дефинирани от потребителя функции, което ще направим (ще използваме подобен на Python псевдоcode):

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

Функцията map превръща входния document в набор от двойки (дума, 1), разбъркването прозрачно за нас го превръща в двойки (дума, [1,1,1,1,1,1]), намалява сумите тези, връщайки окончателният отговор за думата.

Обработка на рекламни системни регистрационни файлове

Вторият пример е взет от реалната практика на Data-Centric Alliance.

Задача: има csv-дневник на рекламната система на формата:

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

Функцията за карта проверява дали имаме нужда от този запис - и ако имаме, оставя само необходимата информация (град и сума на плащането). Функцията за намаляване изчислява крайния отговор за даден град, даден списък на всички плащания в този град.