Spark #16 : Cluster Manager


Nedir?
Cluster manager bir dagitik kernel olarak dusunulebilir. Nasil ki esas kernel tek bir makinede calisan process'leri yonetiyor ve ihtiyaclari olan resource'lari pay ediyor ise, cluster manager de tek bir makineden (daha dogrusu gek bir noktadan) dagitik halde bulunan makineler uzerindeki resourclarin pay edilmeisni saglar. 

Neler var?
Spark'in kendine ait bir stand-alone cluster manageri mevut. Daha sonra Hadoop'tan YARN geliyor (yet another resource negotiatior). Apache Mesos, biraz daha esnek oldugu soylenmekle beraber YARN'a bir alternatif olarak dusunulebilir. 

Spark standalone
Eger basit bir manager istiyor isek bunu secebiliyoruz. 

--master spark://[HOST]:7077/ seklinde cluster manager'i belirtmemiz gerekiyor. hem client hem de cluster metotlarini destekliyor. default olarak spreadOut ozelligi true olarak geliyor. 

spark.deploy.spreadOut=true

bu da su demek. Mumkun oldugunca isi dagitmaya calisacak spark cluster manager. Yani her biri 3 core barindiran 3 node'dan olusan bir clusteriniz var ise, ve 3 executor core isterseniz, her bir node uzerinde 1 adet executor size tahsis (evet tahsis) edilecek demektir. (Bu da bir node'un down olmasi durumunda aksayacak olan is miktarini azaltir heralde. C.N.) 

YARN
--master yarn olarak tanimlamak yeterlidir. Cunku zaten spark-submit calistirilan makinede Hadoop konfigurasyonu yapilmis olmalidir. (HADOOP/YARN_CONF_DIR klasoru dahilinde). Hem client hem de cluster mode'lar desteklenmektedir. num-executors flag'i ile kac executor calistirilacagi (default 2), executor-cores flag'i ile de her bir executor'da kac core calisacagi belirtilir. Bunun disinda queue yapisi da vardir. YARN, uygulamalari onceliklendirirken hangi queue'de olduklarina bakar. Bazi queue'ler digerlerine nazaran onceliklidir. (Mesele 65 yas uzeri)

Kubernetes
Spark 2.4'ten sonra da deneysel olarak k8s destegi getirilmeye calisiliyor. Bu yontemde spark-submit, bir k8s pod olsuturarak burada driver program'i calistirmaya basliyor. driver da executor'lari yine birer k8s pod olarak olusturuyor. Bunlar birbirlerine baglaniyorlar, data isleniyor. Executor'lar daha sonra terminate ediliyor ama master node yerine gecen pod tum loglari persist ediyor ve master node 'completed' state'e geciyor.  Daha fazlasini dokumantasyonda bulabilirsiniz.

Cluster Kurulumu
Eger kendi clusterimizi kurmak ve spark standalone manager ile yonetmek istersek birkac ayar yapmamiz gerekir. Diyelim ki bizim cluster'da 3 tane makine var. Bunlar tabi ki ayni network icerisinde olmali. Bunun disinda spark standalone cluster manager da her bir makinenin adresini bilmeli ki bunlari yonetebilsin. Bunun icin spark kok dizinde conf klasorunde slaves.template dosyasi olacak. Bu template dosya slave makinelerin tanitilmasi icin gerekldiri. Eger hicbir slave makine yoksa default olarak eski ve kadim dostumuz localhost kullanilacaktir. Zaten teplate'i acip bakarsaniz sadece localhost kaydi oldugunu gorururz. Eger gercekten baska makine tanitmak isterseniz bu template dosyasini kopyalayip template uzantisini siliniz ve cluster'i olusturan makine adreslerini ekleyiniz. 

AWS
Tabi ki gunumuzde kendi cluster'ini kurup yonetenler oldugu gibi on-demand calisanlar da var. Bu durumda EC2 guzel secenek sunuyor. Istediginiz zaman istediginiz kadar resource barindiran bir spark cluster'i olsutrabilir ve isiniz bitince kapatabilirsiniz. Boylece kullandigimiz kadar odemis oluruz. 

AWS EC2 uzerinde kolayca spark cluster olusturmak icin harici scriptlerden faydalanilabilir. Flintrock kullanilabilir. Veya bir tik daha ileri giderek AWS'nin `managed` hadoop cluster servisi olan EMR (elastic mapreduce) kullanilabilir ve cok kolay sekilde cluster olusturulup, terminate edilebilir. 


Yorumlar

Bu blogdaki popüler yayınlar

Python'da Multithreading ve Multiprocessing

Threat Modeling 1

Encoding / Decoding