HBase
 sql >> Baza danych >  >> NoSQL >> HBase

Egzekucja spekulacyjna w Hadoop MapReduce

W tym artykule dotyczącym wykonywania spekulacyjnego MapReduce szczegółowo omówisz wykonanie spekulacyjne w usłudze Hadoop. Dowiesz się, co to jest wykonanie spekulacyjne, jakie są jego potrzeby, jak możemy je włączyć i wyłączyć.

Artykuł wyjaśnia również, czy jest to korzystne, czy nie i jak to działa.

Co to jest wykonywanie spekulacyjne w Hadoop?

Model MapReduce w środowisku Hadoop dzieli zadania na niezależne zadania i uruchamia je równolegle w celu skrócenia całkowitego czasu wykonania zadania.

To sprawia, że ​​czas wykonania zadania jest wrażliwy na wolno działające zadania, ponieważ tylko jedno powolne zadanie może spowodować, że cały czas wykonania zadania będzie dłuższy niż oczekiwano. Kiedy jakakolwiek praca składa się z tysięcy lub setek zadań, wtedy możliwość wykonania kilku trudnych zadań jest bardzo realna.

Zadania mogą być powolne z różnych powodów, takich jak błędna konfiguracja oprogramowania lub degradacja sprzętu. Ale przyczyna, która powoduje, że zadanie działa wolno, jest trudna do wykrycia, ponieważ zadania nadal kończą się pomyślnie, chociaż zajmuje to więcej czasu niż oczekiwano.

Platforma Hadoop nie próbuje diagnozować ani naprawiać wolno działających zadań. Framework próbuje wykryć zadanie, które działa wolniej niż oczekiwana prędkość i uruchamia inne zadanie, które jest równoważnym zadaniem jako kopia zapasowa.

Zadanie tworzenia kopii zapasowej jest znane jako zadanie spekulacyjne, a proces ten w Hadoop nazywa się wykonywaniem spekulatywnym.

Jaka jest potrzeba spekulacyjnej egzekucji w Hadoop?

W strukturze Hadoop plik wejściowy jest podzielony na wiele bloków, które są przechowywane w różnych węzłach klastra Hadoop.

Gdy zadanie MapReduce jest przesyłane przez klienta, oblicza on liczbę InputSplits i uruchamia tyle maperów, ile jest InputSplit. Te mapery (zadania mapowania) działają równolegle w DataNodes, gdzie znajdują się podzielone dane.

A co, jeśli kilka węzłów DataNodes w klastrze Hadoop nie wykonuje zadań tak szybko, jak inne węzły DataNode z powodu awarii sprzętu lub problemów z siecią.

Tak więc zadania mapy działające na tych DataNodes będą wolniejsze w porównaniu z zadaniami mapy, które działają na innych DataNodes. Reduktor może rozpocząć wykonywanie tylko wtedy, gdy dostępne są pośrednie wyjścia wszystkich maperów.

W ten sposób mniej wolno działających zadań mapy opóźni wykonanie Reduktora.

Jeśli Reduktor działa na wolniejszym węźle, opóźni to również końcową wydajność zadania.

Aby więc zabezpieczyć się przed takimi wolno działającymi zadaniami, platforma Hadoop uruchamia to samo zadanie na drugim węźle. Ta optymalizacja przez platformę Hadoop nazywa się spekulacyjnym wykonaniem zadania.

Jak działa wykonywanie spekulacyjne w Hadoop?

Wykonanie spekulacyjne nie uruchamia dwóch zduplikowanych zadań każdego niezależnego zadania w tym samym czasie, aby mogły się ścigać. Jeśli framework to zrobi, doprowadzi to do marnowania zasobów klastra.

Zamiast tego, harmonogram śledzi postęp wszystkich zadań tego samego typu (takich jak mapowanie i redukcja) w zadaniu i uruchamia tylko duplikaty spekulacyjne dla małych części, które działały wolniej niż przeciętnie.

Gdy zadanie zostanie pomyślnie zakończone, wszystkie zduplikowane zadania, które są uruchomione, zostały usunięte, ponieważ nie były już potrzebne.

Tak więc w przypadku, gdy pierwotne zadanie zakończy się przed zadaniem spekulatywnym, zadanie spekulacyjne zostaje zabite. Jeśli zadanie spekulacyjne zakończy się przed pierwotnym zadaniem, oryginał zostanie zabity.

Zauważ, że wykonanie spekulacyjne jest optymalizacją. Nie jest to funkcja, dzięki której zadania MapReduce działają bardziej niezawodnie.

Jak skonfigurować wykonanie spekulacyjne w Hadoop?

Domyślnie wykonanie spekulacyjne jest włączone zarówno dla zadania Mapa, jak i dla zadań redukcji. Jego właściwości są ustawione w mapred-site.xml plik konfiguracyjny.

  • mapreduce.map.spekulacyjny :Jeśli ta właściwość ma wartość true, włączone jest spekulacyjne wykonanie zadania mapy. Domyślnie tak jest.
  • mapreduce.reduce.spekulacyjny :Jeśli ta właściwość ma wartość true, włączone jest spekulacyjne wykonanie zadania redukcji. Domyślnie tak jest.

Dlaczego miałbyś kiedykolwiek chcieć wyłączyć spekulacyjną egzekucję?

Głównym celem realizacji spekulacyjnej jest skrócenie czasu realizacji zlecenia. Ale będzie to kosztem wydajności klastra Hadoop.

W zajętym klastrze Hadoop może to zmniejszyć ogólną przepustowość, ponieważ nadmiarowe zadania są wykonywane w celu skrócenia czasu wykonania pojedynczego zadania.

Z tego powodu niektórzy administratorzy klastrów wyłączają wykonanie spekulacyjne w klastrze Hadoop, a użytkownicy jawnie włączają je dla poszczególnych zadań.

Możemy ją wyłączyć dla zadań redukcji, ponieważ wszelkie duplikaty zadań redukcji wymagają pobrania tych samych danych wyjściowych mapowania, co oryginalne zadanie, co znacznie zwiększy ruch sieciowy w klastrze.

Czy wykonanie spekulacyjne jest korzystne?

Spekulacyjne wykonywanie w Hadoop jest w niektórych przypadkach korzystne, ponieważ w klastrze Hadoop posiadającym setki lub tysiące węzłów problemy takie jak przeciążenie sieci lub awaria sprzętu są powszechne.

Więc uruchamianie zadań równoległych lub zduplikowanych będzie lepsze. Ale w przypadku, gdy dwa zduplikowane zadania każdego niezależnego zadania zadania zostaną uruchomione mniej więcej w tym samym czasie, będzie to marnotrawstwo zasobów klastra.

Podsumowanie

Mam nadzieję, że po przeczytaniu tego artykułu jasno zrozumiałeś, czym jest spekulacyjna egzekucja w Hadoop i dlaczego jest potrzebna. Widziałeś również, jak możemy wyłączyć tę funkcję dla zadań na mapie i indywidualnie zredukować zadania.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Apache HBase + Apache Hadoop + Xceivery

  2. Wprowadzenie do lokalizacji danych w Hadoop MapReduce

  3. Złącze Spark HBase – rok w przeglądzie

  4. Wzorce architektoniczne do przetwarzania danych w czasie zbliżonym do rzeczywistego za pomocą Apache Hadoop

  5. Apache Spark pojawia się w Apache HBase z modułem HBase-Spark