Vidéo: What is Hadoop Distributed File System (HDFS)? 2024
Lorsque vous stockez un fichier dans HDFS, le système le divise en un ensemble de blocs individuels et stocke ces blocs dans divers nœuds esclaves du cluster Hadoop. C'est une chose tout à fait normale, car tous les systèmes de fichiers décomposent les fichiers en blocs avant de les stocker sur le disque.
HDFS n'a aucune idée (et s'en fiche) de ce qui est stocké dans le fichier, donc les fichiers bruts ne sont pas divisés selon des règles que nous, les humains, comprendrions. Les humains, par exemple, voudraient que les limites d'enregistrement - les lignes indiquant où un enregistrement commence et se termine - soient respectées.
HDFS est souvent inconsciemment inconscient que l'enregistrement final dans un bloc peut être seulement un enregistrement partiel, avec le reste de son contenu shunté au bloc suivant. HDFS veut uniquement s'assurer que les fichiers sont divisés en blocs de taille égale qui correspondent à la taille de bloc prédéfinie pour l'instance Hadoop (sauf si une valeur personnalisée a été entrée pour le fichier stocké). Dans la figure précédente, cette taille de bloc est de 128 Mo.
Tous les fichiers que vous devez stocker ne correspondent pas exactement à la taille de bloc de votre système, de sorte que le bloc de données final d'un fichier utilise uniquement l'espace nécessaire. Dans le cas de la figure précédente, le dernier bloc de données est 1 Mo.
Le concept de stockage d'un fichier sous la forme d'une collection de blocs est entièrement cohérent avec le fonctionnement normal des systèmes de fichiers. Mais ce qui est différent à propos de HDFS, c'est l'échelle. Une taille de bloc typique que vous verriez dans un système de fichiers sous Linux est de 4 Ko, alors qu'une taille de bloc typique dans Hadoop est de 128 Mo. Cette valeur est configurable et peut être personnalisée, à la fois en tant que nouvelle valeur par défaut du système et en tant que valeur personnalisée pour les fichiers individuels.
Hadoop a été conçu pour stocker des données à l'échelle du pétaoctet, où toute limitation potentielle de la mise à l'échelle est minimisée. La taille de bloc élevée est une conséquence directe de ce besoin de stocker des données à grande échelle.
Tout d'abord, chaque bloc de données stocké dans HDFS possède ses propres métadonnées et doit être suivi par un serveur central afin que les applications ayant besoin d'accéder à un fichier spécifique puissent être dirigées vers tous les blocs du fichier. Si la taille du bloc était de l'ordre du kilo-octet, même des volumes modestes de données dans l'échelle du téraoctet surchargeraient le serveur de métadonnées avec trop de blocs à suivre.
Deuxièmement, HDFS est conçu pour permettre un haut débit de sorte que le traitement parallèle de ces grands ensembles de données se fasse le plus rapidement possible. La clé de l'évolutivité de Hadoop en matière de traitement de données est, et sera toujours, le parallélisme - la possibilité de traiter les blocs individuels de ces gros fichiers en parallèle.
Pour permettre un traitement efficace, un équilibre doit être trouvé. D'une part, la taille du bloc doit être suffisamment grande pour justifier les ressources dédiées à une unité individuelle de traitement de données (par exemple, une carte ou une tâche de réduction). D'un autre côté, la taille du bloc ne peut pas être si grande que le système attend très longtemps qu'une dernière unité de traitement des données finisse son travail.
Ces deux considérations dépendent évidemment du type de travail effectué sur les blocs de données.