Quelle est la relation entre la taille de division et la taille de bloc dans Hadoop? Comme je l'ai lu dans this , la taille de division doit être égale à n fois la taille du bloc (n est un entier et n> 0), est-ce correct? Existe-t-il un lien entre la taille de la scission et la taille du bloc?
Dans l'architecture HDFS, il existe un concept de blocs. Une taille de bloc typique utilisée par HDFS est de 64 Mo. Lorsque nous plaçons un fichier volumineux dans HDFS, il est découpé en morceaux de 64 Mo (en fonction de la configuration par défaut des blocs). Supposons que vous ayez un fichier de 1 Go et que vous souhaitiez le placer dans HDFS 16 split/blocks et ceux-ci seront distribués sur les DataNodes. Ces blocs/blocs résident sur un autre DataNode différent en fonction de la configuration de votre cluster.
Le fractionnement des données est basé sur les décalages de fichiers. L'objectif de la division du fichier et de son stockage dans différents blocs est le traitement en parallèle et le basculement des données.
Différence entre la taille du bloc et la taille de la scission.
La division est une division logique des données, essentiellement utilisée lors du traitement de données à l'aide du programme Map/Reduce ou d'autres techniques de traitement de données sur Hadoop Ecosystem. La taille de division est une valeur définie par l'utilisateur et vous pouvez choisir votre propre taille de division en fonction de votre volume de données (Quantité de données que vous traitez).
La division est essentiellement utilisée pour contrôler le nombre de mappeurs dans le programme Mapper/Réduire. Si vous n'avez pas défini de taille de fractionnement d'entrée dans le programme Mappage/Réduction, le fractionnement de bloc HDFS par défaut sera considéré comme un fractionnement d'entrée.
Exemple:
Supposons que vous avez un fichier de 100 Mo et que la configuration de bloc par défaut de HDFS est de 64 Mo. Dans ce cas, il sera découpé en 2 parties et occupera 2 blocs. Vous avez maintenant un programme Mapper/Réduire pour traiter ces données, mais vous n'avez pas spécifié de fractionnement d'entrée. En fonction du nombre de blocs (2 blocs), le fractionnement d'entrée sera pris en compte pour le traitement Mappage/Réduire et 2 mappeurs seront affectés à cette opération. emploi.
Mais supposons que vous ayez spécifié la taille de la scission (par exemple 100 Mo) dans votre programme Mappage/Réduire, les deux blocs (2 blocs) seront considérés comme une scission unique pour le traitement Mappage/Réduction et 1 mappeur sera affecté à ce travail.
Supposons que vous ayez spécifié la taille de la division (disons 25 Mo) dans votre programme Mappage/Réduire, il y aura 4 divisions en entrée pour le programme Mappage/Réduire et 4 mappeurs seront affectés au travail.
Conclusion:
Si un mappeur doit être exécuté sur Block 1, il ne peut pas être traité car il ne possède pas le second enregistrement complet.
C’est le problème exact que input splits résout. Input splits respecte les limites des enregistrements logiques.
Supposons que la taille de entrée fractionnée est de 200 Mo
Par conséquent, input split 1 doit avoir à la fois l'enregistrement 1 et l'enregistrement 2. Et l'entrée split 2 ne commence pas par l'enregistrement 2 car l'enregistrement 2 a été affecté au groupe d'entrées 1. Le groupe d'entrée 2 commence par l'enregistrement 3.
C'est pourquoi un fractionnement en entrée est uniquement un fragment logique de données. Il indique les emplacements de départ et d'arrivée avec des blocs.
Si la taille du fractionnement en entrée correspond à n fois la taille du bloc, un fractionnement en entrée peut contenir plusieurs blocs et, par conséquent, un nombre moins important de Mappers nécessaires pour l'ensemble du travail, et donc moins de parallélisme. (Le nombre de mappeurs est le nombre de divisions d’entrée)
taille de l'entrée = taille du bloc est la configuration idéale.
J'espère que cela t'aides.
La création de Split dépend du InputFormat utilisé. Le diagramme ci-dessous explique comment la méthode getSplits () de FileInputFormat détermine les divisions pour deux fichiers différents.
Notez le rôle joué par le Split Slope (1.1).
La source Java correspondante qui effectue la scission est:
La méthode computeSplitSize () ci-dessus se développe en Max (minSize, min (maxSize, blockSize)), où la taille min/max peut être configurée en définissant mapreduce.input.fileinputformat.split.minsize/taille max