sql >> Database teknologi >  >> NoSQL >> HBase

Performance Tuning i MapReduce for at forbedre ydeevnen

Ydeevnejustering i Hadoop hjælper med at optimere Hadoop-klyngens ydeevne. I denne MapReduce Performance Tuning-artikel vil du først udforske de forskellige måder, hvorpå du kan forbedre Hadoop-klyngens ydeevne og opnå de bedste resultater fra MapReduce-programmering i Hadoop.

Derefter vil artiklen dække syv vigtige måder eller koncepter for Hadoop MapReduce Performance Tuning. Disse måder er hukommelsesjustering i Hadoop, forbedring af IO-ydeevne, spild af kortdisk i Hadoop, tuning af mappe- og reduceringsopgaver, skrivekombination, brug af skæve joinforbindelser og spekulativ udførelse.

Disse teknikker kan bruges til at opsætte Hadoop-klynger i produktionen med råvarehardware for at forbedre ydeevnen med minimale driftsomkostninger.

Introduktion til Hadoop MapReduce Performance Tuning

Installation af Hadoop-klyngen i produktionen er kun halvdelen af ​​kampen vundet. For Hadoop-administratoren er det ekstremt vigtigt at tune Hadoop-klyngeopsætningen for at opnå maksimal ydeevne.

Hadoop-ydeevnejustering hjælper med at optimere Hadoop-klyngens ydeevne og opnå de bedste resultater, mens du kører MapReduce-job i Big Data-virksomheder.

Under Hadoop-installationen konfigureres Hadoop-klyngen med standardkonfigurationsindstillingerne.

Det er meget vigtigt for Hadoop-administratorerne at være bekendt med de adskillige hardwarespecifikationer såsom RAM-kapacitet, antallet af diske monteret på DataNodes, antallet af CPU-kerner, antallet af fysiske eller virtuelle kerner, NIC-kort osv.

Som sådan er der ingen enkelt ydelsesjusteringsteknik, der passer til alle Hadoop-opgaverne, fordi det er meget vanskeligt at opnå en ligevægt mellem alle ressourcerne, mens man løser big data-problemet.

Vi kan vælge tip og tricks til justering af ydeevnen på basis af mængden af ​​data, der skal flyttes, og på den type Hadoop-job, der skal køres i produktionen. Den bedste og mest effektive præstationsjustering hjælper med at opnå maksimal ydeevne.

For at udføre det samme, skal vi gentage nedenstående proces, indtil det ønskede output er opnået på en optimal måde.
Kør Job –> Identificer flaskehals –> Adresser flaskehals.

Så dybest set, til justering af ydeevnen, skal vi først køre Hadoop MapReduce-jobbet, identificere flaskehalsen og derefter løse problemet ved hjælp af nedenstående metoder. Vi er nødt til at gentage ovenstående trin, indtil det ønskede præstationsniveau er opnået.

Tips og tricks til MapReduce Performance Tuning

De måder, der bruges til Hadoop MapReduce-ydelsesindstilling, kan kategoriseres i to kategorier. Disse to kategorier er:

1. Hadoop run-time parametre baseret præstationsjustering

2. Hadoop-applikationsspecifik ydeevnejustering

Lad os nu diskutere, hvordan vi kan forbedre Hadoop-klyngens ydeevne baseret på disse to kategorier.

1. Hadoop Run-Time Parameter Based Performance Tuning

Denne kategori beskæftiger sig med tuning af Hadoop-runtidsparametrene, såsom tuning af CPU-brug, hukommelsesbrug, diskbrug og netværksbrug til ydelsesjustering. Teknikkerne inkluderet i denne kategori er:

a. Hukommelsesindstilling

Det vigtigste trin for at sikre den maksimale ydeevne af et Hadoop-job er at justere konfigurationsparametrene for hukommelsen ved at overvåge hukommelsesforbruget på serveren.

Hvert MapReduce-job i Hadoop indsamler oplysningerne om de forskellige inputposter, der er læst, antallet af reduktionsposter, antallet af poster, der er pipelinet til yderligere udførelse, swap-hukommelse, heapstørrelsessæt osv.

Hadoop-opgaverne er generelt ikke bundet af CPU'en. Så den primære bekymring er at optimere hukommelsesforbruget og diskspild.

Den bedste tommelfingerregel for hukommelsesjustering for at maksimere ydeevnen er at sikre, at MapReduce-jobbene ikke udløser ombytning. Det betyder, at du skal bruge så meget hukommelse, som du kan, uden at udløse bytte.

Software som Cloudera Manager, Nagios eller Ganglia kan bruges til at overvåge brugen af ​​swap-hukommelse.

Når der er en enorm udnyttelse af swap-hukommelsen, bør hukommelsesforbruget optimeres ved at konfigurere mapred.child.java.opts egenskab ved at reducere mængden af ​​RAM, der er tildelt hver opgave i mapred.child.java.opts .

Vi kan justere hukommelsen til opgaven ved at indstille mapred.child.java.opts til -Xmx2048M i en mapred-site.xml.

b. Minimer kortdiskspild

Disk IO er ydeevneflaskehalsen i Apache Hadoop. Der var masser af parametre, som vi kan justere for at minimere spild. Vi kan justere parametrene som:

  • Kompression af mapper-output
  • Sørg for, at kortlæggeren bruger 70 % af heap-hukommelsen til spildbufferen.

Men tror du, at hyppig spild virkelig er en god idé?

Det anbefales stærkt, at du ikke spilder mere end én gang, for hvis vi spilder én gang, skal vi genlæse og omskrive alle data:3x IO.

c. Tuning Mapper Tasks

Vi kan implicit indstille antallet af kortopgaver. Den mest almindelige og effektive måde til justering af Hadoop-ydelse for kortlæggeren er at kontrollere antallet af kortlæggere og størrelsen på hvert job.

Mens man håndterer de store filer, opdeler rammen filen i mindre bidder, så mapperen kan køre den parallelt. Imidlertid tager initialiseringen af ​​et nyt kortlægningsjob normalt et par sekunder, hvilket også er en overhead og skal minimeres. Så forslagene til det samme er:

  • Genbrug jvm-opgave
  • Sign efter, at kortopgaverne løber 1 til 3 minutter hver. Så hvis den gennemsnitlige kortlægningstid er mindre end et minut, skal du øge mapred.min.split.size for at allokere færre kortlæggere i åbningen og dermed reducere overhead for initialisering af mapper.
  • Brug Combine-filinputformatet til en masse mindre filer.

2. Hadoop Application-Specific Performance Tuning

Teknikkerne inkluderet i denne kategori er:

a. Minimering af Mapper-output

Ved at minimere mapper-outputtet kan vi forbedre ydeevnen, da mapper-output er meget følsomt over for disk-IO, netværks-IO og hukommelsesfølsomheden på shuffle-fasen. Vi kan opnå dette ved at:

  • Filtrering af posterne på kortlægningssiden i stedet for reduceringssiden.
  • Brug af minimale data til at danne vores mapper-outputnøgle og værdi i MapReduce.
  • Komprimering af mapper-output
b. Balancing Reducer Loading

De ubalancerede reduktionsopgaver skaber præstationsproblemer. Nogle af reducererne tager det meste af outputtet fra mapperen og kører ekstremt længe sammenlignet med de andre reducers. Vi kan afbalancere reduktionsbelastningen ved at:

  • Implementering af en bedre hash-funktion i Partitioner-klassen.
  • Skrivning af et forbehandlingsjob til adskillelse af nøgler ved hjælp af de flere udgange. Brug derefter et andet kort-reducer job til at behandle de specielle nøgler, der kan forårsage problemet.
c. Reducer mellemliggende data med Combiner i Hadoop

Yderligere kan vi tune Hadoop-klyngens ydeevne ved at skrive en combiner. Combiner reducerer mængden af ​​data, der skal overføres fra mapper til reducer. Dette viser sig at være gavnligt, da det reducerer overbelastning af netværket.

d. Spekulativ henrettelse

Ydeevnen af ​​MapReduce-jobbene bliver alvorligt påvirket, når opgaverne tager længere tid at afslutte deres udførelse. Spekulativ udførelse i Hadoop er den almindelige tilgang til at løse dette problem ved at sikkerhedskopiere de langsomme opgaver på de alternative maskiner.

Vi kan aktivere den spekulative udførelse ved at indstille konfigurationsparametrene 'mapreduce.map.tasks.speculative.execution' og 'mapreduce.reduce.tasks.speculative.execution' til sandt. Dette vil reducere jobudførelsestiden.

Oversigt

Endelig har vi set Performance tuning i Hadoop hjælper med at optimere Hadoop-klyngens ydeevne. Artiklen forklarede forskellige tips og tricks til præstationsjustering af Hadoop-klyngen.

Artiklen har fremhævet nogle af de bedste og mest effektive tricks til at maksimere ydeevnen.

Men hvis du har spørgsmål om dette emne, er du velkommen til at dele dem med os i kommentarfeltet.


  1. Gem flere versioner af data i Redis cache

  2. Sådan formateres tal i SQL

  3. Vil redis incr-kommandoen være begrænsning til et bestemt antal?

  4. Forskellen mellem dokumentbaserede og nøgle/værdibaserede databaser?