taille des blocs de données en HDFS, pourquoi 64 Mo?
la taille par défaut des blocs de données de HDFS / hadoop est de 64MB. La taille du bloc dans le disque est généralement 4KB. Qu'est-ce que la taille de bloc de 64 Mo signifie? ->Est-ce que cela signifie que la plus petite unité de lecture à partir du disque est 64MB?
Si oui, quel est l'avantage de le faire?- >facile pour l'accès continu de gros fichiers en HDFS?
pouvons-nous faire la même chose en utilisant la taille de bloc originale de 4KB dans le disque?
8 réponses
What does 64MB block size mean?
la taille du bloc est la plus petite unité de données qu'un système de fichiers peut stocker. Si vous stockez un fichier qui est de 1k ou 60Mb, il prendra un bloc. Une fois que vous avez franchi le boundry de 64 Mo, vous avez besoin d'un deuxième bloc.
If yes, what is the advantage of doing that?
HDFS est destiné à traiter les gros fichiers. Disons que vous avez un fichier de 1000Mo. Avec une taille de bloc de 4K, vous devrez faire 256.000 requêtes pour obtenir ce fichier (1 requête par bloc). Dans les HDFS, ces requêtes passent par un réseau et sont accompagnées de beaucoup de frais généraux. Chacun la requête doit être traitée par le noeud de nom pour trouver où ce bloc peut être trouvé. C'est beaucoup de trafic! Si vous utilisez des blocs de 64 Mo, le nombre de requêtes descend à 16, ce qui réduit considérablement le coût des frais généraux et de la charge sur le noeud de nom.
le design de HDFS a été inspiré à l'origine par le design du système de fichiers Google (GFS). Voici les deux raisons pour lesquelles les blocs de grande taille sont indiqués dans le document original de GFS (note 1 sur la terminologie GFS vs terminologie HDFS: chunk = bloc, chunkserver = datanode, master = namenode; note 2: le formatage en gras est le mien):
un gros morceau offre plusieurs avantages importants. Premier, il réduit le besoin des clients d'interagir avec le maître parce que lit et les Écritures sur le même morceau ne nécessitent qu'une seule demande initiale au capitaine pour obtenir des renseignements sur l'emplacement du morceau. La réduction est particulièrement importante pour nos charges de travail, car les applications lisent et écrivent des fichiers volumineux de façon séquentielle. [...] Deuxième, puisque sur un gros morceau, un client est plus susceptible d'effectuer de nombreuses opérations sur un morceau donné, il peut réduire les frais généraux du réseau en gardant une connexion TCP persistante au serveur de morceaux sur une période prolongée. Troisièmement, il réduit l' taille des métadonnées stockées sur le maître. Cela nous permet de conserver les métadonnées en mémoire, ce qui à son tour apporte d'autres avantages que nous allons discuter dans la section 2.6.1.
Enfin, je dois souligner que l' taille par défaut actuelle dans Apache Hadoop est de 128 MB.
dans les HDFS, la taille du bloc contrôle le niveau de déclic de la réplication. Plus la taille des blocs est faible, plus les blocs sont uniformément répartis sur les DataNodes. Plus la taille des blocs est élevée, plus vos données sont distribuées de façon moins égale dans votre grappe.
alors quel est l'intérêt de choisir une taille de bloc supérieure au lieu d'une valeur basse? Alors qu'en théorie, une distribution égale des données est une bonne chose, avoir une taille de bloc trop faible présente certains inconvénients importants. Capacité de NameNode est limité, de sorte que d'avoir 4KB blocksize au lieu de 128MB signifie également avoir 32768 fois plus d'informations à stocker. MapReduce pourrait également profiter de données également distribuées en lançant plus de tâches map sur plus de nodemanager et plus de cœurs CPU, mais dans la pratique les avantages théoriques seront perdus sur ne pas être en mesure d'effectuer des lectures séquentielles, tamponnées et en raison de la latence de chaque tâche map.
en taille normale de bloc OS est de 4K et en hadoop il est de 64 Mb. Parce que pour la maintenance facile des métadonnées dans Namenode.
supposons que nous avons seulement 4K de taille de bloc dans hadoop et nous essayons de charger 100 Mo de données dans ce 4K alors Ici nous avons besoin de plus en plus de nombre de blocs de 4K requis. Et namenode doit maintenir tous ces blocs de métadonnées 4K.
si nous utilisons 64MB de taille de bloc, alors les données seront chargées en seulement deux blocs(64MB et 36MB).Donc la taille de métadonnées est diminué.
Conclusion: Pour réduire la charge sur le namenode HDFS préfèrent 64MB ou 128MB de taille de bloc. La taille par défaut du bloc est de 64MB dans Hadoop 1.0 et de 128MB dans Hadoop 2.0.
il a plus à faire avec le disque cherche du disque dur (disques durs). Au fil du temps, le temps de recherche du disque n'avait pas beaucoup progressé par rapport au débit du disque. Ainsi, lorsque la taille du bloc est petite (ce qui conduit à trop de blocs), il y aura trop de disques recherchés qui ne sont pas très efficaces. Comme nous faisons des progrès de HDD à SDD, le disque cherche le temps n'a pas beaucoup de sens car ils sont des pièces mobiles dans SSD.
en outre, s'il y a trop de blocs, il va déformer le noeud du nom. Notez que le noeud de nom doit stocker la totalité des méta-données (données sur les blocs) dans la mémoire. Dans Apache Hadoop, la taille par défaut du bloc est de 64 Mo et dans Cloudera Hadoop, la taille par défaut est de 128 Mo.
- si la taille des blocs était fixée à moins de 64, Il y aurait un grand nombre de blocs dans le cluster, ce qui fait que NameNode gère une énorme quantité de métadonnées.
- Comme nous avons besoin d'un Mapper pour chaque bloc, il y aurait beaucoup de Mappers, chacun traitant un morceau de données, ce qui n'est pas efficace.
ci-dessous est ce que le livre "Hadoop: le Guide définitif", 3e édition explique(p45).
pourquoi un bloc en HDFS est-il si grand?
les blocs HDFS sont grands par rapport aux blocs disk, et la raison en est réduire au minimum le coût des recherches. En faisant un bloc assez grand, le temps pour transférer les données à partir du disque peut être significativement plus longue que le temps de chercher pour le début du bloc. Ainsi le temps de transférer un grand fichier en plusieurs blocs fonctionne au transfert de disque taux.
Un rapide calcul montre que si le temps de recherche est d'environ 10 ms et le taux de transfert est de 100 MB/ s, pour rendre le temps de recherche 1% de la temps de transfert, nous avons besoin de faire la taille du bloc autour de 100 MB. Le la valeur par défaut est en fait 64 MB, bien que de nombreuses installations HDFS utilisent 128 MB bloc. Ce chiffre continuera à être révisées à la hausse de transfert les vitesses croissent avec de nouvelles générations de disques durs.
cet argument ne devrait pas aller trop loin, cependant. Carte tâches MapReduce normalement fonctionner sur un bloc à la fois, donc si vous avez trop peu de tâches (moins de nœuds dans le cluster), vos travaux seront plus lents que ce qu'ils auraient autrement.
la raison pour laquelle Hadoop a choisi 64MB est que Google a choisi 64MB. La raison pour laquelle Google a choisi 64MB était due à un argument boucles d'or.
le fait d'avoir une taille de bloc beaucoup plus petite ferait augmenter les frais généraux de seek.
le fait d'avoir une taille de bloc modérément plus petite permet aux tâches cartographiques de fonctionner assez rapidement pour que le coût de leur programmation soit comparable au coût de leur exécution.
le fait d'avoir une taille de bloc beaucoup plus grande commence à diminuer le parallélisme de lecture disponible disponible et peut, en fin de Compte, rendre difficile la planification des tâches à l'échelle locale.
Voir La Publication De Recherche Google: MapReduce http://research.google.com/archive/mapreduce.html