Comparaison des systèmes de fichiers Hadoop et Ceph
Nous allons à présent récapituler1 les principales différentes entre HDFS et Ceph.
- Différences architecturales : HDFS suit le modèle de colocalisation des calculs et du stockage. Les DataNodes HDFS fonctionnent généralement avec des nœuds MapReduce en corésidence, l’idée principale derrière l’ensemble du modèle étant d’amener le calcul aux données. Ceph est conçu comme un service de stockage autonome, bien que les OSD qui stockent des données dans Ceph puissent être colocalisés avec des nœuds MapReduce.
- Compatibilité : les clients HDFS doivent être implémentés à l’aide de l’une des API. HDFS n’a pas été conçu comme un système de fichiers POSIX et ne prend pas en charge une partie de la sémantique POSIX (par exemple, l’ouverture de fichiers existants en écriture). Il existe des solutions de contournement, comme un pilote FUSE, qui permettent de monter HDFS. Toutefois, la plupart des applications doivent être réimplémentées avec un client HDFS si elles ne prennent pas encore en charge la solution de contournement. Ceph, au contraire, expose plusieurs API, comme le pilote Ceph FS conforme à POSIX, qui facilitent grandement l’intégration avec des applications existantes par rapport à HDFS.
- Disposition des données : les NameNodes HDFS exposent l’emplacement physique des blocs aux applications clientes, qui peuvent utiliser ces informations pour améliorer la localité des accès aux données. Ceph est similaire en ce sens que les serveurs de métadonnées exposent toujours l’emplacement de l’objet de données au client quand une demande de données est effectuée.
- Prise en charge des petits fichiers : HDFS ne prend pas en charge les petits fichiers, car il est optimisé pour les blocs de grande taille (64 Mo par défaut). Dans Ceph, la largeur de bande est plus universelle que dans HDFS car elle est généralement de l’ordre de quelques kilo-octets.
- Écritures simultanées : HDFS est un modèle à écriture unique qui n’autorise qu’un seul fichier à écrire dans un fichier à la fois. Ceph prenant en charge plusieurs enregistreurs simultanés, il est le plus flexible des deux systèmes de fichiers.
- Modèle de cohérence : HDFS garantit la cohérence en limitant les écritures à un seul client et en interdisant toute mise à jour de fichier. En revanche, Ceph peut garantir la cohérence séquentielle, sauf dans de rares situations impliquant une partition réseau de certains OSD.
- Mise en cache : HDFS prend en charge la mise en cache à lecture anticipée côté client par le biais du modèle de streaming. Les clients dans Ceph peuvent uniquement posséder des caches de lecture et des tampons d’écriture si le client a reçu un bail du MDS (quand le client a un accès exclusif à un fichier). Quand plusieurs clients accèdent au même fichier dans Ceph, ces baux sont révoqués, forçant ainsi les E/S à être synchrones pour gérer la cohérence.
- Tolérance de panne : HDFS est conçu pour la tolérance de panne avec prise en charge intégrée de la réplication au niveau du bloc et a connaissance des racks. Cependant, le NameNode est un point de défaillance unique dans HDFS. Ceph, en revanche, est assez robuste car il utilise des protocoles pair-à-pair complexes pour garantir une tolérance de panne satisfaisante. La récupération après défaillance dans Ceph est également assez rapide grâce à la présence de journaux d’écriture qui peuvent être relus pour rendre un nœud opérationnel.
Références
- Maltzahn, C., Molina-Estolano, E., Khurana, A., Nelson, A. J., Brandt, S. A., & Weil, S. (2010). Ceph as a scalable alternative to the Hadoop Distributed File System The USENIX Magazine vol.35