Ydeevnejustering vil hjælpe med at optimere din Hadoop ydeevne. I denne blog vil vi diskutere alle disse teknikker til MapReduce Joboptimeringer.
I denne MapReduce-vejledning vil vi give dig 6 vigtige tips til MapReduce-joboptimering, såsom den korrekte konfiguration af din klynge, LZO-komprimeringsbrug, Korrekt justering af antallet af MapReduce-opgaver osv.
Tips til MapReduce Job Optimization
Nedenfor er nogle MapReduce-joboptimeringsteknikker, der kan hjælpe dig med at optimere MapReduce-jobydelsen.
1. Korrekt konfiguration af din klynge
- Med -noatime option Dfs og MapReduce storage er monteret. Dette vil deaktivere adgangstiden. Forbedrer dermed I/O-ydeevnen.
- Prøv at undgå RAID på TaskTracker og datanode-maskiner. Dette reducerer generelt ydeevnen.
- Sørg for, at du har konfigureret mapred.local.dir og dfs.data.dir at pege på en mappe på hver af dine diske. Dette er for at sikre, at al din I/O-kapacitet er brugt.
- Du bør overvåge grafen over swap-brug og netværksbrug med software. Hvis du ser, at swap bliver brugt, bør du reducere mængden af RAM, der er allokeret til hver opgave i mapred.child.java.opts .
- Sørg for, at du skal have smart overvågning af dine diskdrevs sundhedsstatus. Dette er en af de vigtige fremgangsmåder til MapReduce-indstilling af ydeevne.
2. LZO-kompressionsbrug
For mellemliggende data er dette altid en god idé. Hvert Hadoop job, der genererer en ikke ubetydelig mængde kortoutput, vil få gavn af mellemliggende datakomprimering med LZO.
Selvom LZO tilføjer en lille smule overhead til CPU'en, sparer det tid ved at reducere mængden af disk-IO under shuffle.
Indstil mapred.compress.map.output til sand for at aktivere LZO-komprimering
3. Korrekt justering af antallet af MapReduce-opgaver
- I MapReduce job, hvis hver opgave tager 30-40 sekunder eller mere, vil det reducere antallet af opgaver. kortlæggeren eller reduktion Processen involverer følgende ting:Først skal du starte JVM (JVM indlæst i hukommelsen). Så skal du initialisere JVM. Og efter behandling (mapper/reducer) skal du de-initialisere JVM. Og disse JVM-opgaver er meget dyre. Antag et tilfælde, hvor mapper kører en opgave kun i 20-30 sekunder. Til dette skal vi starte/initialisere/stoppe JVM. Dette kan tage lang tid. Så det anbefales på det kraftigste at køre opgaven i mindst 1 minut.
- Hvis et job har mere end 1 TB input. Så bør du overveje at øge blokstørrelsen af inputdatasættet til 256M eller endda 512M. Så antallet af opgaver bliver mindre. Du kan ændre blokstørrelsen ved at bruge kommandoen Hadoop distcp –Hdfs.block.size=$[256*1024*1024] /path/to/inputdata /path/to/inputdata-with-largeblocks
- Som vi ved, kører hver opgave i mindst 30-40 sekunder. Du bør øge antallet af kortlægningsopgaver til et eller andet multiplum af antallet af kortlægningspladser i klyngen.
- Kør ikke for mange reducerede opgaver – til de fleste opgaver. Antallet af reduktionsopgaver lig med eller en smule mindre end antallet af reduktionspladser i klyngen.
4. Kombiner mellem Mapper og Reducer
Hvis algoritmen involverer beregning af aggregater af nogen art, bør vi bruge en Kombinator. Combiner udfører en vis aggregering, før dataene rammer reducereren.
Hadoop MapReduce-rammerne kører kombineret intelligent for at reducere mængden af data, der skal skrives til disken. Og disse data skal overføres mellem kort- og reduktionsstadierne i beregningen.
5. Brug af den mest passende og kompakte skrivbare type til data
Big data-brugere bruger unødigt den tekst, der kan skrives til at skifte fra Hadoop streaming til Java MapReduce. Tekst kan være praktisk. Det er ineffektivt at konvertere numeriske data til og fra UTF8-strenge. Og kan faktisk udgøre en betydelig del af CPU-tiden.
6. Genbrug af Writables
Mange MapReduce-brugere begår en meget almindelig fejl, nemlig at allokere et nyt skrivbart objekt for hvert output fra en mapper/reducer. Antag f.eks. ord-tæller-mapper-implementering som følger:
public void map(...) { ... for (String word: words) { output.collect(new Text(word), new IntWritable(1)); }
Denne implementering forårsager tildeling af tusindvis af kortlivede objekter. Selvom Java garbage collector gør et rimeligt stykke arbejde med at håndtere dette, er det mere effektivt at skrive:
class MyMapper ... { Text wordText = new Text(); IntWritable one = new IntWritable(1); public void map(...) { ... for (String word: words) { wordText.set(word); output.collect(word, one); } } }
Konklusion
Derfor er der forskellige MapReduce joboptimeringsteknikker, der hjælper dig med at optimere MapReduce job. Som at bruge combiner mellem mapper og Reducer, ved brug af LZO-komprimering, korrekt justering af antallet af MapReduce-opgaver, Genbrug af skrivbar.
Hvis du finder en anden teknik til MapReduce joboptimering, så lad os det vide i kommentarfeltet nedenfor.