2017-09-20 2 views
0

J'essaie d'apprendre MapReduce en détail, en particulier la requête suivante. Comme nous savons que les données dans HDFS sont cassées en blocs et typiquement Mapper fonctionne sur un bloc à la fois;Comment le mappeur Hadoop fonctionne-t-il sur les enregistrements qui se retrouvent partiellement dans le bloc suivant?

nous pouvons avoir la situation dans laquelle un record est renversé à un autre bloc; par exemple:

Jeu de données: "bonjour, comment allez-vous?"; ces données pourraient être divisées en deux blocs différents.

Bloc1:

hello, how a 

Block2:

re 
you doing 

Maintenant, si Mapper fonctionne sur Bloc1, comment mappeur obtenir le dossier "complet" de block1 qui a renversé à Block2?

Quelqu'un pourrait-il m'aider à comprendre cela?

Répondre

1

Fonctionne sur des fichiers qui peuvent être stockés sur HDFS sous plusieurs blocs. Cependant, dans la mesure où le mappeur est concerté, son travail sur un fichier et les blocs et où ils se séparent est sans importance, il ne verra que le fichier et son contenu complet.

1

Le bloc est la division physique des données et InputSplit est une division logique des données. Input Split est la manière dont le lecteur de fichiers présente les données aux mappeurs.

Lorsqu'une donnée est stockée, il y a des chances que les enregistrements soient répartis sur 2 blocs. InputSplit ne contient pas de données réelles, mais une référence aux données. InputSplit représente les données à traiter par un mappeur individuel. Typiquement, il présente une vue orientée octet sur l'entrée et est la responsabilité de RecordReader du travail pour traiter ceci et présenter une vue orientée enregistrement. RecordReader convertit généralement la vue orientée octet de l'entrée fournie par InputSplit et présente une vue orientée enregistrement pour les tâches Mapper et Reducer à traiter. Il assume ainsi la responsabilité de traiter les limites d'enregistrement et de présenter les tâches avec des clés et des valeurs.

La manière dont les données sont divisées dépend de InputFormat. InputFormat par défaut est FileInputFormat qui utilise lineFeed pour InputSplit.

Voir aussi: InputSplit et RecordReader