Bir önceki yazımızda Hadoop ile ilgili bilgilendirme yapmıştık. Bu yazımızda ise Hadoop’ta kullanılan HDFS’e (Hadoop Distributed File System) değineceğiz.

HDFS (Hadoop Distributed File System) nedir?

Dosya sistemlerinin temel işlevleri bulunmaktadır. Dosya sistemi, verilerin nasıl saklanacağını ve alınacağını kontrol eder. Dosya sisteminiz klasör ve dosyalar hakkındaki metaverileri (oluşturulma/değiştirilme tarihi, boyutu, dosya sahibi v.s.) tutar. Dosya sistemleri, izin ve güvenlik konusunda da bazı işlevlere sahiptir.

HDFS ise node yapısı ile karşımıza çıkıyor. Veri aldığında bilgileri ayrı bloklara ayırır. Cluster üzerindeki farklı node’lara aktarır. Veriler konusunda herhangi bir sıkıntı yaşanmaması için veriler çoğaltılır ve farklı cluster’lar üzerindeki node’lara kaydedilir.

HDFS ile klasik dosya sistemleri arasındaki fark nedir?

5 node‘a sahip bir cluster’a sahip olduğunuzu ve her Node’un ext4 olduğunu varsayalım. Node’larda bulunan ext4’ü yerel dosya sistemi olarak kabul edelim. Dosya sistemine veri girişi olduğunda, bunları sabit boyutlu bloklara bölmek için bir dosya sistemine ihtiyacımız var. Her dosya sisteminde blok mantığı bulunur ancak HDFS diğer dosya sistemlerinden farklı bir blok mantığı ile çalışmaktadır.

<figcaption>Örnek 1</figcaption></figure>

Yapılan işlemlerde, 1. node’da bulunan verilerden 2. node’daki ext4 dosya sistemi haberdar olamaz. Çünkü tüm node’lardaki dosya sistemleri kendi içerisinde çalışmaktadır. Ayrıca klasik dosya sistemlerinde node’lar arası iletişim olmayacağı için blokların diğer node’lara kopyalanması da mümkün değildir. HDFS, dosyaların belirlenen şekilde farklı cluster ve node’lar arasında geçiş yapabilmesini ve kopyalanabilmesini sağlamaktadır.

HDFS sistemine dosya yüklediğinizde yeni sürümlerde otomatik olarak 128 MB boyutlu bloklara bölünüyor. Dosya sistemi elde ettiği verilerin birden fazla kopyasının oluşturulmasına özen gösterir. Örneğin, elinizde 700 MB veri varsa HDFS kullanmanız durumunda en az 2.8 GB‘lık boş alana ihtiyacınız olacaktır.

Kullandığınız 700 MB veri, 128 MB bloklara ayrılır. Elimizde 5 adet 128 MB‘lık ve 1 adet 60 MB‘lık bloklar bulunuyor. HDFS, hem bu 6 blokta bulunan verilerin hangi node’larda tutulacağına hem de hangi node’lara kopyalanacağına karar verecektir.

Örnek 1 görselinde görüldüğü üzere, HDFS yerel dosya sisteminin yerini almaz. Ext4 dosya sistemleri sadece kendi bloklarından haberdar olduğu için büyük veri depolanan sistemlerde HDFS’e ihtiyaç duyulmaktadır.

En çok kullanılan HDFS komutları nelerdir?

hdfs dfs -mkdir /tai (Dosya oluşturma komutu)
hdfs dfs -copyFromLocal /kaynak /hdfs-hedef (Local dosyanın HDFS sistemine kopyalama komutu)
hdfs dfs -copyToLocal /hdfs-kaynak /hedef (HDFS’te bulunan dosyanın local sisteme kopyalama komutu)
hdfs dfs -count /klasör/* (HDFS sistemindeki dosya sayısını yazdırma komutu)
hdfs dfs -cat /klasör/dosya (Belirtilen dosyanın içeriğini görmeye yarayan komut)
hdfs dfs -rmr /kaynak/* (Dosya silme komutu)
hdfs dfs -cp /kaynak/dosya /hedef (Dosya kopyalama komutu)
hdfs dfs -ls /klasör (Dizin içerisindeki dosyaları listeleme komutu)
hdfs dfs -mv /kaynak/dosya /hedef (Dosya taşıma komutu)

hdfs dfs -chown -R owner:group /klasör/* (Dosyaların yetkilerini görmek için kullanılan komut)

hdfs dfs -chmod +x /klasör/* (Yetki değiştirme komutu)

hdfs dfs -touchz /klasör/dosya (Boş dosya açmamıza yarayan komut)

HDFS’de kullanılan dosya sistemleri nelerdir?

Text

  • Özel karakterlerle ayrılmış text dosyaları, CSV ve JSON gibi kayıtları saklayabiliriz.
  • Sorgulama performansı düşüktür.
  • Yazma performansı yüksektir.
  • Büyük verileri hızlı bir şekilde HDFS sistemine aktarmak istediğimizde tercih nedeni olabilir.
  • İlişkisel veritabanlarına aktarımda CSV iyi bir tercih olacaktır.

Sequence File

  • Key-value değerinden oluşur.
  • MapReduce, input/output formatı olarak kullanılır.
  • Key-value şeklinde saklandığı için, text dosyalarına kıyasla ayrıştırılması(parse) daha basittir. Çünkü text dosyalarında tüm satırlar ayrıştırılır.
  • Sıkıştırılmış(compressed) dosyalar tekrar bloklara bölünebilir. Aynı durum text dosyalarında geçerli değildir.
  • Text dosyalarına göre daha az yer kaplar.

Avro

  • Veriler bir metaveri(metadata) bilgisiyle kaydedilir. Böylelikle veri tiplerinde kolaylıkla değişiklik yapabiliriz.
  • Dosyalar bloklara ayrılabilir. (Splittable)
  • Blok olarak sıkıştırma(compression) desteklenir.
  • Veri yapısı sıklıkla değişiyorsa Parquet ve ORC gibi dosya formatlarına göre daha kullanışlıdır.
  • Veri okuma hızı, Parquet ve ORC formatlarına göre daha yavaştır.

Parquet

  • Veriler kolon ve sütun halinde tutulur.
  • Veri yazma hızı, Avro formatına göre daha düşüktür fakat veri okuma hızı Avro’dan daha yüksektir.

ORC

  • Veriler Parquet gibi sütun ve kolon biçiminde tutulur.
  • Veri okuma hızı Avro’dan daha yüksektir.
  • Genel olarak yapısı Parquet ile aynıdır fakat sıkıştırma oranı daha yüksektir ve transactional işlem yapılabilir.