18 Kasım 2014 Salı

Hadoop Konfigürasyon Yönetimi


  • Hadoop kümesindeki konfigürasyon dosyaları herbir düğümde ayrı ayrı tutulmakta. Bu dosyaların aynı değerlere sahip olmasını istediğimizde rsync, pdsh yada  dsh gibi komutlar ile dağıtım yapabiliriz.
  • Komut sistemi ile dosyalar dağıtıldığında kapalı durumda olan makinalara ilgili dosyalar iletilmemiş olacaktır. Bu durumda aynı konfigürasyonların tüm düğümlerde aktif olduğuda herzaman garanti edilemez. Bu gibi açıklardan dolayı, komutlar satırı ile dosyaların dağıtılmasından daha gelişmiş olarak Chef, Puppet, cfengine ve bcfg2 gibi araçlarda konfigürasyon yönetimi için kullanılabilir.
  • Bir başka uygulanabilecek yaklaşım ise hadoop-env.sh dosyasında "HADOOP_MASTER" parametresine namenode yada jobtracker ip adresi tanımlanır. Datanode makinalarında servisler başlatılırken konfigürasyonm dosyaları HADOOP_MASTER olarak tanımlanmış olan makinadan konfigürasyonları çekerler ve sonra servisler başlatılır. Bu işlemin aktif olabilmesi için hadoop-env.sh dosyası  HADOOP_MASTER parametresi tanımlandıktan sonra tüm datanodelara dağıtılması gerekir. Yeni eklenen makinalardada bu özelliğin aktif olabilmesi için kickstart scriptlerine eklenmelidir. Bu özellik aktif edildiğinde datanode'lar ayağa kalkarken aynı anda HADOOP_MASTER olarak tanımlı makinaya rsync yapmaya çalışırlar. Büyük ölçekli hadoop kümelerinde bu fazlasıyla yük getirecek ve hatalara sebep olacaktır. Bunun engellenebilmesi için "HADOOP_SLAVE_SLEEP" parametresine 0.1 saniye gibi bir değer verilir. Böylelikle datanode'lar 0.1 saniye aralıklar ile ayağa kaldırılır.
Hadoop namenode, secondarynamenode ve datanode makinalarının IP lerini konfigürasyon dosyalarından öğrenmektedir:
  • masters: secondary namenode IP si bu dosyada tanımlanır.
  • slaves  : datanode makinalarının IP leri bu dosyada tanımlanır.
Bu iki dosyanın sadece namenode ve jobtracker servislerinin çalışacağı makinalarda olması yeterlidir. Datanode'lara dağıtılmasına gerek yoktur.

DataNode ve TaskTracker servislerinin hangi makinalarda çalışacağını slaves dosyasında tanımlayabiliryoruz. Ancak bu durumda Hadoop sistemi çalışmaya devam ederken bir makinayı çıkartma yada ekleme işlemini (Commissioning, Decommissioning) gerçekleştiremiyoruz. Bu işlemleri sağlıklı bir şekilde yapabilmek için :

  • mapred-site.xml dosyasında  "mapred.hosts" özelliğine tasktracker servislerinin çalışacağı makinaları tanımlayacağımız dosya adı atanır.
  • mapred-site.xml dosyasında  "mapred.hosts.exclude" özelliğine tasktracker servisini kapatmak istediğimiz makinaları tanımlayacağımız dosya adı atanır.
  • hdfs-site.xml dosyasında  "dfs.hosts" özelliğine datanode servislerinin çalışacağı makinaları tanımlayacağımız dosya adı atanır.
  • hdfs-site.xml dosyasında  "dfs.hosts.exclude" özelliğine datanode servisini kapatmak istediğimiz makinaları tanımlayacağımız dosya adı atanır.
Ek Konfigürasyonlar:
  • Hadoop varsayılan ayarlarında I/O buffer olarak 4 KB kullanmaktadır. Ancak bu değer genellikle 128 KB olarak ayarlanır. Bu değeri core-site.xml dosyasındaki "io.file.buffer.size" özelliği ile değiştirilebilmektedir.
  • HDFS Block size varsayılan ayarlarda 64 MB  olarak kullanılmaktadır. Ancak genellikle namenode' a fazla yük bindirmemek amacı ile ve map task'lara daha fazla veri vermek amacı ile bu değer 128 MB olarak kullanılmaktadır. Bu değer hdfs-site.xml  dosyasındaki dfs.block.size özelliği  ile değiştirilebilmektedir.
  • HDFS silinen verileri doğrudan silmemekte, çöp kutusuna taşımaktadır. Belirli aralıklar ile çöp kutusu boşaltılmaktadır. Çöp kutusunun hangi aralıklar ile boşaltılacağı core-site.xml dosyasındaki fs.trash.interval özelliği ile belirlenmekte. Varsayılan ayarlarında bu değer "0" olarak  kullanıldığından veriler silindiğinde çöp kutusuna atılmamakta. Verilerin doğrudan silinmesini istemediğimiz durumlarda bu değer değiştirilmelidir.

Hiç yorum yok:

Yorum Gönder