Hadoop Distributed File System (HDFS)
Hadoop bir ekosistemdir. Verinin işlenmesini, depolanmasını, analiz edilmesini sağlayan bileşenleri bünyesinde barındırır. HDFS bu ekosistemin en alt katmanında bulunur ve verinin depolanmasını sağlar. Ekosistemin temel amacı küçük ve orta ölçekli donanımların bir arada çalıştırılması ile düşük maliyet ve maksimum işlem gücünü sağlamaktır. HDFS verinin tutulmasını sağladığı gibi; veri işleme sırasında okuma yazma hızını da arttıran bir dosya sistemidir.
HDFS’in datanode ve namenode olmak üzere iki temel bileşeni bulunmaktadır. Datanode’ların görevi veriyi depolamaktır. Namenode ise datanode’ların ve depolanan verinin organizasyonundan sorumludur. Verilerin yönetim işlemini metadata bilgisini tutarak yapar. HDFS üzerinde tutulan verinin birden çok replikası farklı node’larda tutulmaktadır. Bu yüzden node’lardan bir tanesi fail olduğunda hata durumundan etkilenmeden verinin diğer replikası üzerinden işlemler devam eder.
Namenode ve Datanode
HDFS mater – slave mimarisinde hizmet verir. Bir adet namenode ve birden çok datanode bir HDFS kümesini oluşturur. Secondary namenode ise namenode’un Editlog ve Fsimage dosyalarının combine edilip disk üzerine yazılmasından sorumludur. Namenode’un yedeği değil yardımcısıdır denebilir. HDFS üzerinde bir dosya,dizin oluşturma veya dosya açma kapatma gibi işlemler namespace operasyonları olarak adlandırılmaktadır. Namespace operasyonları Namenode tarafından yönetilir. Datanode’lar ise HDFS dosyalarını yani veriyi tutmakla yükümlüdür. Aynı zamanda okuma yazma işlemleri sırasında görev alırlar. HDFS java ile geliştirildiği için java destekleyen herhangi bir sunucu HDFS node olarak kullanılabilir.
Namespace
Namespace HDFS üzerinde yer alan dosya dizin yapısı hakkında bilgileri içerir. Bir container olarak düşünülebilir. HDFS dosya ve dizin yapısı olarak klasik dosya sistemlerindeki gibi hiyerarşik bir yapıya sahiptir. Dosya taşıma, yeniden adlandırma gibi operasyonlar desteklenir. Soft link ve hard link işlemleri ise desteklenmez.
Data Replication
HDFS veriyi blok dizisi şeklinde tutar. Bu depolama işlemi dağıtık mimaride birden çok HDFS node üzerinde gerçekleştiği için bir node üzerinde gelen hata durumunda hizmet kesintisi yaşanmaması ve veri kaybı olmaması için verinin birden çok kopyası(replica) tutulur. Veri bloklarının boyutu Block Size, blokların kaç kopyasının tutulacağı bilgisi ise Replication Factor parametresi ile belirlenir. Bir dosyanın son bloğu hariç tüm blokları aynı boyuttadır. Replication factor parametresinin değeri dosya oluşturulurken ayarlanır daha sonra bu değerde değişiklik yapılabilir.
Düzenli aralıklarla datanode’lardan namenode’a gönderilen heartbeat mesajında blokların durumunu içeren BlockReport bilgisi iletilir. Datanode’un sağlıklı çalıştığı bilgisi de bu mesajda yer alır. Block report mesajı ilgili datanode üzerindeki yer alan blokların listesidir. Namenode metadata olarak dosya adı, dizin, replika sayısı, blok ID gibi bilgileri tutar.
HDFS Metadata
Metadata; HDFS üzerindeki dosyaların sahpileri, dosya izinleri, blok lokasyonları ve dosya boyutları gibi bilgileri içerir. Editlog HDFS metadatası üzerinde yapılan değişikliklerin kayıtlarını tutan dosyadır. HDFS’te bir dosya oluşturulduğunda editloga’a bununla ilgili bir kayıt eklenir.FsImage dosyası ise mapping of block to files denilen hangi dosyanın hangi blokta yer aldığı ile ilgili bilgiler tutulur. Editlog ve fsImage dosyaları namenode üzerinde tutulur.
Namenode başlatıldığında FsImage dosyası belleğe alınır ve bir imajı oluşturulur. HDFS üzerinde meydana gelen değişiklikler sırasında hemen FsImage dosyası güncellenmez. Değişiklikler editlog dosyasına kayededilir. Namenode başlatılırken Editlog dosyasından güncel transaction kayıtları okunur ve güncel bir FsImage dosyası oluşturulur. Ayrıca bu işlem sistem tarafından periyodik aralıklarla tekrarlanır. Bu işleme checkpoint adı verilir ve amacı tutarlı bir metadata ve namespace üzerinde çalışılmasıdır. Checkpoint işleminin ne sıklıkla gerçekleşeceği dfs.namenode.checkpoint.period parametresinin saniye cinsinden ayarlanması ile belirlenir.
HDFS default block size 128 MB’tır. Dosya silme işlemleri sırasında HDFS üzerinde trash dizini kullanılır. Dosya silinmeden önce çöp kutusu görevindeki bu dizine taşınır.
Not: HDFS büyük ölçekli verilerin depolanması için tasarlanmış bir dosya sistemidir. Çok sayıda küçük boyuttaki dosya ile çalışırken HDFS’in gerçek gücü görülemez. Bu dosyalara ait metadata bilgilerinin çokluğu namenode üzerinde yük yaratacağundan performasa olumsuz etkisi olur.
Apache Hadoop’un güncel versiyonu (Mayıs 2021 itibari ile) 3.2.2 versiyonudur. Bir sonraki yazıda Hadoop kurulum adımlarını görebilirsiniz.
- AWS nedir? – Cloud 101 - Mayıs 16, 2024
- Vector Databases - Mayıs 15, 2024
- Data Dünyası Nereye Gidiyor? - Mayıs 8, 2024
Selam Harika bir yazı olmuş