MapReduce беше модел, въведен от Google като метод за решаване на клас проблеми с големи данни с големи клъстери от евтини машини. Hadoop поглъща този модел в ядрото на своя работен процес. Тази статия дава въвеждаща представа за модела MapReduce, използван от Hadoop за решаване на проблема с големи данни.
Общ преглед
Типичното приложение за големи данни се занимава с голям набор от мащабируеми данни. Използването на единна база данни за съхранение и извличане може да бъде основно затруднение при обработката. Това е особено вярно, ако използваме монолитна база данни за съхраняване на огромно количество данни, както можем да видим при релационните бази данни и как те се използват като едно хранилище. Това няма да работи, особено трябва да работим с големи набори от данни в разпределена среда.
Google използва алгоритъма MapReduce, за да се справи със ситуацията и излезе с решение. Идеята е да се раздели по-голямата задача на по-малки управляеми части и да се разпределят между компютрите в мрежата за обработка. Така полученият резултат се интегрира за формиране на крайния набор от данни. Тази идея стана основата на проекта Hadoop на Дъг Кътинг. Hadoop използва този алгоритъм за обработка на данни успоредно с други, за да предостави пълен статистически анализ на големи набори от данни. Следователно Hadoop може да бъде разделен грубо на две части:
- Обработка: Използва се от алгоритъма MapReduce
- Съхранение: Използва се от HDFS
Следователно Hadoop MapReduce е реализация на алгоритъма, разработен и поддържан от проекта Apache Hadoop. Той работи като машина сама по себе си, където ние предоставяме вход и двигателят реагира, като преобразува входа в изход бързо и ефективно, обработвайки през множество етапи. Тази откровено опростена идея се нуждае от малко доработка, тъй като следва надолу.
MapReduce
MapReduce е модел за паралелно програмиране, използван за бърза обработка на данни в среда на разпределено приложение. Той работи върху набори от данни (много терабайти данни), разпределени в клъстери (хиляди възли) в мрежата за суровини. Програмите MapReduce работят на Hadoop и могат да бъдат написани на множество езици – Java, C++, Python и Ruby. Основната характеристика на програмата MapReduce е, че тя по своята същност е внесла духа на паралелизъм в програмите. Това го прави идеален за мащабен анализ на данни, който може да използва модела на паралелизъм в своята практика, за да изтръгне резултатите по-ефективно и бързо от съществуваща инфраструктура.
Как работи
Hadoop MapReduce разделя задачите на множество етапи, всеки със значителен набор от функции за извличане на желания резултат от големите данни. Той работи на възли в клъстер, хостван на колекция от сървъри за стоки. Процесът започва с потребителската заявка, която стартира механизма MapReduce, и завършва с съхраняване на резултата обратно в HDFS.
Можем да инициираме работа на MapReduce за изпълнение, като извикаме JobClient.runJob(conf) метод. Това е удобен метод за създаване на нов JobClient екземпляр. Това от своя страна извиква submitJob() и анкетира напредъка на заданието всяка секунда и отчита обратно на конзолата, ако има някаква промяна след генерирането на последния отчет. Това има ефект на вълни и задейства набор от операции зад кулисите. Първата стъпка е да намерите и прочетете входния файл, който съдържа необработените данни. Форматът на файла е произволен и трябва да бъде преобразуван във формат, подходящ за обработка. Това е работата за InputFormat и RecordReader(RR) . InputFormat използва функцията, наречена InputSplit за да разделите файла на по-малки части. RecorReader(RR) след това преобразува необработените данни и ги прави достъпни за обработка от карта .
Картографиране
След като данните са приемливи за картографиране, той създава отделен екземпляр за всяка входна двойка (ключ и стойност) и започва обработка. Веднага щом функцията за съпоставяне започне да произвежда изход, той не се записва директно на диска; вместо това се съхранява в буфера на паметта, за да се извърши предварително сортиране. Всяка карта поддържа кръгов буфер, където пренасочва изхода. При превишаване на размера на прага, разливането на съдържание се записва обратно на диска. Освен това разделя данните на дялове, приемливи за редуктора, към който данните се пренасочват след това. Всички тези работи обаче се извършват по едновременен начин на множество възли в клъстера Hadoop. След завършване на задачите за карта, междинните резултати се натрупват в дяла и се извършват разбъркване и сортиране, за да се оптимизира изходът, за да се намали, за да поеме като вход.
Намаляване и обединяване
Това, което намалява, също е двойка ключ, стойност и действа по подобен начин като картата. Той събира изхода на картата от няколко задачи на картата в клъстера и започва обработка само след като картографирането приключи. Той има набор от нишки за копирна машина за сливане и прехвърляне на изхода, предоставен от картата, на диска. Тъй като копията се натрупват на диска, фоновата нишка върши работата по обединяването им в по-големи, сортирани файлове. Той също така предоставя изхода под формата на двойка ключ, стойност и може да се наложи да бъде преформатиран от OutputFormat преди приложението да може да приеме формата. Изходен формат накрая взема двойката ключ, стойност и записва обратно обработените данни в HDFS. Тук RecordWriter играе основната роля, подобно на RecordReader , с изключение на това, че участва при четене от HDFS в началото.
Заключение
Това е само върхът на айсберга. Има много сложни детайли и много повече се случва зад кулисите. Накратко, Hadoop MapReduce предоставя възможностите за разбиване на големи данни на по-малки, управляеми части, паралелна обработка в разпределен клъстер и накрая, предоставяне на данните за консумация или допълнителна обработка. Hadoop днес се превърна в по-голяма екосистема от инструменти и технологии за решаване на острите проблеми с големи данни и се развива бързо, за да усъвършенства своите функции.