Sarı Fil ve Arkadaşları Dövüş Kulübü Kuruyor.. HDFS” Ortaya Karışık Yazılım Serisi — 8

Kemalcan Bora
6 min readJan 23, 2021

Previously on Ortaya Karışık Yazılım Serisi (Mahallenizin emekli albayı Apache Airflow“ Ortaya Karışık Yazılım Serisi — 7) => LINK

İlk önce Hadoop’un ne olduğuna dair ufak bir bilgi sahibi olmamız gerekiyor.

Büyük veri setleri için açık kaynak kodlu, dağıtık depolama ve dağıtık prosesleri bilgisayar kümelerinde yapılmasına olanak sağlayan bir yapı diyebiliriz. Aslında fikir basitce kendimizi tek bir harddrive’e niye bağlıyoruz ki abi bunları birleştirelim benceden yola çıkarak oluşmuştur.

Peki bu Hadoop nasıl ortaya çıktı aslında her şey Google’ın 2003–2004 yıllarında GFS(Google File System)[1] ve MapReduce[2] hakkında makale yayınlaması ile başladı. Yahoo ise aynı zamanlarda Nutch isimli web search engine geliştirdi. 2006 yılında ise Hadoop ortaya çıktı.

Bu iki isime dikkat “Tom White” ve “Doug Cutting” bu iki abi aslında kullandığımız big data araçlarını yazan geliştiren abiler oluyor. Kendileri Lucene, Nutch, Hadoop’da direk çekirdek kadroda hatta Hadoop tarafında direk co-founder. Bununla birlikte Apache Software Foundation [3] da yöneticilik yapıyorlar.

https://fm.cnbc.com/applications/cnbc.com/resources/img/editorial/2013/05/23/100762110-hadoop.1910x1000.jpg

Hadoop’un sarı fil olmasının sebebi ise Doug’un çocuklarının sarı fili olması ve bununla çok fazla oynaması.

HDFS: nedir, nasıl çalışır ?

Şöyle düşünelim önümüzde 4 tane dandik bilgisayarımız ve bu bilgisayarların her birine ait 1 TB harddiskimiz var elimizdeki dosya ise 3 TB ne yapmalıyız? HDFS aslında aklınıza gelen ilk şeyi yapıyor ve bloklara ayırıyor bu blokların default değeri 128 MB (yani burada gerçekten büyük bir veriden bahsediyoruz.)

https://www.tutorialspoint.com/hadoop/images/hdfs_architecture.jpg

Bu bloklar birkaç bilgisayarında saklanabilir ve her bloğun sadece bir kopyasını depolamaz. Failed olayları için aslında her bloğun birden fazla kopyasını depolar ve böylece her hangi bir node düşerse HDFS bununla başa çıkabilir ve bu bloğun yedek kopyası olan farklı bir bilgisayardan bilgi almaya başlayabilir.

HDFS Mimarisi

NameNode ve DataNode lardan oluşan HDFS yapısına baktığımız zaman

NameNode: DataNode’ların nerede olduğunu ve ne yaptığını bilir. Yani temel olarak, belirli bir dosya adının büyük bir tablosunun koruması gibi düşünebilirsiniz.HDFS’de sanal bir dizin yapısı ve bu dosyayla ilişkili her bloğun her kopyasını bulmak için nereye gideceğini NameNode bilir.

DataNode: Veri düğümleri aslında her dosyanın her bloğunu depolayan şeydir ve bu bloklar kopyalar ve çoğaltılmasını korumak için birbirleriyle de konuşuyorlar.

“Namenode olmadan dosyası sistemi çalışmaz. Bu sepeple onu korumak önemli. Bunun da iki yolu var: Dosya sisteminin yedeklelerini Namenode’un diskinden almak. [4]”

ClientNode: Sistemin son kısmı, verilerin yüklenmesinden ve sonuçların alınmasından sorumlu olan İstemci Düğümleridir.

Secondary Namenode: Genelde farklı bir fiziksel sunucuda çalışır. Çünkü yoğun işlemci ve bellek kullanımına ihtiyacı vardır. Periyodik olarak namespace imajı ile edit loglarını birleştirerek diske yazar ki edit log ları aşırı büyümesin. Birleştirilmiş namespase imajını saklar. [4]

En genel özet: NameNode it köpek takımının başında takılan dayı, SecondaryNode dayının sağ kolu,ClientNode “benim bir tanıdık var soruşturayım” diyen adam. DataNode it köpek ekip üyeleri.

https://sensaran.files.wordpress.com/2015/11/hdfs-image.png?w=627

HDFS nasıl dosya okur

ClientNode, NameNode’a gider der ki “ya bana X dosyası lazım nereden buluruz” NameNode’da der ki “datanode-1 ve datanode-5'e git çözsünler senin işini”

https://npntraining.com/blog/images/anatomy_file_read.png

HDFS nasıl dosya yazar

ClientNode bir arsa almış müteahhittir. Bina dikmek istediğini belediyeye belirtir(NameNode) belediyede derki “tamam kardeş ben senin belgeleri aldım senin için yeni belgeler oluşturdum.” İzini alan ClientNode belediyenin su, elektrik, yol işlerinden sorumlu dayılarına gider ve der ki “ben belediyeden izin aldım başlayabiliriz.” Bunu duyan DataNode’lar imece usulu birbiri ile konuşarak elektrik,yol,su bağlantısını birbiriyle konuşarak hallederler ve ClientNode’a işleri bitince kardeş biz bitirdik derler, ClientNode ise tekrar belediyeye(NameNode’a) gider ve bittiğine dair bilgi verir.

https://www.corejavaguru.com/assets/images/content/hdfs-data-flow-write.png

NameNode Resilience ile yansın geceler

https://i.redd.it/a07mti5yvol41.jpg

Tek bir NameNode’um var başına bir şeyler gelirse ne yapmalıyım sorusunun kısmi cevaplarını ise bu bölümde bulacağız.

  • Backup MetaData: NameNode local diske ve NFS’e yazabilir.
  • Secondary NameNode: Tek yaptığı, NameNode edit log’un birleştirilmiş bir kopyasını korumaktır. Yani aslında bir NameNode değil, sadece bu edit log’un her zaman bir kopyasını muhafaza ediyor.
  • HDFS Federation: “Namenode dosya sistemindeki her bir dosya ve dizin için ana bellekte bir referans tutar. Bu sebeple cluster büyüdükçe ve dosya/dizin sayısı çoğaldıkça cluster büyüklüğü Namenode ana belleği tarafından sınırlanır. Hadoop 2.X ile beraber bu sınıra bir özüm gelmiştir: İlave Namenode’lar eklenir ve her bir nemenode namespace ağacının belirli yerlerini saklar. Örneğin Namenode1 /user diznini tutarken Namenode2 kalan dizinleri tutabilir. Böylelikle her bir namenode farklı bir isim alanını ve bu alanla ilgili metadata ve blok havuzlarını (block pool) yönetir. Bir namenode arızalansa bile diğer namenode ların alanları ve dizin/dosyaları çalşmaya devam eder. HDFS’e ulaşmak isteyen clientlar hangi dizinin hangi namenode tarafından yönetildiğini client-side mount tables sayesinde bilirler.[4]”

Eee sık sık dosya atar mısın?

Bu kadar hikaye sonrasında artık giriş yapma zamanımız geldi terminalden ilk önce hortonworks platformuna bağlanıyoruz daha sonra gerek localden gerek github üzerinden dosyaları HDFS üzerine taşıyoruz.

ssh pass: maria_dev

maria_dev için ana dizinimin ve HDFS’nin içeriğini görebiliriz bunun için yapmamız gereken şey;

hadoop fs -ls

Şimdi boş bir dosya create edelim ismi örnek olsun

hadoop fs -mkdir ornek

Şimdi ilk önce github üzerinden bir örnek ile ilerleyeceğiz wget kullanarak direk cloudera platformunun içerisine inidirip HDFS’e taşıyacağız. İkinci kısımda ise başka bir pc’de bulunan dosyayı cloudera üzerindeki HDFS’e taşıyacağız.

Github’da bir çok csv uzantılı dosya bulabilirsiniz ben şu adreste bulunan veriseti üzerinden gideceğim..

wget https://github.com/kiln/flourish-api-demo-csv/blob/master/example-data.csv

  • ls komutu ile görebilirsiniz. Akıllara gelecek olan soru şu olabilir “ya ben hadoop fs -ls yaptım göremedim neden?” göremezsin abi çünkü hadoop fs ayrı senin indirdiğin yer(local) ayrı. Sen hadoop tarafında HDFS’e daha taşımadın ilk oraya taşı.

hadoop fs -copyFromLocal example-data.csv ornek/example-data.csv

hdfs dfs -copyFromLocal <taşımak istediğimiz dosyanın konumu>  <nereye taşıyacağımızın konumu>ornek kod: 
hadoop fs -copyFromLocal example-data.csv ornek/example-data.csv

hadoop fs -rm ornek/example-data.csv ile .csv dosyamızı siliyoruz.

hadoop fs -rmdir ornek ile klasoru siliyoruz.

Ek olarak bir sürü özelliğini görebilirsiniz.

Şimdi kendi bilgisayarımızda bulunan bir dosyayı gönderelim. Bunun için SCP (Securely Copy Files) kullanılabilir.

scp /path/to/file username@a:/path/to/destination
scp -P 2222 /home/kcan/Downloads/term-deposit-marketing-2020.csv aria_dev@localhost:/home/maria_dev

cloudera tarafında ls dediğim zaman dosyayı görebiliyorum.

Daha önce dosyaları ve örnekleri sildiğimiz için tekrar klasor olusturuyoruz ve dosyamızı taşıyoruz.

hadoop fs -mkdir ornek
hadoop fs -copyFromLocal term-deposit-marketing-2020.csv ornek/term-deposit-marketing-2020.csv

Yine klasik kapanışımız ile kapatalım. Ortaya Karışık Yazılım Serisi’ne kendinizi yakın hissediyorsanız paylaşarak destek olabilirsiniz yaptığım hata ve öneriler için Twitter üzerinden ulaşabilirsiniz.

Sarı Fil ve Arkadaşları Dövüş Kulübü Kuruyor.. MapReduce’” Ortaya Karışık Yazılım Serisi — 9

Referanslar

--

--