В тази статия за спекулативното изпълнение на MapReduce ще разгледате подробно спекулативното изпълнение на Hadoop. Ще научите какво е спекулативно изпълнение, каква е нуждата му, как можем да го активираме и деактивираме.
Статията също така обяснява дали е от полза или не и как работи.
Какво е спекулативно изпълнение в Hadoop?
Моделът MapReduce в рамката Hadoop разделя заданията на независими задачи и изпълнява тези задачи паралелно, за да намали общото време за изпълнение на заданието.
Това прави изпълнението на заданието чувствително към времето за бавно изпълняващите се задачи, тъй като само една бавна задача може да направи цялото време за изпълнение на заданието по-дълго от очакваното. Когато която и да е работа се състои от хиляди или стотици задачи, тогава възможността за няколкото затруднени задачи е много реална.
Задачите могат да бъдат бавни поради различни причини, като неправилна конфигурация на софтуера или влошаване на хардуера. Но причината, поради която работата се изпълнява бавно, е трудна за откриване, тъй като задачите все още завършват успешно, въпреки че отнема повече време от очакваното.
Рамката на Hadoop не се опитва да диагностицира или коригира бавно изпълняващите се задачи. Рамката се опитва да открие задачата, която работи по-бавно от очакваната скорост и стартира друга задача, която е еквивалентна задача като резервно копие.
Задачата за архивиране е известна като спекулативна задача, а този процес е известен като спекулативно изпълнение в Hadoop.
Каква е необходимостта от спекулативно изпълнение в Hadoop?
В рамката на Hadoop входният файл е разделен на множество блокове и тези блокове се съхраняват на различните възли в клъстера Hadoop.
Когато заданието MapReduce е изпратено от клиента, тогава той изчислява броя на InputSplits и изпълнява толкова картографи, колкото броя на InputSplit. Тези картографи (задачи за картографиране) работят паралелно на DataNodes, където се намират разделените данни.
Сега, какво ще стане, ако няколкото DataNode в клъстера Hadoop не изпълняват задачите толкова бързо, колкото другите DataNodes поради хардуерна повреда или проблеми с мрежата.
Така задачите за карти, които се изпълняват на тези DataNodes, ще бъдат по-бавни в сравнение със задачите за карти, които се изпълняват на другите DataNodes. Редукторът може да започне изпълнението си само когато са налични междинните изходи на всички картографи.
По този начин по-малкото бавно изпълнявани задачи на картата ще забавят изпълнението на редуктор.
Ако редукторът работи на по-бавния възел, това също ще забави крайния изход на цялата работа.
Така че, за да се предпази от подобни бавно изпълняващи се задачи, рамката на Hadoop стартира същата задача на другия възел. Тази оптимизация от рамката на Hadoop се нарича спекулативно изпълнение на задачата.
Как работи спекулативното изпълнение в Hadoop?
Спекулативното изпълнение не стартира двете дублиращи се задачи на всяка независима задача на дадена работа приблизително по едно и също време, за да могат да се състезават една с друга. Ако рамката го направи, това ще доведе до загуба на ресурсите на клъстера.
Вместо него, планировщикът проследява напредъка на всички задачи от един и същи тип (като картиране и намаляване) в задание и стартира само спекулативните дубликати за малки пропорции, които се изпълняваха по-бавно от средното.
Когато задачата бъде завършена успешно, всички изпълнявани дублиращи се задачи са унищожени, тъй като вече не са били необходими.
Така че, в случай че първоначалната задача завърши преди спекулативната задача, тогава спекулативната задача е убита. Ако спекулативната задача приключи преди първоначалната задача, тогава оригиналът е убит.
Обърнете внимание, че спекулативното изпълнение е оптимизация. Това не е функция, която кара задачите на MapReduce да работят по-надеждно.
Как да конфигурирам спекулативно изпълнение в Hadoop?
По подразбиране спекулативното изпълнение е разрешено за задачата Карта, както и за задачите за намаляване. Неговите свойства са зададени в mapred-site.xml конфигурационен файл.
- mapreduce.map.spekulative :Ако това свойство е зададено на true, тогава спекулативното изпълнение на задачата за карта е разрешено. По подразбиране е вярно.
- mapreduce.reduce.spekulative :Ако това свойство е зададено на true, тогава спекулативното изпълнение на задачата за намаляване е разрешено. По подразбиране е вярно.
Защо изобщо бихте искали да изключите спекулативното изпълнение?
Основната цел на спекулативното изпълнение е да се намали времето за изпълнение на заданието. Но това ще дойде с цената на ефективността на клъстера на Hadoop.
В натоварен Hadoop клъстер това може да намали общата пропускателна способност, тъй като се изпълняват излишните задачи, за да се намали времето за изпълнение на една задача.
Поради тази причина някои администратори на клъстери изключват спекулативното изпълнение на клъстера Hadoop и карат потребителите изрично да го включат за отделните задачи.
Можем да го изключим за задачите за намаляване, тъй като всички дублиращи се задачи за намаляване изискват да извличат същите изходи на картографа като оригиналната задача, което значително ще увеличи мрежовия трафик в клъстера.
Полезно ли е спекулативното изпълнение?
Спекулативното изпълнение в Hadoop е от полза в някои случаи, тъй като в клъстера Hadoop, който има стотици или хиляди възли, проблемите като претоварване на мрежата или хардуерна повреда са често срещани.
Така че изпълняването на паралелни или дублиращи се задачи ще бъде по-добре. Но в случай, че двете дублиращи се задачи на всяка независима задача на дадено задание бъдат стартирани приблизително по едно и също време, това ще бъде загуба на ресурси на клъстера.
Резюме
Надявам се, че след като прочетете тази статия, сте разбрали ясно какво е спекулативно изпълнение в Hadoop и защо е необходимо. Освен това видяхте как можем да го деактивираме за задачи с карти и да намалим задачи поотделно.