Prestandajustering i Hadoop hjälper till att optimera Hadoop-klusterprestanda. I den här MapReduce Performance Tuning-artikeln kommer du först att utforska de olika sätten att förbättra Hadoop-klustrets prestanda och uppnå de bästa resultaten från MapReduce-programmering i Hadoop.
Sedan kommer artikeln att täcka sju viktiga sätt eller koncept för Hadoop MapReduce Performance Tuning. Dessa sätt är Minnesjustering i Hadoop, Förbättring av IO-prestanda, Kartdiskspill i Hadoop, justering av mappar- och reduceruppgifter, skrivkombination, användning av skeva kopplingar och spekulativ exekvering.
Dessa tekniker kan användas för att sätta upp Hadoop-kluster i produktionen med råvaruhårdvara för att förbättra prestandan med minimala driftskostnader.
Introduktion till Hadoop MapReduce Performance Tuning
Att installera Hadoop-klustret i produktionen är bara halva striden vunnen. För Hadoop-administratören är det extremt viktigt att ställa in Hadoop-klusterinställningarna för att få maximal prestanda.
Hadoop prestandajustering hjälper till att optimera Hadoop-klusterprestanda och uppnå bästa resultat när du kör MapReduce-jobb i Big Data-företag.
Under Hadoop-installationen konfigureras Hadoop-klustret med standardkonfigurationsinställningarna.
Det är mycket viktigt för Hadoop-administratörerna att vara bekanta med de olika hårdvaruspecifikationerna såsom RAM-kapacitet, antalet diskar monterade på DataNodes, antal CPU-kärnor, antalet fysiska eller virtuella kärnor, NIC-kort, etc.
Som sådan finns det ingen enskild prestandajusteringsteknik som passar alla Hadoop-jobb eftersom det är mycket svårt att uppnå en jämvikt mellan alla resurser samtidigt som man löser big data-problemet.
Vi kan välja prestandajusteringstips och tricks utifrån mängden data som ska flyttas och på vilken typ av Hadoop-jobb som ska köras i produktionen. Den bästa och mest effektiva prestandajusteringen hjälper till att uppnå maximal prestanda.
För att utföra samma sak måste vi upprepa den nedan nämnda processen tills önskad effekt uppnås på ett optimalt sätt.
Kör jobb –> Identifiera flaskhals –> Adressera flaskhals.
Så i grund och botten, för prestandajusteringen, måste vi först köra Hadoop MapReduce-jobbet, identifiera flaskhalsen och sedan lösa problemet med metoderna nedan. Vi måste upprepa steget ovan tills önskad prestationsnivå uppnås.
Tips och tricks för MapReduce Performance Tuning
De sätt som används för Hadoop MapReduce-prestandajustering kan kategoriseras i två kategorier. Dessa två kategorier är:
1. Hadoop körtidsparametrar baserad prestandajustering
2. Hadoop applikationsspecifik prestandajustering
Låt oss nu diskutera hur vi kan förbättra Hadoop-klustrets prestanda baserat på dessa två kategorier.
1. Hadoop Run-Time Parameters Based Performance Tuning
Den här kategorin handlar om justering av Hadoop-körtidsparametrarna som justering av CPU-användning, minnesanvändning, diskanvändning och nätverksanvändning för prestandajustering. Teknikerna som ingår i denna kategori är:
a. Minnesjustering
Det viktigaste steget för att säkerställa maximal prestanda för ett Hadoop-jobb är att ställa in konfigurationsparametrarna för minnet genom att övervaka minnesanvändningen på servern.
Varje MapReduce-jobb i Hadoop samlar in information om de olika inlästa indataposterna, antalet reducerposter, antalet poster som skickas i pipeline för vidare exekvering, swap-minne, uppsättning av heapstorlek, etc.
Hadoop-uppgifterna är i allmänhet inte bundna av CPU:n. Så det främsta problemet är att optimera minnesanvändningen och diskspill.
Den bästa tumregeln för minnesinställning för att maximera prestandan är att säkerställa att MapReduce-jobben inte utlöser byte. Det betyder att du använder så mycket minne du kan utan att byta ut.
Programvara som Cloudera Manager, Nagios eller Ganglia kan användas för att övervaka användningen av utbytesminnet.
Närhelst det finns ett stort utbyte av minnesutnyttjande bör minnesanvändningen optimeras genom att konfigurera mapred.child.java.opts egenskap genom att minska mängden RAM som tilldelats varje uppgift i mapred.child.java.opts .
Vi kan justera minnet för uppgiften genom att ställa in mapred.child.java.opts till -Xmx2048M i en mapred-site.xml.
b. Minimera kartdiskspillet
Disk IO är prestandaflaskhalsen i Apache Hadoop. Det fanns många parametrar som vi kan ställa in för att minimera spill. Vi kan justera parametrarna som:
- Komprimering av mapparens utdata
- Se till att kartläggaren använder 70 % av högminnet för spillbufferten.
Men tror du att frekvent spill verkligen är en bra idé?
Det rekommenderas starkt att du inte ska spilla mer än en gång för om vi spiller en gång måste vi läsa om och skriva om all data:3x IO.
c. Tuning Mapper Tasks
Vi kan implicit ställa in antalet kartuppgifter. Det vanligaste och mest effektiva sättet för Hadoop-prestandajustering för kartläggaren är att kontrollera antalet mappare och storleken på varje jobb.
Medan man hanterar de stora filerna delar ramverket upp filen i mindre bitar så att mapparen kan köra den parallellt. Initieringen av ett nytt mapparjobb tar dock vanligtvis några sekunder, vilket också är en overhead och måste minimeras. Så förslagen på detsamma är:
- Återanvänd jvm-uppgift
- Sikta efter att kartuppgifterna tar 1 till 3 minuter vardera. Så om den genomsnittliga körtiden för mapparen är mindre än en minut, öka mapred.min.split.size för att allokera färre mappare i luckan och på så sätt minska mapparens initialiseringsoverhead.
- Använd inmatningsformatet Kombinera för ett gäng mindre filer.
2. Hadoop applikationsspecifik prestandajustering
Teknikerna som ingår i denna kategori är:
a. Minimera Mapper Output
Genom att minimera mapparens utdata kan vi förbättra prestandan eftersom mapparens utdata är mycket känslig för disk-IO, nätverks-IO och minneskänsligheten i shuffle-fasen. Vi kan uppnå detta genom att:
- Filtrera posterna på mapparsidan istället för reducersidan.
- Använder minimal data för att skapa vår mappar-utdatanyckel och värde i MapReduce.
- Komprimerar mapparens utdata
b. Balanserande Reducer Loading
De obalanserade reduceringsuppgifterna skapar prestationsproblem. Vissa av reducerarna tar det mesta av utdata från mapparen och kör extremt länge jämfört med de andra reducerarna. Vi kan balansera reduceringsbelastningen genom att:
- Implementering av en bättre hashfunktion i klassen Partitioner.
- Skriva ett förbearbetningsjobb för att separera nycklar med hjälp av flera utgångar. Använd sedan ett annat kartförminskningsjobb för att bearbeta specialnycklarna som kan orsaka problemet.
c. Minska mellanliggande data med Combiner i Hadoop
Vidare kan vi ställa in prestandan för Hadoop-klustret genom att skriva en combiner. Combiner minskar mängden data som ska överföras från mapparen till reduceraren. Detta visar sig vara fördelaktigt eftersom det minskar nätverksöverbelastning.
d. Spekulativ avrättning
Prestanda för MapReduce-jobben påverkas allvarligt när uppgifterna tar längre tid att slutföra. Spekulativ exekvering i Hadoop är den vanliga metoden för att lösa detta problem genom att säkerhetskopiera de långsamma uppgifterna på de alternativa maskinerna.
Vi kan aktivera spekulativ exekvering genom att ställa in konfigurationsparametrarna ‘mapreduce.map.tasks.speculative.execution’ och 'mapreduce.reduce.tasks.speculative.execution' till sant. Detta kommer att minska tiden för att utföra jobbet.
Sammanfattning
Slutligen har vi sett att prestandajustering i Hadoop hjälper till att optimera Hadoop-klusterprestanda. Artikeln förklarade olika tips och tricks för prestandajustering av Hadoop-klustret.
Artikeln har lyft fram några av de bästa och mest effektiva knepen för att maximera prestanda.
Om du har några frågor om detta ämne får du gärna dela dem med oss i kommentarsfältet.