Anasayfa / Hortonworks HDPCA Sertifikasyonu / Hortonworks HDPCA: Define and Deploy A Rack Topology Script

Hortonworks HDPCA: Define and Deploy A Rack Topology Script

Merhaba, Hortonworks HDPCA Sertifikasyon Sınavı Hazırlık yazı dizisi kapsamında bu yazımızda RACK awareness konfigürasyonu yapacağız.

Rack Awareness Nedir?

Hadoop Cluster kurum veya şirketin ihtiyacına göre bazen bir kabine (rack) sığmayabilir. Bu sebple birden fazla kabin kullanmak zorunlu hale gelebilir ki belli bir ölçeğin üzerindeki şirketler onalrca, yüzlerce kabin kullanıyorlar. Hadoop dağıtık hesaplama (distributed computing) yaptığı için doğal olarak veri merkezi içindeki bilgisayar ağını çok fazla kullanır. Genelde kabin içi ağ bağlantısı, kabin dışına göre daha performanslıdır.  Hadoop hangi sunucunun hangi kabinde olduğunu bildiğinde hem replikasyonu ona göre ayarlamaya çalışır ki; bir kabin tamamen arızalandığında verinin bir kopyası arızalı kabin dışında olsun. Ayrıca veri işlenirken kabin dağılımı dikkate alınsın. Çünkü kabin içi veri işleme kabinler arası veri işlemeye göre daha performanslıdır.

Aşağıdaki şekilde kendi kişisel bilgisayarımda bulunan Hadoop clusterın hayali olarak iki kabine dağılmış hali görülmektedir. Bu dağılıma göre topology scriptini güncelleyeceğim.

Aslında Hadoop’a hangi sunucunun hangi kabinde olduğunu söyleyeceğiz. Ambari üzerinden yaptığımız ayarlama rack-topology.sh veya topology_script.py ile rack_topology.data vaya topology_mappings.data  dosyalarını güncelleyecek. Neden iki farklı isim yazdık? Hadoop son sürümlerde sh script yerine Python script kullanmaya başladı ve dosya ismlendirmesini değiştirdi. Bu sebeple buraya da iki dosya ismini de yazdık, /etc/hadoop/conf/ dizininde rack ile başlayanlar yoksa topology ile başlayanlar üzerinde değişiklik yapılacaktır. Burada değişikliği biz yapmayacağız bunu Ambari arayaüzü kullanarak gerçekleştireceğiz. Zaten kendi elinizle yapsanızda Ambari HDFS ve MapReduce2’yi tekrar başlattığında sizin yazdıklarınızı değiştirecektir. Ayrıca ben yukarıdaki şekilde kabine MasterNode’ların da yerleşimini gösterdim. RackAwareness kavramı verinin saklanması ve daha etkin işlenmesi ile ile ilgili olduğundan topology_mappings.data dosyasında sadece DataNode’lar değiştirilir ve listelenir.

Ambari ile DataNode’ların rack yarleşimi:

Bu yöntemde Ambari arayüzü kullanılarak nodelar yukarıda şekilde belirtildiği gibi kabinlere yerleştirilecektir. Yerleştirmekten kastımız fiziksel değil elbette. Mantıksal bir yerleştirme. Ancak canlı sistemlerde bunun fiziksel yerleşimi ile mantıksal yerleşimi tutarlı olmalıdır. Aşağıda hostları görüyoruz. Kırımzı dörgen içinde hepsinin default-rack içinde olduğu görülüyor.

 

Rack-1’e yerleştireceğimiz sunuculara (node1,node4,node6) ait kutucukları işaretliyoruz. Actions’dan aşağıda görüldüğü şekilde Set Rack diyoruz.

 

/rack-1 olarak belirliyoruz (Siz başka bir isim verebilirsiniz)

 

Aynı işlemi kalan sunucular için yapıp /rack-2 ismini veriyoruz. Yalnız bu işlemi yaparken rack-1’e yerleştirdiğimiz sunucuların kutucukları üzerindeki işaretleri kaldırmayı unutmayın. Aşağıdaki resimde sunucularımızı belirlediğimiz kabin planlamasına göre yerleştirmiş olduk. Sınavda muhtemelen sizlere şu sunucuları şu kabine bu sunucuları şu kabine yerleştirin gibi bir görev verilecektir.

İşlem bittikten sonra Ambari HDFS ve MapReduce2’yi yeniden başlatmamızı isteyecektir. Sunucuların rack yerleşimi aşağıdadır.

Hepsi bu kadar. Artk sistemimiz rackawareness oldu.

İlave Bilgiler:

Mevcut rack-topology.sh/topology_script.py ve  rack_topology.data/topology_mappings.data dosyalarımızı görelim. Ben şuan HDP 2.6.2 sürümü kullandığım için bende topology_script.py ve topology_mappings.data dosyaları mevcut. İki dosya da her sunucuda /etc/hadoop/conf/ dizini altında bulunmaktadır. Bu dosyalar her sunucuda aynı dizinde ve aynı içerikte olmalıdır. Bu sebeple ben node3 sunucusunda dosyaları değiştirdikten sonra pssh ile tüm sunucularda aynı yerlerine kopyalayacağım. Eğer pssh yok ise her sunucuya tek tek kopyalamak gerekir. Öncelikle dosyaların mevcut içeriklerini bir görelim.

topology_script.py:

[root@node3 ~]# cat /etc/hadoop/conf/topology_script.py
#!/usr/bin/env python
'''
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
'''

import sys, os
from string import join
import ConfigParser


DEFAULT_RACK = "/default-rack"
DATA_FILE_NAME =  os.path.dirname(os.path.abspath(__file__)) + "/topology_mappings.data"
SECTION_NAME = "network_topology"

class TopologyScript():

  def load_rack_map(self):
    try:
      #RACK_MAP contains both host name vs rack and ip vs rack mappings
      mappings = ConfigParser.ConfigParser()
      mappings.read(DATA_FILE_NAME)
      return dict(mappings.items(SECTION_NAME))
    except ConfigParser.NoSectionError:
      return {}

  def get_racks(self, rack_map, args):
    if len(args) == 1:
      return DEFAULT_RACK
    else:
      return join([self.lookup_by_hostname_or_ip(input_argument, rack_map) for input_argument in args[1:]],)

  def lookup_by_hostname_or_ip(self, hostname_or_ip, rack_map):
    #try looking up by hostname
    rack = rack_map.get(hostname_or_ip)
    if rack is not None:
      return rack
    #try looking up by ip
    rack = rack_map.get(self.extract_ip(hostname_or_ip))
    #try by localhost since hadoop could be passing in 127.0.0.1 which might not be mapped
    return rack if rack is not None else rack_map.get("localhost.localdomain", DEFAULT_RACK)

  #strips out port and slashes in case hadoop passes in something like 127.0.0.1/127.0.0.1:50010
  def extract_ip(self, container_string):
    return container_string.split("/")[0].split(":")[0]

  def execute(self, args):
    rack_map = self.load_rack_map()
    rack = self.get_racks(rack_map, args)
    print rack

if __name__ == "__main__":
  TopologyScript().execute(sys.argv)

topology_mappings.data: cat ile dosya içeriğini görelim.

[root@node3 ~]# cat /etc/hadoop/conf/topology_mappings.data
[network_topology]
node5.datalonga.com=/rack-2
192.168.150.65=/rack-2
node6.datalonga.com=/rack-1
192.168.150.66=/rack-1
node7.datalonga.com=/rack-2
192.168.150.67=/rack-2
node4.datalonga.com=/rack-1
192.168.150.64=/rack-1


Hakkında Erkan ŞİRİN

2014'ten beri hem akademik alanda hem de sektörde pratik anlamda büyük veri ve veri bilimi ile ilgili çalışmalar yürütmektedir. Halihazırda İmpektra Bilişim A.Ş.'de büyük veri yöneticisi olarak çalışmakta olup aynı zamanda Gazi Üniversitesi Yönetim Bilişim Sistemleri doktora öğrencisidir. Büyük veri ve veri bilimi ile ilgili birçok kurum ve şirkete eğitimler vermekte ve projeler icra etmektedir. Çalışma alanları: büyük veri platformlarının kurulum ve yönetimi, büyük veri üzerinde makine öğrenmesi, olağan dışılık tespiti, sahtecilik tespiti, veri hazırlama sürecidir.

GÖZ ATMAK İSTEYEBİLİRSİNİZ

Hortonworks HDPCA: Change the configuration of a service using Ambari

Hadoop sisteminde HDFS, MapReduce, YARN, Tez, Hive, HBase, Spark vb. gibi bir çok servis bulunmaktadır. Hortonworks Hadoop dağıtımında bu …

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir