Splitting SequenceFile op gecontroleerde manier - Hadoop

hadoop schrijft in een SequenceFile in sleutelformaat (record) formaat. Overweeg dat we een groot onbegrensd logbestand hebben. Hadoop splitst het bestand op basis van de blokgrootte en slaat ze op meerdere gegevensknooppunten op. Is het gegarandeerd dat elk sleutel/waarde-paar zich op één enkel blok zal bevinden? of we kunnen een case hebben zodat de key zich in één blok op knooppunt 1 en waarde (of delen ervan) in het tweede blok op knooppunt 2 bevindt? Als we onbelangrijke volledige splitsingen hebben, wat is dan de oplossing? sync-markeringen?

Een andere vraag is: schrijft hasoop automatisch sync-markers of moeten we dit handmatig schrijven?

6

1 antwoord

Ik stelde deze vraag in hadoop mailinglijst. Zij antwoorden:

Sync-markeringen worden al in sequence-bestanden geschreven, ze maken er deel van uit   het formaat. Dit is niets om je zorgen over te maken - en is eenvoudig genoeg om   testen en vertrouwen hebben. Het mechanisme is hetzelfde als het lezen van een tekst   bestand met nieuwe regels - de lezer zorgt ervoor dat de grenzen worden afgelezen   gegevens om een ​​record te voltooien als dat nodig is.

toen vroeg ik:

Dus als we een kaartjob hebben die alleen het tweede blok van het logboek analyseert   bestand, mag het geen andere delen van dat van andere knooppunten overbrengen   omdat dat deel alleen staat en volledige splitsing betekent? Heb ik gelijk?

Zij antwoorden:

Ja. Simpel gezegd, uw records zullen nooit breken. We lezen niet alleen   bij de gesplitste grenzen kunnen we grenzen overschrijden tot een synchronisatie   markering wordt aangetroffen om een ​​record of reeks van te voltooien   Records. De volgende mappers zullen altijd overslaan tot hun eerste   synchronisatiemarkering en begin met lezen - om duplicatie te voorkomen. Dit is   precies hoe het lezen van tekstbestanden werkt - alleen hier is het   nieuwe regels.

9
toegevoegd