I vår tidigare blogg har vi studerat Hadoop Räknare i detalj. Nu i denna handledning kommer vi att diskutera RecordReader i Hadoop.
Här kommer vi att täcka introduktionen till Hadoop RecordReader, som fungerar med RecordReader. Vi kommer också att diskutera typerna av RecordReader i MapReduce, storleken på den enda Record i Hadoop MapReduce i denna MapReduce-handledning.
Vad är RecordReader i MapReduce?
En RecordReader konverterar den byte-orienterade vyn av indata till en post-orienterad vy för Mapper och Reducer uppgifter för bearbetning.
För att förstå Hadoop RecordReader måste vi förstå MapReduce Dataflow. Låt oss lära oss hur dataflödet:
MapReduce är en enkel modell för databehandling. In- och utdata för kart- och reduceringsfunktionerna är nyckel-värdepar . Följande är den allmänna formen för kart- och reduceringsfunktionerna:
- Karta: (K1, V1) → lista (K2, V2)
- Minska: (K2, lista (V2)) → lista (K3, V3)
Nu innan behandlingen startar måste den veta vilken data som ska behandlas. Så, InputFormat klass hjälper till att uppnå detta. Den här klassen väljer filen från HDFS det är ingången till kartfunktionen. Den är också ansvarig för att skapa ingångsdelningarna.
Dela också upp dem i poster. Den delar upp data i antalet delningar (vanligtvis 64/128 MB) i HDFS. Detta är känt som InputSplit. InputSplit är den logiska representationen av data. I ett MapReduce-jobb är exekveringsantalet kartuppgifter lika med antalet InputSplits.
Genom att anropa 'getSplit ()' kunden beräknar fördelningarna för jobbet. Sedan skickades det till applikationsmästaren. Den använder deras lagringsplatser för att schemalägga kartuppgifter som kommer att bearbeta dem i klustret.
Efter den kartuppgiften skickas delningen till createRecordReader () metod. Från det får den RecordReader för uppdelningen. RecordReader genererar post (nyckel-värde par). Sedan går den över till kartfunktionen.
Hadoop RecordReader i MapReduce-jobbkörning använder data inom de gränser som skapas av inputsplit. Och det skapar sedan nyckel-värdepar för mapparen. "Start" är bytepositionen i filen.
I början börjar Hadoop RecordReader generera nyckel/värdepar. "Slutet" är där RecorReader slutar läsa poster. I RecordReader laddas data från dess källa.
Sedan omvandlas data till nyckel-värdepar som är lämpliga för läsning av Mapper. Den kommunicerar med inputsplit tills filläsningen inte är klar.
Hur fungerar RecorReader i Hadoop?
Det är mer än iterator över posterna. Kartuppgiften använder en post för att generera nyckel-värdepar som den skickar till kartfunktionen. Vi kan också se detta genom att använda kartläggarens körfunktion nedan:
public void run(Context context ) throws IOException, InterruptedException{ setup(context); while(context.nextKeyValue()) { map(context.setCurrentKey(),context.getCurrentValue(),context) } cleanup(context); }
Även om det inte är obligatoriskt för RecordReader att hålla sig mellan de gränser som skapas av inputsplit för att generera nyckel-värdepar, förblir den vanligtvis. Dessutom kan anpassad implementering till och med läsa mer data utanför inputsplit.
Sedan, efter att ha kört setup() , nextKeyValue() kommer att upprepa om sammanhanget. Detta fyller i nyckel- och värdeobjekten för mapparen. Som ett sammanhang hämtar ramverket nyckel-värde från postläsaren. Gå sedan till map() metod för att göra sitt arbete.
Därför, inmatning (nyckel-värde) till kartfunktionsprocesserna enligt logiken som nämns i kartkoden. När posten kommer till slutet av posten visas nextKeyValue() metod returnerar false.
Typer av Hadoop RecordReader
InputFormat definierar RecordReader-instansen i Hadoop. Som standard konverterar ReordReader data till nyckel-värdepar genom att använda TextInputFormat. TextInputFormat tillhandahåller också 2 typer av RecordReaders som följer:
1. LineRecordReader
Det är standard RecordReader. TextInputFormat tillhandahåller denna RecordReader. Den behandlar också varje rad i inmatningsfilen som det nya värdet. Då är den associerade nyckeln byte offset. Den hoppar alltid över den första raden i delningen (eller en del av den), om det inte är den första delningen.
Det läses alltid en rad efter gränsen för delningen i slutet (om data finns tillgänglig, så det är inte den sista delningen).
2. SequenceFileRecordReader
Denna Hadoop RecorReader läser data som specificeras av rubriken på en sekvensfil.
Maximal storlek på singeln Record
Genom att använda nedanstående parameter sätter vi maximalt värde.
conf.setInt("mapred.linerecordreader.maxlength", Integer.MAX_VALUE);
Slutsats
Sammanfattningsvis skapar Hadoop RecorReader indata (nyckel-värde) till Mapper. Den använder också TextInputFormat för att konvertera data till nyckel-värdepar.
Jag hoppas att du har gillat den här bloggen om du har några frågor relaterade till Hadoop RecordReader, dela gärna med dig. Vi löser dem gärna.