Mühendisin İlk Projesinin Hikayesi

Şirkette ilk çalışmaya başladığım andan beri ilk projemi bitireceğim anın keyifli heyecanını düşünüyorum.
Beni bu kadar heyecanlandıran şeyin aslında ne olduğunu düşündüm önce. Sonra sizlerle bu yolculuğu hikayeleştirerek paylaşmayı istedim.
Öncelikle neden böyle bir heyecan içinde olduğumdan başlayacağım;

  • İlk kez bir proje, okulda ödev amacıyla yazılmış bir  proje olmayacaktı,
  • İlk kez bir çok insanın çalıştığı bir projenin sadece bir bölümünde görevlendirilmek yerine sıfırdan her aşamasında, adım adım bulunduğum bir proje olacaktı.
  • İlk kez bir şirkette makine öğrenmesinin, veri bilim metriklerinlerinin, modellerin kullanılacağı bir projede yer alacaktım.
  • İlk kez solumak istediğim atmosferde, “data scientist” ve “yazılım mühendisliği” arasındaki o bulanık, birbirine karışmış ve keyifli alanda varlık gösterecektim.
  • İlk kez gerçekten ekip çalışması deneyimleyecek,
  • İlk kez bir şirkette “Mühendis” sıfatımla bir projede çalışacaktım.

Bunlar, yıllarca eğitimini aldığım, emek verdiğim mesleğimin bana armağan edeceği güzel hislerdi.
Bu yüzdendir ki, bildiğim, bilmediğim herşeyi ortaya döküp, çalıştım.

Daha doğrusu çalıştık.
Ekip olarak.
Evet burada önce ekip olmayı öğrendim.
Ekip ne idi?
Neden bir ekibe ihtiyaç vardı?
Birlik, kuvveti, motivasyonu, verimliliği ne kadar arttırırdı?
Tüm bunları deneyimledim önce.

Proje, ben ve benimle birlikte staj yapıp sonrasında birlikte işe girdiğimiz diğer arkadaşım Ömer’e atandı.
Ekibimizde bir Veri bilimcisi(Data Scientist) ve bir Veri Mühendisi (Data Engineer)vardı.
Biz iki yeni mezundan daha deneyimli, daha tecrübeli.

Projeyi ayrıntılı anlatamam şirket politikaları gereğince ama yakın zamanda bir konferansta sunmayı planlıyoruz, belki o zaman detayını paylaşabilirim. Şimdi kapsamında kısaca bahsedeyim;

Fabrikaya yerleştirilen bazı sensör verilerinin analizi ve bu analiz sonucu sensörlerdeki anormal veri durumlarının önceden tahmini, anlık tespiti ve görselleştirilmesi  adımlarını kapsayan bir proje.

İlgilenenlerin de bildiği gibi bu tip projelerde önce veriyi tanımamız, hangi verilere sahip olduğumuzu görmemiz gerekiyordu. Sensörler biz işe girmeden önce takılmıştı ve ilk aşama olarak bu verileri depolamak için NoSQL bir veritabanı kullanılıyordu.

Ancak ekipçe farkındaydık ki, giderek artan verilerin için ;
Veri depolamada kullanılan bu yaklaşım günümüz dünyası için yetersizdi. Bunun  için dağıtık dosya sistemlerinden birinin kullanılması kararı verildi. Hangi sistem için alt yapı oluşturulabileceği uzun uzun konuşuldu, hesaplandı.

Bu aşamada ben de tezimde kullandığım teknolojilerin alt yapısından ve kullanılabilirliğinden bahsettim, detaylarını ekiple paylaştım.
Sunumlar hazırladım, şirketteki sisteme hangi alt yapının kurulmasının uygun olduğunu tartıştık.

Herkes bildiğini, araştırma ile destekleyerek ve fikriyle harmanlayarak ortaya koydu.
Daha sonra belli kararlarlar doğruldusunda işlemlere başlandı. Veriler, veri mühendisi pozisyonunda çalışan arkadaşlar sayesinde yeni sisteme aktarıldı. (O aşamayı da gözlemleyerek tecrübe ettim)
O esnada ben, ekip arkadaşım Ömer ve veri bilimcimiz birlikte, elimizdeki sensör datası örneği ile problemimize nasıl yaklaşacağımızı araştırıyorduk.

“Amacımız doğrultusunda elimizdeki verileri nasıl kullanabiliriz?”

sorusunun yanıtı için, bizim projemize yaklaşım olarak benzer olduğunu düşündüğümüz onlarca makale okuduk. (Makalelerin hepsi İngilizce idi. Bu yüzden dilin önemini bir kere daha belirtmek isterim.)
O projelerde kullanılan yaklaşımların, bizim verilerimize uyarlanabilirliğini tartıştık.

Okuduğumuz yöntemlere ilave yöntemler de ekleyerek denemeler yaptık.

Bir kere…
İki kere…
Üç kere…
Dört kere…

***

Amacımıza ulaşana kadar bu döngüyü bir süre tekrarladık.
Çünkü veri analizi, deneysel bir süreçti.
Denedik.
Sabrettik.
Ve sonunda bir gün uygun yöntemi keşfettik.
Okuduğumuz makalelerin hiç birine benzemiyordu oysa bulduğumuz çözüm yöntemi.
Ancak bunun için üzülmedik.

Çünkü bizi doğru yönteme götüren şey; sadece o an değil, tüm süreçti.

Bilgimiz, eforumuz, zamanımız, ekip içi yaklaşımımız, sabrımız pekişmişti tüm bu süreçte.
Sonra başladık bulduğumuz yöntemin detayların keşfetmeye.
Satır satır irdeledik.
Nerede, neyi, nasıl yapıyoruz inceledik.
Sonra akan (real-time) sensör verilerini, bulduğumuz yönteme uygun biçime getirdik.

Bu arada yeni teknolojiler de kullandık.
Kullanmak istediğimiz teknolojiler hakkında bilgili olan hocalardan birer ikişer günlük eğitimler de aldık.

Sonrasında iş tamamen ben ve Ömer’deydi.
Dedim ya bu iş aslında veri bilimi ve yazılım mühendisliğinin arasında bulanık ama çekici bir yer diye. İşte o yerde iki yazılım mühendisliği mezunu arkadaş, daha önce hiç kullanmadığımız bir framework seçtik, projemizin görsel kısmını yazmak için;
DJANGO.

Django bir Python web framework’ü. Bizim uygulamamızın da bir web ortamında görselleştirilmesi isteniyordu.

Neden Django seçtiniz diye sorarsanız, hem öğrenmek istedik hem de veri biliminde bir çok işi Python kullanarak yapıyoruz, görselimizin de dili Python olsun istedik.
Sıvadık kolları.
Önce projenin gerçek kullanıcıları ile bir araya geldik.
Neler istediklerini, neden istediklerini sorduk.
Onların taleplerini dinledik,
nasıl bir ekran ile karşılaşmak istediklerini sorduk,
nasıl en kolay bu sistemi kullanabileceklerini anlattık.
kullanıcının taleplerinin sınırlarını aşmadan, doğru sorularla onları doğru yaklaşıma yönlendirdik.

Bir yandan da Django dersleri izledik internetten. Ufak çaplı deneme uygulamaları geliştirdik.
Bu sayede elimiz alışıyor, yapıya ısınıyorduk.
Sonrasında projenin tasarım aşamasına başladık.

Ne sunuyoruz,
Nasıl sunmamız bekleniyor,
Peki biz bunun için ne yapacağız?
Önce ekranlarda karar verildi.
Bir ekran için, harita tasarımı gerekiyordu.
Tasarımcımız ile görüşmeler, çalışmalar yaptık.
Haritanın tasarımıyla, ikonların tasarımıyla bizzat ilgilendim.
Sonra ekip arkadaşım ile modülleri paylaştık.
Geliştirdik,
Geliştirdik,
Geliştirdik…

Bu esnada yıpranmadım dersem, size epey düzmece bir hikaye anlatıyor olduğumu düşünmelisiniz. Çünkü bu aşamaların her birinde ayrı bir stres seviyesi oluyor.

Yapamayacağımızı düşündüğümüz çok kısım oldu. -Uğraştık.
Teslim tarihine yetişmez dediğimiz çok yer oldu. -Mesai yaptık.
Yazdığımız kod zaman zaman çalışmadı, ekran tasarımlarımız sağa sola kaydı. -Topladık.
Bu süreçte planlanmayan bir çok şeyi eklemek/değiştirmek durumunda kaldık.

Öyle, ya da böyle bir gün aniden bir telefonla “acil projenin ilk halini canlıya almamız gerekiyor” denildi.
Bu acil ofise dönüp mesai yapmamız demekti.
Sizde işler nasıl ilerliyor bilmiyorum ama burada herşeyin bir planı olduğu kadar plansız olabilecek şeylere de açık olmanız gerekiyor.

Hatta o gün sizler de anlık durumlara alışın diye Instagram’da hikaye paylaşmıştım. Bu gibi acil durumlar bu işin bir parçası. Ve ben bunun bilincindeydim.
Hiç hayıflanmadan ofise geri döndük.
Ben epey heyecanlıydım.
Daha önce ne Ömer ne de ben, bir projeyi “canlıya” almamıştık yani kullanılabilir duruma getirmemiştik.

Yine bir video açtık.
Tüm adımları takip ettik.
Aralarda hatalar da aldık.
Acelemiz de vardı.
Aslında projede tam da bitti sayılmazdı ama ilk sürüm için yeterli düzeyde olması gerektiği gibi çalışıyordu.
Kurcaladık, epeyce kurcaladık,
Eski çalıştığım yerde sevdiğim bir abinin bir lafı vardı;

“Seni bir kuyuya atacaklar, oradan çırpına çırpına çıkmaya çalışacaksın, çıktığında bu işi öğrenmiş olacaksın”

O an kendimi o kuyuda hissettim.
Endişe, telaş ve mutluluk karışımı bir hissin içinde gibi.
Doğum yapan eşini kapıda bekleyen bir erkek gibi.
Köpek korkusunun üzerine giden kadının, bir köpeği sevmesindeki gibi bir his.
Tüm uğraşlar sonucunda,
İlk projemiz hayata geçti.

Bir dahaki projede aynı heyecan ve keyfi alır mıyım bilmiyorum. Ama defterime proje ile ilgili “yapılacaklar listesi” yazmıştım.
O listenin her maddenin karşısında bir tik gördüğümdeki mutluluğumu tarif edemem.

Fakat fotoğrafını çekebilirdim!

Çektim. 🙂

Hikayeme ortak olduğunuz için çok teşekkür ederim. 
Sizler de benimle bu şekilde hislerinizi paylaşırsanız mutlu olurum.

Sevgiler…

Elasticsearch Kurulum Adımları

ELASTICSEARCH KURULUM ADIMLARI

1-) Önce homebrew yüklüyoruz, bunun için

https://brew.sh/ sitesindeki bu linki terminal’e kopyalıyoruz.

/usr/bin/ruby -e “$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)”

! Bende zaten yüklü olduğu için sadece update edeceğim

2-) Elasticsearch’ü yüklemeye geçelim

brew install elasticsearch

3-) /usr/local/Cellar/elasticsearch/

dizinindeki version numarası dosyasına girin.

4-) ./bin/elasticsearch

yazın ve elasticsearch’ü çalıştırdınız.

5-) Kontrol etmek için

http://localhost:9200 yazın ve şu ekranı görüntüleyin;

Tebrikler, başarıyla kurulumu gerçekleştirdiniz!  🙂

Richard Phillips Feynman Kimdir? | Feynman Teknikleri

Merhaba arkadaşlar.

Bugün size dünyaca ünlü ve başarıları ile 20. yy’a damga vurmuş dahi bir fizikçiden bahsedeceğim.

Richard Phillips Feynman


Merakı çok küçük yaşlarda başlamış!


1918’de ABD’nin New Yoɾk eyaletinde dünyaya gelmiş olan bilim insanı, tıpkı Enistein gibi konuşmayı geç öğrenmiş. Ancak henüz küçük yaşlardayken bile öğrenmeye ve araştırmaya çok meraklıymış. 12 Yaşındayken komşularının radyolarını tamir ediyor, 13 yaşında ise yüksek matematik(Kalkülüs) kitapları okuyormuş.

Türevi/İntegrali, kendi kendine 15 yaşında enine boyuna öğrenmiş.


Öyle bir insan düşünün ki henüz 15 yaşındayken kendi kendine trigonometriileri algebra, sonsuz seriler, analitik geometri ve hem türev hem de integrali tüm yönleriyle öğrenmiş.
Üniversiteye girmeden önce, kendi yöntemiyle yarı-türev gibi konuları türetiyor ve deneyler yapıyormuş. (Sizce de kulağa delice gelmiyor mu?)

Başarılarını sıralayacak olursak :


  • Lisedeyken, New York Üniversitesi’nin matematik yarışmasını kazanmış.
  • 1935’te MIT’nin Fizik Bölümü’ne girmiş. Fakat MIT’de Kuantum Mekaniği dersi olmadığı için o konudaki kitapları okuyarak Kuantum Mekaniği öğrenmiş.
  • MIT’den mezun olan Feynman, daha sonra doktora için PrincetonÜniversitesi’ne kabul edilmiş. Hatta doktora tezi ile ilgili bir seminer esnasında dinleyiciler arasında ünlü fizikçiler Einstein, Pauli ve Neumann varmış.
  • 1942’de ABD’nin savaşa katılmasıyla birlikte, Manhattan Projesi(atom bombası projesi) için birliğe çağırılmış.
  • Burada Nazilerden kaçıp ABD’ye sığınan, Alman fizikçi Hans Bethe  tarafından kuramsal bölümün önderi olarak atanmış ama bu görevi aldığında henüz 24 yaşındaymış.
  • Manhattan Projesi’nde Feynman, kritik kütle için gerekli olan miktarını tespit etmek için çalışıp hipotezini denemek için Los Alamos’u havaya uçurmadan birçok deney araçları geliştirmiş.
  •  Uranyumun parçalanması sırasında güvenlik sorunuyla uğraşırken, Feynman çalışanların ışıma zehirlenmesinden korunması için prosedürler geliştirmiş. (Çünkü iş güvenliği önemli 🙂 )
  • Savaş sonrası Cornell Üniversites’ne gidip burada atomaltı parçacıkların karmaşık yapısı için basit bir gösterim geliştirmiş. Onun bu gösterimi Feynman Çizelgeleriolarak biliniyor.
  • Savaş bittikten sonra, 1965’te Kuantum elektrodinamiğine yaptığı katkılardan dolayı Itiro Tomonaga ve Julian Schwinger ile birlikteNobel Ödülüne layık görülmüş.
  • Tüm bunların yanısıra şiirle, resimle ve müzikle de ilginiyormuş. En büyük hobilerinen biri de Bongo çalmak.

Gördüğünüz gibi oldukça başarılı bir bilim insanı. Bu kadar bilgiyi öğrenip kullanabilmek için neler yapmış merak ediyor insan!


Biraz daha araştırınca bu başarıyı sağlamak için kullandığı teknikleri olduğunu keşfettim.
Peki ben bunu neden şimdi keşfediyorum?
Çünkü “Fizik derslerinden nefret ediyordum.”
“Bildiğim tek fizikçi Enistein, Newton, Galileo gibi herkesin bildiği fizikçilerdi.” Daha fazlasını okumak için hiç vakit ayırmamıştım.
“Gerçek hayatta nerde işimize yarıcaktı ki ya???”

Bu ve bunun gibi cümleleri zaman zaman her birimiz kuruyoruz öyle değil mi?
Evet bu cümleleri ben de sık sık kuruyordum.
Fizik derslerine oldum olası ısınamayan ve her daim zorlanan bir öğrenci oldum. Her sınav öncesi “Hocam lütfen formülleri sınav kağıdının sonuna yazar mısınız?” diye sorardım hatta (itiraf edin çoğumuz söyleriz bunu).
Bazen hocamız yazardı da, sınıfta çoğu kişinin fizik dersi yine iyi olmazdı.

Ancak bu şekilde kimi kandırıyorduk ki?
Ben fizik öğrenebiliyor muydum?
Öğretmenim benim bilgimden tatmin olabiliyor muydu?
Sınav kağıda yazdıklarım, hafızamda ne kadar kalıcıydı?

Bu soruların cevapları ne yazık ki hep olumsuz.

Çünkü ben hafızamda bilgileri kalıcı hale getirmediğim sürece, ne bir şeyler öğrenebilirdim ne de öğrendiğimi sandığım şeyler kalıcı olurdu.

E tabi “fizik sevmediğim için”, fizikçileri araştırma gafletinde bulunmuyor insan. Araştırmayınca da Richard Feynman’ın Feynman tekniklerinden bir haber oluyor doğal olarak.

Halbuki bilseydim yalnızca 4 teknik ile öğrenmek istediğim tüm bilgileri hafızamda kalıcı hale getirebileceğim bir yöntem ile işler çok daha kolaylaşabilirdi.
O zaman ne hocamdan sınav kağıdına formülleri yazmasını isterdim ne de ömrüm bir sürü şeyi ezberlemeye çalışarak, boşa zaman harcayarak geçerdi.

Velhasıl, isterim ki siz benim gibi “Keşke bunları daha önce okusaymışım” demeyin ve Feynman tekniklerine bir göz atın!

Feynman Öğrenme Tekniği


1. Adım: Konuyu Belirleyin


Boş bir kağıt alın. Öğrenmek istediğiniz konunun başlığını kağıdın en üstüne yazın. Bir şeyi okuyup altını çizmek yerine, elinize bir kağıt bir kalem alarak yazmaya başlayın. Böyle kocaman kocaman yazın, hatta belki renkli kalemlerle.

2. Adım: Konuyu Bilmeyen Birine Anlatır gibi Anlatın 


Kağıdın geri kalanına konuyu hiç bilmeyen birine anlatıyormuşçasına, mümkün olduğunca karmaşık ifadeler kullanmaktan kaçınarak öğrendiklerinizi yazın. Bir çocuğun bile anlayabileceği kadar basit bir dil kullandığınızda kendinizi de konuyu daha derin bir seviyede anlamaya ve konular arasındaki ilişki ve bağlantıları basitleştirmeye zorlamış olursunuz. Aynı zamanda yazdığınızı sesli olarak tekrar etmek çok daha etkili olacaktır. (Bu tekniği sınavlara çalışırken öğrendiklerimizi diğer bir arkadaşımıza anlatarak çoğumuz zaman zaman kullanıyoruz mesela)

3. Adım: Takıldığınız Noktada, Kaynağa Geri Dönün


2. adımda hatırlamakta ya da anlatmakta zorlandığınız yerler olduğunu fark ettiğinizde konu hakkında çalıştığınız kaynaklara geri dönün. Öğrendiklerinizi kağıda aktarabilecek hâle gelinceye kadar tekrar tekrar okuyun ve çalışın. Sözgelimi algoritma sınavınız var ve bir örneği basit yoldan çözmeye zorlanıyorsunuz. Algoritma ile ilgili notlarınızı açın ve çözmekte zorlandığınız soruyu tekrar güzelce inceleyin. Şimdi notlarınızı kapatın ve yeni bir boş kağıt alarak öğrenmiş olduklarınızı yazın, çözmeye çalışın. Olmadıysa tekrardan bakın ve yeniden yazın. Bu aşamayı sorunsuzca hâlletiyseniz, asıl çalışma kağıdınıza dönerek çalışmaya devam edebilirsiniz.

4. Adım: Basitleştirin ve Benzerlikler Kurun 


Artık kağıda döktüklerimizi gözden geçirebiliriz. Einstein’ın “Bir şeyi 6 yaşında bir çocuğa anlatamıyorsanız, siz de anlamamışsınız demektir” sözünden de anlayabileceğimiz gibi karmaşık bir jargon kullanıp kafa karıştırıcı açıklamalar yapmak yerine, dilimizi basitleştirmek ve benzerlikler kurmak anlamayı kolaylaştıracaktır.


Gördüğünüz gibi bu 4 adımda bahsedilen yöntemlerle yalnızca yalnızca öğrenmeyi ve hatırlamayı kolaylaştırmakla kalmayıp, aynı zamanda farklı düşünme şekillerine pencere açarak fikirleri baştan aşağı yeniden inşa etmemizi sağlıyor.

Aslında bu teknikleri bir cümle ile özetlemek gerekirse “Öğreterek öğrenin!” diyebilirim. Çünkü birine bir konuyu anlatabilmek için önce o konuyu öğrenmek gerekir. Ezberlenmemiş, öğrenilmiş bilgi de zihinde kalıcıdır.

Siz siz olun işinize yarayacak hiç bir bilgiyi ezbercilik yapıp RAM belleğinizde tutmayın. İyice kavramaya ve anlamaya çalışın.

Neyi ne kadar bildiğiniz, öğrendiklerinizin kalıcılığı ile ilgilidir. Yazın, yazdıklarınızı okuyun ve yeniden okuyun ve yeniden yeniden.

Meşakkatli mi?
Evet.
Ama hiç bir bilgi emek vermeden öğrenilecek kadar değersiz değildir.
Bu cümleyi tanımadığınız birine tüm sırlarınızı anlatmayacağınız gerçeği ile ilişkilendirebilirsiniz. Sizin hakkında spesifik bilgilere sahip olmak isteyen biri önce sizinle tanışmalı ve sizinle vakit geçirmelidir.

Bilgi ile vakit geçirin.
Onu gerçekten öğrenmek istediğinizi çeşitli yöntemleri kullanarak ona bildirin. Sizin onu ne kadar istediğinize ikna olduğunda her zaman sizinle olacaktır.

Öğrenmeyi öğrenin,
Bilgi ile kalın,
kizgibikodla’yın!

Yazılıma Yeni Başlayacaklara Tavsiyeler

GİRİŞ

Bir çoğunuzun “Yazılıma yeni başlayanlara ne tavsiye edersin?”, “Hangi dil ile başlamalıyım”, “Acaba yapabilir miyim?”, “Bu mesleği yapabileceğime nasıl karar veririm?” gibi merak dolu sorularını sosyal medya platformlardan kısa kısa yanıtlamaktansa, kendi naçizane tecrüberimden yola çıkarak uzunca bir yazı yazıp sizlere nereden ve nasıl başlamanız konusunda tavsiyeler vermek istedim.

Bu sebeple ben de başladığım yere döneceğim, 14 yaşıma.

BEN KİMİM?

 Çok kısa kendimden bahsedeyim. Ben Gülcan. 24 Yaşındayım. 14 yaşında bir Anadolu Teknik Lisesinde Bilişim Teknolojileri Bölümü okuyarak bu maceraya başlamış biriyim. Daha sonra Ege Üniversitesinde iki yıllık önlisans eğitimi aldım(Böyle söyleyince çok havalı oluyor. İşin aslı YGS/LYS’de yeterli puanı alamadığım için Mühendislik Fakültesine yerleşemedim ben de iki yıllık Bilgisayar Programcılığı okudum yani olay bu). Ardından da 2014 yılında Dikey Geçiş Sınavı ile %100 İngilizce eğitim veren bir vakıf üniversitesinde burslu olarak Yazılım Mühendisliği Bölümü’nde lisans eğitimime başladım. 2016 Yılında da Manisa Celal Bayar Üniversitesi’de yine aynı şekilde Yazılım Mühendisliği Bölümü’ne yatay geçiş yaptım. Şuan son sınıf öğrencisiyim. Hem okuyup  hem de bir üniversite teknoparkında geliştici konumunda çalışıyorum.

İkisi birden zor oluyor mu?
İsteyerek ve severek yaparken doğrusu çok zorlanmıyorum. Okulum çalışan öğrencilere insiyatif gösteriyor, devam zorunluluğunda büyük problem yaşamıyorum. İş yerim de derse gideceğim günlerde anlayış gösteriyor. 

HERŞEYDEN ÖNCE!

Şunu söylemeliyim ki, eğitim hayatımdaki hiç bir şey yukarıdaki bir kaç cümleyi yazmak kadar kolay olmadı. Kararlılık, azim, hedef bilinci ve herşeyden önemlisi sabır lazımdı.

Eğer yazılımcı olmak istiyorsanız kendinize sormanız gereken ilk soru nereden başlamalıyım yerine, “Yeterince sabırlı bir insan mıyım?” sorusu olmalı. Bu soruyu kendinize sormak zorundasınız çünkü bir yazılım ürünü oluşturmak; bilgi, emek ve tecrübe gerektirirken bunların her birinin altında sabır da gerektiriyor.

  • Öğrenme aşamasında anlamak için sabredeceksiniz,
  • Öğrendiklerinizi kodlarken hatalar alacak bunları düzenlerken sabredeceksiniz,
  • Tam her şey çok güzel gidiyor gibi görünüyorken, kullanıcılar ürününüzü test edecek eksikler hatalar devam edecek siz de yine sabrederek, azimle bunları düzelteceksiniz.
    Eğer “herşey hemen olsun bitsin” diyen tez canlı biriyseniz bu meslek size keyif vermeyecek, enerjinizi her geçen gün düşürecek ve motivasyon kaybı yaratacaktır. Ya kendinize sabretmeyi öğretmelisiniz ya da yol yakınken dönmelisiniz.
    Ancak yaptığınız işten keyif alırsanız, sarf ettiğiniz azim ve sabır, insanların hayatını kolaylaştıracak ve hayata katkı sağlayacak güzel ürünlere dönüşerek bu mesleği tadından yenmez bir hale büründürecektir.. 🙂

KENDİ FİKİRLERİNİZE ÖNEM VERİN!

İnsanların yazılım alanı ile ilgili; “Bu iş sana göre değil”, “Çok sayısal ya senin kafan basmaz”, “Aa! yazılım/bilgisayar mühendisliği asosyal mesleği ya bütün gün otur otur”,”Kızlar güzel kod yazamıyo bence, erkek işi o biraz?!” gibi önyargılı ve içi boş konuşmalarına kulak asmayın. Hayat sizin hayatınız, kimse size neyi yapıp yapmayacağınızı söyleme hakkına sahip değil, siz kendiniz için bir karar verin ve arkasında durun. Günü geldiğinde hata yaptığınızı düşünseniz dahi o hata size ait bir hata olacaktır.

HATA YAPMAKTAN KORKMAYIN!

Eğer bir yazılımcı olacaksanız asla hata yapmaktan korkmayın. Dünyadaki en harika yazılımcı dahi olsanız kodunuzu derlediğinizde hata alabilirsiniz. Tek seferde mükemmel bir iş çıkartmanız imkansıza yakın çünkü hata bu işin doğasında var. Üniversitede bir hocam “Bugün kullandığımız bütün yazılımlar, aslında hatasız değil, sadece hataları kullanıcıların farketmeyeceği kadar iyi gizlenmiş yazılımlardır.” derdi. 

TEKNOLOJİNİN SANATÇILARI OLDUĞUNUZU HATIRLAYIN!

Yazılım, yapısı gereği oldukça komplike bir mühendislik dalıdır. Azmetmeniz ve sıkı çalışmanız gerekecektir. Anlamak, altından kalkmak, yetiştirmek vs. gibi sebeplerle bazen sabahlara kadar çalışmanız gerekecek. Ancak şunu söylemeliyim ki başardığınızı hissettiğiniz anda tüm yorgunluğunuz gidecek. Kod yazarken, sanatsal bir şey yapıyormuşsunuz gibi hayal edin. Bir heykeltraş nasıl ki baştan sona her ayrıntıyı düşünüp tasarlıyorsa, siz de başladığınız projenizi o şekilde tasarlıyorsunuz unutmayın. Ve bir sanatçı gibi hep yeni ve yaratıcı fikir arayışında olun.  Yaratıcı ve üretken fikirler çok değerli. Bugün facebook fikri olmasaydı, Mark Zuckerberg’ü hiç birimiz tanımıyor olacaktık.

ALGORİTMA MANTIĞINIZI GELİŞTİRİN!

İşin motivasyon ve psikolojik bölümünde kendinizi hazır hissettiğinizde, bir diğer kapı açılıyor : Algoritma ve programlama. Yazılıma başlarken ilk etapta Algoritma nedir? Mantığı nasıl geliştirilir? Bunları iyice araştırın.

 Google sizin en yakın dostunuz bunu unutmayın. Algoritmanızı geliştirebileceğiniz pek çok online kaynak bulabileceğiniz gibi çok fazla da basılı kaynak bulabilirsiniz. Unutmayın, günlük hayatınızda dahi aldığınız her karar ve her hamle algoritma içerir.
Lisedeyken bize yaptırdıkları ilk algoritma: “Sabah uyandığınız andan akşam yattığınız ana kadarki her hamlenizi adım adım yazın” olmuştu.

1-) Sabah uyandım

2-) Yüzümü yıkadım

3-)Kahvaltı yaptım

4-) Üzerimi değiştirmek için dolabımı açtım.

5-) Eğer hafta içi ise, okul üniformamı giydim.

….

Bu gibi küçük ve basit algoritmalar sizin planlama, karar durumları oluşturma ve işlemleri adımlama yetinizi geliştirecektir. Bu aşamada bol bol kalem ve kağıt kullanın, Akış Diyagramları çizin(Flowchart) ve Sözde Kodlar yazın.(Pseudocode). 

  • Bir algoritmayı çözerken, çözüm aklınıza ilk nasıl geliyorsa önce o halini yazın.
  • Sonra doğruluğunu kontrol edin.
  • Doğru cevabı, kendi cevabınız ile kıyaslayın.
  • Eğer hata yapmışsanız, doğru cevabı da farklı bir kağıda not edin. Asla “aa cevap böyleymiş” diyip kapatmayın, yazın. Siz yazarken zihninizde o kadar yer edecektir.
  • Doğru algoritma ile sizin hatalı algoritmanızı karşılaştırın. Bu aşamada “aa demek ki sayacı burada bir arttıracaktıık!”, “aa döngüyü yanlış kurmuşuuum” gibi iç sesler duymaya başlayacaksınız 🙂
  • Eğer hata yapmamışsanız, doğru cevabı başka ne yöntemlerle bulabilirdiniz onu düşünmeye başlayın. Farklı şekilde de çözmeye çalışın. Eğer siz farklı yöntem bulamıyorsanız, internetten araştırarak, hocalarınıza sorarak veya arkadaşlarınızdan fikir alarak algoritmanızı nasıl daha farklı yazabilirdiniz? Nasıl daha efektif, daha kısa, daha hızlı sonuca ulaşan hale getirebilirdiniz onları sorun. Unutmayın bir algoritmanın her zaman birden fazla çözüm yolu vardır.
    Bu yöntemler sizi, bir problemi en kısa yolla çözmeniz için geliştirecektir.

HANGİ PROGRAMLAMA DİLİ İLE BAŞLAMALIYIM?

Algoritma mantığınız olgunlaşmaya başladığında sıra bunları bir programlama dili ile deneyimlemeye geliyor. Günümüzde bir çok programlama dili var. Her biri birbirinden farklı gibi görünsede aslında hepsi algoritma mantığına dayalı, değişen şey yazım biçimi/sözdizimi(Syntax) ve kullanım alanları oluyor.

Programlama dillerinin birbirinden farklı olmasının amacı aslında o dilin belli konularda sağlayacağı avantajlardır. İfade gücü, verimlilik, okunabilirlik, esneklik, nesne yönelimlilik gibi kavramlar da programlama dillerinin birbirinden ayrılma ölçütleri olarak kabul edilebilir.

Öğrendiklerinizi kodlamak için bir programlama dili seçmelisiniz. Bu seçme işlemi esnasında direkt  olarak “Ben mobil programlama yapacağım.”,”Ben web programlama yapacağım ” gibi cümlelerle bodoslama bir karar alıp, bir şeyler yapmaya çalışmamalısınız. Henüz başlangıç aşamasında olduğunuz için o dilleri henüz verimli kullanamayacaksınız. Onun yerine yapısal bir programlama dili kullanın. Yani, mantıksal bütünlük gösteren bloklara (bölümlere) bölünebilen, bu yolla da uzun ve karmaşık programları, bloklara ayırarak daha kolay biçimde yazılabilmesine olanak sağlayan dilleri. Yapısal programlama dilli olarak;
C, C++, Visual Basic, Dr. Racket, Ada veya Pascal programlama dillerinden birini tercih edebilirsiniz. Bunları kullanarak algoritmalarınızı test edin. Kontrol işlemleri(şart komutlarını), döngüler, diziler, fonksiyon ve prosedür tanımları vs. bu aşamada iyice öğrenin. Kaynak olarak seçtiğiniz dil ile ilgili bir kitap alabilirsiniz ya da internetteki online eğitimleden faydalanabilirsiniz.
Acele etmeyin, öğrendilerinizi sindirin. Öğrenmeye çalıştığınız şey çok basit bir şey değil, sabırla çalışmaya devam edin.

YA YAZILIMA YETENEĞİM YOKSA?

Bu aşamaya kadar zaten yazılım alanına koca bir adım attınız. Yazılım, zekadan, azimden, sıkı çalışmaktan yanısıra biraz da yetenek işidir. Yukarıda anlattıklarımdan başlayıp bu aşamaya gelene kadar ki her şeyde neler hissettiğinizi bir kağıda yazın. “İlk kez “Merhaba Dünya” yazdırdım. Çok keyifli bir şeymiş/çok uğraştırıcı/ ee şimdi ne olacak merak ediyorum…” gibi gibi.

Tıpkı bir günlük tutuyormuşcasına hislerinizi yazın. Bu aşamaya geldiğinizde de bu yazdıklarınızı okuyup, o anda neler hissettiğinizi net bir şekilde görerek o verilerden, bu mesleğin size heyecan verip vermediğini, devam etmek isteyip istemediğinizin analizini yapabilir, gelecek için daha net düşüncelerle kendinize bir yol çizebilirsiniz. Bu aşamada “Hala yapabildiğime kararsızım” sonucunu çıkartıyorsanız, aslında bu mesleği sevmişsinizdir çünkü içinizdeki merak duygusu sizin yılmanızı engeller. Biraz daha gayret ederek, yazılıma yeşil ışığı yakacağınızı söyleyebilirim.

NESNE TABANLI PROGRAMLAMANIN OLMAZSA OLMAZLARINI ÖĞRENİN.

Yazılım alanı ile ilgili hislerinizi tarttınız ve ısınmaya başladınız. Şimdi de bir nesne yönelimli programlama dili seçerek işi bir adım daha ileriye taşımanızın zamanı. Nesne tabanlı programlama özelliklerini kavramak ve bunları deneyimlemek için C#, Java, Visual Basic .Net, Objective C, PHP, Python, Ruby gibi dilleri öğrenmeye başlayabilirsiniz. Bu tercih elbette size kalmış. Ancak bu aşamada esas önemini vurgulamak istediğim şey nesne tabanlı programlama özelliklerinden olan; Kapsülleme(Encapsulation), Kalıtım(Inheritance), Çok Biçimlilik(Polymorphism) terimlerini, Sınıf(Class) ve Nesne(Object) kavramlarını ve bunların nasıl çalıştıklarını öğrenmeniz.

Bunları öğrendiğinizde kendi başınıza rahatlıkla proje geliştirebilecek seviyeye geliyorsunuz.

ASLA BİR PROGRAMLAMA DİLİNİN FANATİĞİ OLMAYIN!

Gerçek bir yazılım/bilgisayar mühendisi platform bağımsız çalışmayı ilke edinmelidir. Sınıfınızda “Ben Java’cıyım/ Ben C#’cıyım” gibi saçma cümleleri veya bunların türevlerini duyabilirsiniz. Şu bir gerçek ki siz bir yazılımcıysanız herhangi bir dilin fanatiği olma lüksünüz yoktur. Hepsi hakkında bir fikriniz olmalıdır. Para veya başka sebepler için bu önyargıya kapılıp gitmeyin, önceliğiniz mesleki verimliliğiniz olalı para yahut başka bir şey değil. Çünkü nerede, ne şekilde çalışacağınızı eğitim hayatınız süresince net olarak kestiremezsiniz. Her an alışık olduğunuz dilden farklı bir teknoloji ile çalışmanız gerekebilir.  Bu sebeple kendinizi bu yaklaşımlarla kısıtlamayın. Öğrenmeye açık olun.

KENDİ BAŞINIZA BİR PROJE GELİŞTİRİN.

Mutlaka kendi başınıza geliştireceğiniz bir projeniz olsun. Öğrendiklerinizi, fikirleriniz ile birleştirebileceğiniz bir proje yapın. Bu proje için ister hayal gücünüzü kullanıp bir fikir oluşturabilir,  isterseniz de var olan bir yazılıma benzer bir şey geliştirebilirsiniz. Önemli olan o projeyi tek başınıza geliştirirken çok fazla şey öğrenecek olmanız. Çünkü takılacağınız yerler, alacağınız hatalar sizi araştırmaya yöneltecek, yaptığınız araştırmalar da sizin öğrenmenizi sağlayacak.

Mesela bu aşamada kendinize “Eee ben bu kullanıcı bilgilerini aldım da, nereye kaydedeceğim şimdi yahu?” gibi cümleler peşi sıra gelmeye başlayacak, siz de bu soruların ışığında veritabanı nedir? Neler kullanabilir, kullandığınız dil hangi veritabanlarını destekler, bir veritabanı şeması nasıl oluşturulur, ilişkisel veritabanı nedir?  gibi araştırma konularının içinde bulacaksınız kendinizi.

Evet farkındayım kulağa çok kalabalık ve yorucu geliyor ama inanın o anı yaşarken, projenizin yani her haliyle sizin yaratacağınız bir şeyin oluşmasındaki heyecanla yorgunluğunuzu hissetmeyeceksiniz. Hem hissetseniz de bilmeniz gereken bir şey var ki; zaman zaman yorgun düşmekte işinizin bir parçası. 

İNGİLİZCE ÖĞRENİN.

Projelerinizi geliştirirken yararlanacağınız kaynakların büyük bir çoğunluğu İngilizce olacağı için ister istemez İngilizce öğrenmek zorundasınız. Kullandığınız programlama dilinin ve teknolojilerinin dökümantasyonları İngilizce oluyor ve siz işinizi görmesi için bir kaynak arayışında olduğunuzda karşınıza hep İngilizce kaynak çıkıyor.
Hem eğitim hem de iş hayatınızda sizi öne çıkaracak en önemli etken İngilizce. Hatta günümüzde yalnızca İngilizce bilmeyi yeterli görmeyen, farklı dilleri bilen nitelikli eleman arayışında olan yazılım firmaları da mevcut. (Dil geliştirme yöntemleri ile ilgili tavsiyelerime başka bir yazımda değineceğim.)

Bunun yanısıra Google’ı iyi kullanın, takıldığınız bir şeyi hemen “ben yapamıyorum” düşüncesi ile pekiştirmektense Google’da aratın. stackoverflow.com gibi websiteleri karşılaştığınız hataların benzerlerini bulabileceğiniz veya hatanızı İngilizce yazıp bilen birilerine sorabileceğiniz bir platform. Juniour Developer’dan (Başlangıç geliştircisi), Senior Developer’a (Üst düzey geliştirici) kadar tüm geliştiriciler hatalarını bu gibi platformlarda aratıyorlar emin olun. 

HERŞEYİ ÖĞRETMENLERİNİZDEN BEKLEMEYİN.

“Ama biz o konuya daha gelmedik”. “Ama bize hiç bunlar anlatılmadı”, “Hoca bir örnek yaptı geçti” gibi cümleler ile kendinizi kandırmayın. Şunu bilmelisiniz ki, bu yanılgıya ben de düştüm ve zamanla görüyorum ki öğretmenlerimiz yalnızca bizlere bir şeyin ne olduğunu ve nasıl yapıldığını en basit örneklerle anlatmak durumunda. En ince ayrıntısına girmesi size bahsetmesi gereken diğer konulara girememesi anlamına gelir. İşin ayrıntısına daima kendiniz girmelisiniz. Araştırarak, sorarak, Google’da aratarak.

Yanılgısına düştüğüm bir şey daha var ki, o da;
“Üniversitede beynime herşeyi yükleyecekler ve çıktığımda civa gibi bir mühendis olacağım. Her soruya şak diye cevap vereceğim, çatır çatır projeler yazacağım” düşüncesi.
BÖYLE BİR DÜNYA YOK ARKADAŞLAR.!
Her zaman kendinizi güncellemeniz, “ben bunu biliyorum ya” ile asla yetinmemeniz gerekiyor. Yoksa çağınızın gerisinde kalma tehlikesindesiniz.

SOSYAL YÖNLERİNİZİ KUVVETLENDİRİN.

Hobilerinize, yapmaktan keyif aldığınız aktivitelerinize zaman ayırın. Onlardan uzaklaşmayın. Yazılım işi, doğası gereği oldukça karmaşık bir iştir ve zaman zaman kafanızı boşaltacağınız bir şeyler yapma ihtiyacını hissedersiniz. Bunu da bir spor dalı ile ilgilenerek bir müzik aleti kullanarak belki de duşta şarkı söyleyerek gerçekleştirebilirsiniz. Yöntem çok önemli değil ama muhakkak kafanızı boşaltabileceğiniz bir şeyler keşfedin.

SONUÇ

Bu konunun öneminin farkında olduğum için yazımı oldukça uzun tutup her şeye biraz biraz değinmeye çalıştım. İlerleyen günlerde her birini yeniden ayrıntılandıracağım.

Ama bunca saydığım maddeler arasında çok önemli  bir şey var ki o da bilhassa kızlar için;

Sevgili hemcinslerim,
yazılım alanında Türkiye’de azınlık olmamız, artarak güçlenemeyeceğimiz anlamına asla gelmiyor.
Yazılım yolculuğunuzda belki zaman zaman rehavete kapılıp, başkalarının cümlelerine kulak asıp, yada takıldığınız yerlerde işin içinden çıkamayıp motivasyonunuzu kaybedebilirsiniz.
Aynılarını uzun yıllar, dönem dönem ben de yaşadım. (Dönem dönem diyorum çünkü bir şeyi yapamayınca meslekten soğuyor, yapınca da sahipleniveriyordum hep)

Yanlış yerde miyim?
Yanlış bölümde miyim?
Hatalı bir tercih miydi yazılım/bilgisayar mühendisliği?
Benden olmayacak mı yani?
Yeterince zeki değil miyim sahiden?

Gibi pek çok karmaşa ile karşı karşıya kaldım.
Ama sabredip kararlılıkla kendinizi toparlamaya başladığınız zaman gerçekten gelişim gösterdiğinizi farkedeceksiniz.
!) Bırakın sizin gelişiminiz, kendinizi kıyasladığınız diğer insanlardan daha yavaş olsun,
!) Bırakın mühendisliği ilk yılda kazanamamış olun,
!) Bırakın bir kaç dersiniz altta kalmış olsun,
Hiç ama hiç önemli değil!
Önemli olan her zaman  %100 dersteki performanslarınız değildir.
O derslerden neyi ne kadar algıladığınız,
algıladığınız bilgiyi ne kadar kullandığınız ve  ne kadar kalıcı hale getirdiğinizdir olay.
Hem ne demiş Enistein; “ Eğitim okulda öğrendiklerimizi unuttuktan sonra aklımızda kalanlardır.

Kendinizi asla başkaları ile kıyaslamayın. İlham alın, başarılı insanların hayatlarıyla kendinizi güdüleyin fakat asla kıyaslayıp, motivasyonunuzu düşürecek şekilde kendinizi yermeyin.
Onun yerine bir bilenden tavsiye isteyin, hocalarınıza danışın, bildiğini düşündüğünüz arkadaşlarınıza danışın, internette gördüğünüz size yardımcı olabilecek yazılımcı insanlara mail attın. Eminim size yanıt vereceklerdir. Tecrübelerime dayanarak söylüyorum, yazılımcılar bilgilerini paylaşmayı severler. 🙂
Sorun, öğrenin sonra siz de gelecek nesillerle paylaşın. Bu şekilde çoğalacağız, ümitsizliğe kapılarak değil, çalışarak, azmederek.

Sevin kendinizi,
Olduğunuz gibi kabul edin,
Güçlü durun.
Kimse için değil, kendiniz istediğiniz için yapın herşeyi,
KIZ GİBİ !
ERKEK GİBİ !
KENDİNİZ GİBİ !

Umarım yazdıklarımın sizlere katkısı olur,
Her birinize teknolojinin aydınlattığı bu yolda, maceralı bir yolculuk dilerim. Sevgilerimle.

Kadınlar Erkeklerden Daha Zeki!

Nerede Bu Bilim Kadınları?

Bilimsel açıdan, kadınların çocukluk dönemlerinde erkeklere göre kavrama konusunda daha hızlı, daha başarılı ve birçok alana daha yatkın bir durumda. Bu durumda kadınları birçok bilimsel alanda göremememizin sebebi nedir?

 

 

Kız çocuklar ile erkek çocuklar arasındaki farklılıklar, henüz anne karnında başlıyor. Anne karnında, erkeklerin beyninin sağ bölümü, kızların ise sol bölümü öncelikli olarak gelişiyor. Buna bağlı olarak çocukluk dönemlerinde, kız çocuklarının ilk kelimelerini söylemesi, uzun ve kurallı cümleler kurması, erkek çocuklara göre daha erken oluyor. Bu ve bunun gibi farklılıklar, kız çocuklarının akademik becerilerde, dil ve sosyal gelişimlerinde daha aktif rol oynamalarını sağlıyor.

7 yaşında kız çocuklarının ortalama IQ düzeyi 101 iken, erkeklerinki 99.5. Henüz anne karnında başlayan ve çocukluk dönemlerinde etki eden bu durum, okul zamanında da kendini gösteriyor. Okul döneminde kızlar, matematik ve fen derslerinde erkeklere göre daha yüksek notlar alarak, daha fazla başarı kaydediyor.

 

Kızlar cinsiyetlerinden dolayı yeteneklerini sorguluyor!

Kız çocukları küçük yaşlardan itibaren, erkeklere göre daha çok baskı altında yetiştiriliyor. Erkek çocuklarına aileleri tarafından tanınan özgürlük, söz konusu kızlar olunca belli kriterler altında toplanarak kısıtlanıyor. Bu durum elbette; ülkelere hatta bölge ve şehirlere -yaşayış şekillerine- , geçmişten gelen kültürel altyapıya, ailelerin eğitim ve kültür düzeyine göre değişkenlik de gösteriyor. Kızların çocukluk dönemlerinde, aileleri ve toplum tarafından bastırılmış özellikleri, ilerki yaşlarda kızların kendi yeteneklerini sorgulamalarına ve kendilerine güvenmemelerine neden oluyor.

 

Üniversite eğitimleri boyunca kızlar öz güven sorunu yaşıyor!

Kız öğrencilerin %15’i, erkek öğrencilerin ise %29’u sayısal bölümlerde öğrenim görüyor.

•Matematik-fen eğitimleri alan kadınların sadece %20‘si, okulu bitirdikten sonra mesleği ile ilgili bir işte çalışıyor.

 

 

•Teknoloji, matematik, fen, mühendislik bölümlerinden mezun olan erkeklerin oranı, kızlara göre %57 daha fazla.

•Mühendislik fakültelerinin sadece %16’sı kız öğrencilerden oluşuyor.

Cinsiyetler baz alınarak ve cinsiyetten bağımsız olarak yapılan iki ayrı testte; kızların cinsiyetlerinin hesaba katıldığı testte, diğer teste göre %20 daha az başarı gösterdiği görülüyor. Yaşanan bu özgüven problemi, yaş ilerledikçe kızlarda daha ciddi sorunlara yol açıyor. Kızların 6. sınıftayken hissettikleri özgüven duygusu %72 iken, 10. sınıfa geldiklerinde bu oran %55‘e kadar düşüyor.

Bu yüzdeyi değiştirmek biz kadınların görevi olduğunu düşünüyorum. Niyetim asla karşı cinsi yermek değil. Sadece kadın zihninde farkındalık oluşturmak. Size o işi nasıl yapamayacağınızı söyleyenlere önce kulak asıyor, sonra bunu zihninizde düşünüyor daha sonra da bilinçaltınızı o işi asla yapamayacağınıza, size göre olmadığına inandırıyorsunuz. Bunu yapmayın, kendinizi güdüleyin, yapabileceğinize inanın, potansiyelinizin farkında olun.

Apache Hive Kurulumu | 12 Adımda Hive Kurulumu | MySQL Metastore

Apache Hive’ ın ne olduğundan önceki yazımda bahsetmiştim. Bugün 12 Adımda sunucunuza Apache Hive Kurulumunu anlatacağım. Hive kurulumundan sonra da MySQL metastore yapılandırması gerçekleştireceğim.

Öncelikle kısaca Hive’ın ne olduğuna tekrar değineyim.

Hive, Hadoop üzerinde  sorgulama ve analiz işlemlerini yapmak amacıyla geliştirilmiş açık kaynak kodlu yazılımdır.

Peki nasıl kuracağız bu Hive’ı?

Bu sorunun yanıtı için aşağıdaki adımları izlemeniz gerekiyor, Hive için  öncelikle bilgisayarınıza veya sunucunuza Hadoop’u kurmanız gerekmekte. Bunun için Hadoop Kurulumu yazımı inceleyebilirsiniz.

Hive kurulumunu olabildiğince açık ve anlaşılır biçimde anlatmaya çalışacağım. Sorun yaşadığınız aşamada Bana Ulaşın panelinden mesaj bırakarak veya aşağıya yorum olarak yazmanız yeterli.

Ben Hive’ı kendi sunucuma kurdum. Configürasyon ayarlarını ona uygun yapacağım. Siz kendi localinize kuracaksanız onun için configürasyon ayarları değişecektir.

Adım 1:  Aşağıdaki linke tıkayın. Ardından kırmızı işaretli linklere tıklayarak resimdeki adımları izleyin.

http://www.apache.org/dyn/closer.cgi/hive/

hive-2.3.0 versionu indireceğiz.

apache-hive-2.3.0-bin.tar.gz dosyasını indirin.


Not: Eğer wget kullanıyorsanız linki kopyala diyerek terminal üzerinden direkt indirebilirsiniz.

Adım 2: Terminal ile Sunucunuza bağlanın.

Hive’ı kurmak istediğiniz dizine girin. Ben kurulum için /usr/local dizinini kullanacağım. Bu dizinin altına önce bir hive klasörü oluşturun.

$ mkdir hive
$ cd /usr/local/hive

Adım 3: Oluşturduğunuz hive klasörünün içine indirdiğiniz apache-hive-2.3.0-bin.tar.gz dosyasını kopyalayın. Bunun için [email protected]‘ den sonra, sucunuIP yazan kısmı dilip kendi sunucunuzun IP adresini yazmalısınız.

$scp ~/Users/gulcanertop/Downloads/apache-hive-2.3.0-bin.tar.gz [email protected]:/usr/local/hive

Adım 4: Kopyaladığınız hive kurulum dosyanızı bu sıkıştırılmış formattan çıkartmamız gerekiyor. Bunun için aşağıdaki komutu yazın.

$ tar zxvf apache-hive-0.14.0-bin.tar.gz
$ ls

Eğer herşey yolundaysa ekranda şunları göreceksiniz:

apache-hive-0.14.0-bin apache-hive-0.14.0-bin.tar.gz

Şimdi diğer ayarlar için hazırsınız.

Adım 5: ~/.bashrc dosyanızı açın ve aşağıdaki satırları ekleyin. Bu satırlar sizin Hive’ı kurduğunuz dizin yolunu tanımlamanızı sağlıyor. Kendi dosya yolunuzu düzgün biçimde yazmaya özen gösterin.(Ben editör olarak nano kullanıyorum, siz farklı bir editörle de açabilirsiniz. )

$ nano ~/.bashrc

şimdi bunları en alta yapıştırın. (Editörden çıkmak için CTRL+X’e basın, ardından ’Y’ yazın ve ENTER a basın.)

export HIVE_HOME=/usr/local/hive
export PATH=$PATH:$HIVE_HOME/bin
export CLASSPATH=$CLASSPATH:/usr/local/Hadoop/lib/*:.
export CLASSPATH=$CLASSPATH:/usr/local/hive/lib/*:.

şimdi  ~/.bashrc dosyasını derleyin

$ source ~/.bashrc

Adım 6: Hive’ın congif ayarlarını yapacağız.

apache-hive-0.14.0-bin klasörünün altındaki conf klasöründe hive-env.sh.template dosyası mevcut.

hive-env.sh.template -> hive-env.sh

olarak kopyalayacağız ve yeniden yapılandıracağız

$ cd $HIVE_HOME/conf
$ ls
$ cp hive-env.sh.template hive-env.sh

Şimdi hive-env.sh içine girin

$ nano hive-env.sh

Aşağıdaki komutu yapıştırın.(Buraya mutlaka Hadoop’u kurduğunuz dizinin yolunu(path) yazmalısınız.)

export HADOOP_HOME=/usr/local/hadoop

Kaydedin ve editörden çıkın.

Adım 7: Şimdi Metastore’u yapılandırmak için harici bir veritabanı sunucusuna ihtiyacımız var. Ben bunun için mysql veritabanını kullanıyorum. Size de onu tavsiye ederim.

Aşağıdaki komut ile MySQL’i indirin.

$ sudo apt-get install mysql-server

Adım 8: MySQL Java Connector yükleyeyin.

$ sudo apt-get install libmysql-java

Şimdi Hive dizinin içindeki lib klasörüne Java Connector’ün jar dosyasının linkini verin.

$ ln -s /usr/share/java/mysql-connector-java.jar $HIVE_HOME/lib/mysql-connector-java.jar

Adım 9: $ HIVE_HOME/scripts/metastore/upgrade/mysql dizininde bulunan hive-schema-0.14.0.mysql.sql dosyasını (veya yüklü Hive sürümünüze karşılık gelen dosyayı) kullanarak Başlangıç veritabanı şemasını(Initial database schema)oluşturun.

$ mysql -u root -p

Enter password:

mysql> CREATE DATABASE metastore;
mysql> USE metastore;
mysql> SOURCE $HIVE_HOME/scripts/metastore/upgrade/mysql/hive-schema-0.14.0.mysql.sql;

Adım 10: Metastore erişirken Hive’ın kullanması için bir MySQL kullanıcı hesabına da ihtiyacınız var. Bu kullanıcı hesabının haricinde başka bir müdehale ile metastore veritabanı şemasındaki tabloların oluşturulmasını veya değiştirilmesini önlemek çok önemlidir.

mysql> CREATE USER 'hiveuser'@'%' IDENTIFIED BY 'hivepassword';
mysql> GRANT all on *.* to 'hiveuser'@localhost identified by 'hivepassword';
mysql>  flush privileges;

Not: Buradaki oluşturduğunuz hiveuser, ileride hive-site.xml dosyasını yapılandırırken kullanacağımız ConnectionUserName dir.

Dip Not: MySQL’den exit; komutu ile çıkış yapabilirsiniz.

Adım 11: Şimdi de $HIVE_HOME/conf dizinindeki hive-default.xml.template dosyasını kopyalayıp hive-site.xml ismi ile kaydedin.

$ cp $HIVE_HOME/conf/hive-default.xml.template hive-site.xml

Şimdi hive-site.xml’i yapılandıralım.
hive-site.xml’in içinde default değer olarak tanımlı olan propertyleri overrite etmeniz gerekiyor.

<configuration>

 

 

<property>

<name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost/metastore?createDatabaseIfNotExist=true</value> <description>metadata is stored in a MySQL server</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name <value>com.mysql.jdbc.Driver</value> <description>MySQL JDBC driver class</description> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>hiveuser</value> <description>user name for connecting to mysql server</description> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>hivepassword</value> <description>password for connecting to mysql server</description </property> </configuration>

Not: Eğer bu aşamada “com.mysql.jdbc.Driver not found” hatası alırsanız, Adım 8’e gidin ve mysql-java connector jar dosyası için link verebildiğinizden emin olun. Herşey yolunda ise artık Hive’i çalıştırabiliriz.

Adım 12: Hive’ı çalıştırın ve bir tablo yaratın.

$ cd $HIVE_HOME
$ bin/hive

Hive çalıştığında hive> şeklinde görüntülenecek. Şimdi aşağıdaki komutları kullanarak bir tablo yaratalım.

hive> create table kizgibikodla(id int, name string);

Tablomuz tanımlandı. Şuan bunu tabloyu MySQL’de görüntüleyelim.

mysql -u root -p

Enter password:

mysql> use metastore;
mysql> show tables ;

Hive’da oluşturduğunuz metastore şemalarını (veritabanları), MySQL’de aşağıdaki gibi bir query ile görüntüleyebilirsiniz.

mysql> select * from TBLS;

Bu adımdan sonra oluşturduğunuz tablolar burada göüntülenecektir.

İşte Apache Hive’ı kurdunuz!

Soru ve önerileriniz için yorum bırakabilirsiniz.

Keyifli kodlamalar dilerim.

Web Server satın almak ve kurulum.

Nasıl Web Server (Web Sunucu) oluşturabilirim?

Sunucu (Server) nedir?

Sunucu bir ağ üzerinden bizim isteklerimizi (veri, dosya ve kaynak paylaşımı) karşılayan, donanımsal olarak yüksek özelliklere sahip olan hizmet sağlayıcı bilgisayarlara verilen isimdir.

Sunucularda veritabanı barındırabilir, bir ağ yönetebilir, dosya ya da uygulama paylaşabilir, email veya web sayfalarınızı barındırabilirsiniz. Her amaç için farklı biçimlerde üretilmiş sunucu bulmak mümkündür. Web Server (Web Sunucusu), File Server (Dosya Sunucusu), Database Server (Veritabanı Sunucusu), Mail Server (Eposta Sunucusu), Proxy Server (Vekil Sunucu) gibi çeşitleri vardır.

Ben size kendi ihtiyacım için scaleway.comdan satın aldığın bir server’ın adımlarını anlatacağım.

1. Öncelikle scaleway.com sitesine girip Login olmanız gerekiyor.
– ‘Terms of services’ kısmındaki ‘I have read and I accept the Terms of service’ kutucuğunu check edin.
– Sonraki adımda e-mailinizi doğrulamanız gerekiyor. E-mailinize girerek doğrulayın.
– Biling info bölümünden …
– Kart bilgilerinizi de girmelisiniz, çünkü sunucu satın aldığınızda sistem otomatik olarak siteye tanımladığınız karttan ücretini çekiyor.

2. Login olduktan sonra, Sağ üst köşedeki Create Server Butonuna tıklayın.

3. Name bölümü, server’ınıza vereceğiniz özel ismin yazılacağı yerdir. Buradan istediğiniz ismi kendi serverınıza verebilirsiniz.

4. Location bölümü, satın alacağınız server’ın hangi ülkede bulunmasını istiyorsanız orayı işaretleyeceğiniz bölüm. (Ben Amsterdam’dan satın aldım).

5. Server range bölümü. Bu bölüm 3 e ayrılıyor;
          – Starter, Baremental, Intensive.
          – Bu server tipleri, arzu ettiğiniz server’ın alan büyüklüklerine ve özelliklerine göre ayrım gösteriyorlar. Ben kendim için Starter bölümünden sunucu aldım. (Starter’daki sunucular uzaktaki bir makinenin üzerine kurulan sanal sunuculardan alınan hizmetlerdir.)

6. Starter bölümündeki ARM-64 tipindeki sunucular mobil cihazlar için kullanılan sunuculardır.
         – Ben bilgisayarımdaki fazla veriler ve büyük veri ile ilgili uygulamalarım için kullanmak üzere VC1L sunucusunu satın aldım.


– Benim bunu almamdaki en önemli etken 8GB RAM ‘e sahip olmasaydı.

8. Choose Image bölümünde, özelliklerini seçtiğiniz serverınıza bir işletim sistemi seçiyorsunuz.  

       – Resimde de gördüğünüz gibi Ubuntu’nun, CentOS’un, Debian’ın çeşitli versiyonları mevcut. Farklı özelliklere göre fiyatlandırma yapıyorlar(Ben, 2.99Euro’ya Ubuntu Zesty seçtim .)

9. Daha sonra Create Server’a tıklayın.

10. Ve sunucunuzu yarattınız.

Bundan sonraki adımlar sunucunuza nasıl bağlanacağınız ile ilgili;

1.  Ben sunucuma parola kullanmadan, SSH ile bağlanmak için kendi bilgisayarımda bir SSH Key yaratıp, oluşturduğum server’a tanımladım.

2. Bunun için öncelikle bilgisayarınızdan Terminali açın, aşağıdaki kodları yazın.

$ cd ~/.ssh 
$ ls -la

 

3. Eğer daha önceden oluşturulmuş bir SSH KEY’iniz var ise bu aşamada id_rsa ve id_rsa.pub dosyaları görüntülenir. Eğer var ise o dosyalardaki id_rsa’ı açın(Users/kullaniciadiniz/.ssh/id_rsa dizininde olmalı muhtemelen) ve içindekileri başında BEGIN ve END blogları olmadan kopyalayın.

4. Eğer bu dosyalara ls -la yazdığınızda id_rsa ve id_rsa.pub dosyaları görünmüyorsa, aşağıdaki kodları yazın

$ cd ..
$ ssh-keygen -t rsa

5. Enter file in which to save the key (Users/kullaniciadiniz/.ssh/id_rsa ) : kısmını göreceksiniz, Enter’a basın. Daha sonra sizden passphrase isteyecek Enter’a basın ve tekrar Enter’a basın.

İşte SSH Key’iniz oluştu!

6. şimdi tekrar .ssh dizinine gidin ve id_rsa dosyasını açın;

$ cd .ssh
$ cat id_rsa.pub

7.   Burada size id_rsa.pub dosyasının içindeki kod görüntülenecek, bu kodu isterseniz  terminalde aşağıdaki gibi sunucunuza kopyalayabilirsiniz.

      -Bunun için id’nizi scaleway.com’daki servers bölümünde satın aldığınız server’ın ‘ip adress’ bölümünden edinmelisiniz.  Benim 127.0.0.1 yazdığım yere kendi id’nizi yazmalısınız.

$ scp id_rsa.pub [email protected]
  1. Ancak ben size daha kısa bir yol göstereceğim. scale.com‘a gidip sağ üstteki Basic Account’a tıklayın.

9. Credentials tab’ine tıklayıp  Use this SSH Key bölümüne yazıp kaydedebilirsiniz.

 Sunucunuza SSH Key’inizi kaydettiniz ve kullanılabilir hale getirdiniz.

10. Server’ınızın içerisine girmek ve yönetmek için aşağıdaki komutu kullanarak serverınıza bağlanın.

$ ssh [email protected]

Eğer terminal kullanmak istemiyorsanız FileZilla’yı kurup buradan da sunucunuza bağlanabilirsiniz.

11.  FileZilla’yı açın. Sol üstte ‘Open the site manager’ butonu bulunmakta. Ona tıklayın.

12.  New Site ‘a tıklayın.

13. Host kısmına server ip adresinizi yazın.

14. Port kısmını boş bırakın.

15.  Protocol kısmını ‘SFTP-SSH File Transfer Protocol’ olarak seçin.

16. Logon Type kısmını ‘Key File’ olarak seçin

17.  User kısmına ‘root’ yazın

18. Key file kısmına da id_rsa dosyanızın yolunu yazın. (Örn: /Users/kullaniciadiniz/.ssh/id_rsa)

19. Connect’e tıklayın.

Ve işte sunucunuza bağlandınız.

Umarım sizler için faydalı bir yazı olmuştur. Sonraki yazılarımda sunucumuza Hadoop, Hive ve Flume nasıl kurulur onlardan bahsediyor olacağım.

Hepinize iyi çalışmalar dilerim.

Apache Hive Nedir?

Apache Hive, dağıtık dosya sistemlerinde petabayt seviyesindeki büyük veri setlerini okumayı, yazmayı ve yönetmeyi sağlayan SQL dili ile çok benzer biçimde interaktif sorgular yazabildiğimiz açık kaynak kodlu bir projedir.

Hadoop gibi dağıtık dosya sistemlerinde kayıtlı olan büyük verileri sorgulamak için kullanılıyor.
Alışık olduğumuz SQL sorgularını, Hive ile birlikte büyük verileri analiz etmek için yazabiliyoruz.

Hive ile yazılan sorgular aslında arkaplanda MapReduce komutlarına çevriliyorlar. Ancak iç içe onlarca sub-query(alt sorgu)’nin olduğu bir sorguda MapReduce ile sorgu yapmak oldukça güçleşecektir.MapReduce her ne kadar Hive’a göre daha güçlü bir kontrol sağlasa da Hive, SQL ile çok benzeyen sorgu dili ile hadoop ve diğer dağıtık dosya sistemlerini kullanan geliştiriciler için oldukça kolaylık sağlıyor.
Biraz Hive’ın sorgu biçimi inceleyim.
Hive’ın Select deyiminin yazım biçimini şu şekildedir;

SELECT [ALL | DISTINCT] select_expr, select_expr, ...
FROM table_reference
[WHERE where_condition]
[GROUP BY col_list]
[HAVING having_condition]
[CLUSTER BY col_list | [DISTRIBUTE BY col_list] [SORT BY col_list]]
[LIMIT number]

Eğer daha önce SQL kullandıysanız muhtemelen bu tarz bir sorguya aşinasınız. Ama ben yine de biraz açıklamak istiyorum.

  • SELECT, SQL’deki projeksiyon operatörüdür.
  • SELECT, FROM yan tümcesi tarafından belirtilen tabloyu tarar
  • WHERE, neyin filtreleneceğini belirtir
  • GROUP BY, kayıtların nasıl toplanacağını belirten sütunların bir listesini verir
  • CLUSTER BY, DISTRIBUTE BY, SORT BY sıralama düzenini ve algoritmasını belirtin.
  • LIMIT kaç adet kayıt alınacağını belirtir

Gördüğünüz gibi tıpkı SQL de olduğu gibi Hive’da bu şekilde kullanılarak büyük verileri rahatlıkla analiz etmeye yardımcı oluyor.

Hive’ın MapReduce ile farklı olarak sağladığı kolaylıktan biraz bahsedecek olursak,
Hive’da çeşitli tool’lar(araçlar) kullanarak Şema(Hive Shema) oluşturabiliyoruz. Şema mantığı aslında klasik SQL sorguları ile oluşturduğumuz tablo mantığı gibidir. Kolon isinleri ve veri tipleri ile oluşturulan tablolar, Hive’da da şema şeklinde oluşturuluyor. Hive ile belirli formattaki dosyaların(.csv, json vs.), metadataları içerisine girerek tablo gibi tanımlayabiliyoruz.
Bir örnek ile kavramaya çalışalım;

{
    “İsim": "Gülcan",
    "Soyisim": "Ertop",
    “Öğrenci_Bilgileri”: {
        “Id": 1234,
        “Bölüm": Yazılım Mühendisliği,
         “Sinif": “4"
    }
}

şeklinde bir örnek JSON dökümanımız olsun. İsmini de ogrenci.json verelim.
Buradaki verileri Hive’ı kullanarak tablo haline getirelim:

CREATE TABLE json_ogrenci_tablo ( json string );
 
LOAD DATA LOCAL INPATH  '/tmp/ogrenci.json' INTO TABLE json_ogrenci_tablo;

Biçimide bir sorgu query ile json dosyasının içeriğini json_ogrenci_tablo isimli bir tablo yaratıp aktarmış olduk.

Bu tablodaki her bir objeyi sorgulamak için Hive’da çeşitli yöntemler mevcut, bunlardan ilki olan get_json_object ile bir sorgu yazmayı deneyelim.

select get_json_object(json_ogrenci_tablo.json, '$.İsim') as Isim, 
       get_json_object(json_ogrenci_tablo.json, '$.Soyisim') as Soyisim,
       get_json_object(json_ogrenci_tablo.json, '$.Öğrenci_Bilgileri.Id') as Oid,
       get_json_object(json_ogrenci_tablo.json, '$.Öğrenci_Bilgileri.Bölüm') as Obolum,
       get_json_object(json_ogrenci_tablo.json, '$.Öğrenci_Bilgileri.Sinif') as Osinif
from json_table;

Bu sorgudan elde edilen sonuç şu şekildedir:

Isim   Soyisim  Oid     Obolum  Osinif
Gülcan Ertop    200901  Yazılım Mühendisliği4

Tıpkı get_json_object gibi json_tuple,json-serde gibi fonksiyonlarını kullanarakta sorgular yazabiliriz.
Bunları ileriki yazılarımda örnekleyerek açıklamaya çalışacağım.

 

MapReduce Nedir?

MapReduce tanım olarak büyük verilerin işlendiği programlama yapısı olarak açıklanabilir.

Örnekler vererek, kümülatif bir şekilde MapReduce’u kavrayalım.

Önce elimizde büyük veri olmadığını ve oldukça ufak bir müşteri bilgi sistemi geliştirdiğimizi düşünelim.

Bu ufak sistemin veritabanında yalnızca 100 müşterinin bazı bilgileri olsun. Bu bilgiler,
TC Kimlik Numarası, Ad, Soyad, Yaş alanları olsun.
Biz bu 100 kişi içinden soyadları ‘Yıldırım’ olan kişilerin içindeki en genç müşteriyi bulmak istesek

SELECT MIN(yas) FROM müsteri WHERE soyad=‘Yıldırım’

şeklinde bir SQL sorgusu ile sonuca rahatça ulaşabiliriz.

Peki, ya bu 100 kişilik sistem yerine, Türkiye’de yaşayan tüm insanlar olarak değiştirseydik?

Hatta veritabanındaki alanlara nüfus bilgisi, adres, telefon, meslek, gelir durumu, kullandıkları kredi kartları bilgileri,sipariş durumu, eğitim durumu alanları ekleseydik?
Daha sonra, soyadı ‘Yıldırım’, eğitim durumu ‘Üniversite’ olan insanların sayılarını bulmak istesek ne yapardık?

Düşündüğünüz gibi, oldukça büyük bir veri ile karşı karşıyayız ve klasik SQL sorgularını kullanarak bu analizi yapmak bir hayli uzun zaman alacaktır.

Bu durumda devreye MapReduce giriyor. Bu denli büyük verilerin onlarca sunucu(cluster) üzerinde dağıtık olarak kayıtlandığını düşünelim.(Bu sistemi Hadoop yazımı inceleyerek kavrayabilirsiniz)

  • MapReduce her bir clusterdaki verileri dolaşarak istediğimiz analizi hızlı ve etkin şekilde yapabilmemize imkan sağlıyor.

Yazılışı çeşitli dökümanlarda birleşik gibi görünsede Map-Reduce aslında Map(Mapping) ve Reduce(Reducing) iki ayrı işlemdir, bir arada çalışarak dağıtık dosya sistemlerinde veri analizinin oldukça kolaylaştırılmasını sağlayan methodlardır.

Map, bir listedeki her bir elemana tek tek bir kuralı uygular.
Reduce, Map ile elde edilen sonuçları belli bir sistematik ile analiz ederek birleştirir.
Yaptığı analiz sonunda da bir değer döndürür.

Çok basit bir örnek ile zihnimizde canlandıralım;

Elimizde bir küme olduğunu düşünelim. Bu kümenin her bir elemanına 5 ekleyelim.
5 eklediğimiz kümenin içindeki çift sayıların toplamını alacağımızı varsayalım.

Bu listenin her bir elemanına 5 ile toplama işlemini içeren bir fonksiyon uygulayacağız.

Bu işlem sonucu ikinci veri kümesini elde ettik. Her bir elemana aynı fonksiyonu uyguladı ve hepsinin ayrı ayrı değeri değişti.
Bu işlem Map leme işlemi olarak düşünülebilir, çalışma mantığı bu şekildedir.

Şimdi bu değerlerin içindeki çift sayıların toplamını alalım alalım.

Bu işlem de Reduce işlemi olarak düşünülebilir.
Gördüğünüz üzere başta 5 elemanlı bir veri kümesi iken, Reduce işlemi sonucu output olarak yalnızca bir değer elde ettik.

Map’leme işlemi, dağıtık halde bulunan sunucu disklerindeki (clusters) verilere, clusterların her birinin nerelerde olduğunu önemsemeksizin belli bir fonksiyonu o verilere uygular. Ve her bir cluster mapleme işlemi sonucu elde ettiği veriyi kendi diski üzerinde tutar. Daha sonra Reduce işlemi her bir clusterdaki Map’lenmiş verileri alır ve belli bir kurala göre (bizim belirleyeceğimiz yönteme göre) analiz eder ve analiz edilmiş veriyi çıktı olarak verir. Örnekten de anlaşılabileceği gibi Map işleminde ilk işleme alınan kümenin eleman sayıları aynı kalırken, Reduce işlemi analiz sonucu bir çıktı vermektedir.

Özet olarak, büyük verileri işleyebilmek için pahalı donanımlar satın almak yerine, bir veya birden fazla sıradan sunuculardan oluşan bir sistemde MapReduce ile aynı işlemi hızlı ve efektif bir biçimde uygulayabilirsiniz.

Günümüzde bu yapıyı, dağıtık dosya sistemi ile çalışan (Google,Facebook, Yahoo gibi.)bir çok büyük firma kullanmaktadır.

Hadoop Kurulumu

Hadoop’un ne işe yaradığından önceki yazımda sizlere bahsetmiştim. Bugün Hadoop nasıl kurulur, bununla alakalı bilgi vermek istiyorum.

Öncelikle Hadoop, GNU / Linux platformu tarafından desteklenmektedir. Bu sebeple, Hadoop ortamını kurmak için bir Linux işletim sistemine ihtiyacımız var. Linux dışındaki bir işletim sisteminiz varsa, bir Virtualbox yazılımı yükleyebilir ve Linux’u Virtualbox’ın içine kurabilirsiniz.

Ön kurulum:

Başlangıçta, Hadoop dosya sistemini Unix dosya sisteminden ayırmak için Hadoop’a ait ayrı bir kullanıcı yaratmanızı öneririm. Bu sayede karmaşanın önüne geçmiş olacaksınız.

Bir kullanıcı oluşturmak için şu adımları uygulayın:

  • ”Su” komutunu kullanarak kök dizini açın.
  • ”Useradd kullanıcı adı” komutunu kullanarak kök hesabından bir kullanıcı oluşturun.
  • Artık “su kullanıcı adı” komutunu kullanarak mevcut bir kullanıcı hesabını açabilirsiniz.

Terminali açıp,aşağıdaki komutları yazalım,

$ su 
   password: 
# useradd hadoop  
# passwd hadoop 
   New passwd: 
   Retype new passwd 

“hadoop” yazan yerleri kendinize uygun biçimde değiştirebilirsiniz.
Ve işte yeni bir kullanıcı yaratmış oldunuz!


SSH Kurulumu ve Anahtar Üretimi

SSH kurulumu, cluster üzerinde başlatma, durdurma işlemleri gibi farklı işlemleri yapmak için gereklidir.
Anahtar üretimi de farklı Hadoop kullanıcılarını doğrulamak için gereklidir.
Hadoop kullanıcıları için ortak veya özel anahtar çifti oluşturulmalıdır. Bu anahtarlar kullanıcılar arasında paylaşılabilir.
Hadoop node’larının yönetilmesi için SSH erişimini ve anahtar üretimini aşağıdaki komutları yazarak sağlamamız gerekiyor.

$ ssh-keygen -t rsa 
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
$ chmod 0600 ~/.ssh/authorized_keys

Java Kurulumu

Hadoop kurulumu için sisteminizde olması gerekenlerden biri de Java’dır. Java’nın bilgisayarınızda kurulu olup olmadığını anlamak için “java -version” komutunu kullanabilirsiniz.

$ java -version

Eğer Java kurulu ise, size kurulu olan version bilgisini görüntülenecektir.

java version "1.7.0_71" 
Java(TM) SE Runtime Environment (build 1.7.0_71-b13) 
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode) 

Eğer Java yüklü değilse aşağıdaki adımları izleyerek kurmanız gerekiyor.

Adım 1:

Öncelikle bu siteye girin, ve sizin işletim sisteminize uygun olan ve uzantısı tar.gz olan dosyayı indirin

http://www.oracle.com/technetwork/java/javase/downloads/jre8-downloads-2133155.html

Adım 2:

İndirdiğiniz bu dosyayı genelde indirilenler klasörünüzde bulacaksınız. tar.gz şeklindeki zipli bu dosyayı aşağıdaki komutlar ile ziptek çıkartalım.

$ cd Downloads/ 
$ ls 
jdk-7u71-linux-x64.gz 
$ tar zxf jdk-7u71-linux-x64.gz 
$ ls 
jdk1.7.0_71   jdk-7u71-linux-x64.gz 

Adım 3:
Java’yı rahat kullanabilmek için “/usr/local”konumuna taşıyalım. Bunun için kök dizini açıp aşağıdaki komutları yazmalıyız.

$ su 
password: 
# mv jdk1.7.0_71 /usr/local/ 
# exit 

Adım 4:
Şimdi de ~/.bashrc dosyasını açıp JAVA_HOME isimli değişkeni oluşturarak java’nın kurulu olduğu PATH‘i içerisine yazağız. Bu sayede Java’ya erişimimiz kolaylaşmış olacak.
~/.bashrc dosyasını açmak için vim ya da nano gibi metin düzenleyicileri kullanabilirsiniz kullanabilirsiniz. (Eğer bunlar yüklü değilse veya kullanmayı bilmiyorsanız not defteri’nde de düzenleyebilirsiniz)
Ben vim kullanarak açıyorum.

$ vim ~/.bashrc

Açılan doyaya şu komutları kopyalayıp yapıştırıyoruz:

export JAVA_HOME=/usr/local/jdk1.7.0_71 
export PATH=$PATH:$JAVA_HOME/bin 

Sonrasında ESC basıyoruz ve :wq yazıyoruz. Vim’den çıkmış olduk.

Şimdi tüm değişiklikleri geçerli çalışan sisteme uygulamak için aşağıdaki komutu yazın.

$ source ~/.bashrc

Şimdi java -version komutunu tekrar deneyin. Şuan yukarıda yazdığım gibi bir çıktı görüntülemiş olmanız gerekiyor.

Hadoop Kurulumu
Eveeet… Her şey hazırsa hadoop kurulumuna başlayabiliriz.
Aşağıdaki komutları kullanarak hadoop’un istediğiniz sürümünü indirebilirsiniz. Ben 2.7.4 versiyonunu kurdum

$ su 
password: 
# cd /usr/local 
# wget http://apache.claz.org/hadoop/common/hadoop-2.7.4/ 
hadoop-2.7.4.tar.gz 
# tar xzf hadoop-2.7.4.tar.gz 
# mv hadoop-2.7.4/* to hadoop/ 
# exit 

NOT: wget Linux/UNIX komut satırı dosya indirme aracıdır. Eğer wget’e sahip değilseniz ‘Homebrew’ paket yöneticisini kullanarak edinebilirsiniz. (Homebrew kurulumu,
wget kurulumu)

Hadoop Çalışma Modları

Hadoop’u indirdikten sonra, Hadoop cluster’ını desteklenen üç moddan birinde çalıştırabilirsiniz, bunları ihtiyacınıza hangisi uygun olacaksa o şekilde seçin.

1-)Yerel / Bağımsız Mod (Local/Standalone Mode): Sisteminizde Hadoop indirildikten sonra, varsayılan olarak tek başına bir modda yapılandırılır ve tek bir java işlemi olarak çalıştırılabilir.

2-)Pseudo Dağıtılmış Mod (Pseudo Distributed Mode): Tek makinede dağıtılmış bir simülasyon. Hdfs, Yarn, MapReduce vb. Gibi her Hadoop hizmet programı ayrı bir java işlemi olarak çalışacaktır. Bu mod geliştirme için yararlıdır.

3-)Tam Dağılımlı Mod (Fully Distributed Mode ): Bu mod, cluster olarak en az iki veya daha fazla makineye tamamen dağıtılır.

Ben ilk iki modun kurulumunu sizlere anlatacağım.

Yerel / Bağımsız Mod’da Hadoop Kurulumu:

Bu kurulum sağlandığında hadoop tek bir JVM(Java Virtual Machine)’de çalışır. Bağımsız Mod, MapReduce programlarını geliştirme sırasında çalıştırmak için uygundur. Tek JVM ile çalıştığı için test etmek ve hata ayıklamak kolaydır.

Hadoop’u kurma:
Az önce yukarıda JAVA_HOME için ~/.bashrc dosyasında değişiklikler yapmıştık. Aynı işlemi vim ile ~/.bashrc dosyasını açıp, HADOOP_HOME değişkenine hadoop’un PATH’ini aşağıdaki gibi yazıyoruz.

export HADOOP_HOME=/usr/local/hadoop 

Metin düzenleyicinizi kapattıktan sonra tüm değişiklikleri geçerli çalışan sisteme source komutu ile uygulayın.

$ source ~/.bashrc 

Devam etmeden önce, Hadoop’un düzgün çalıştığından emin olalım. Sadece aşağıdaki komutu çalıştırın:

$ hadoop version 

Kurulumda her şey yolunda giderse şu şekilde bir sonuç karşınıza çıkacak:

Hadoop 2.7.4 
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768 
Compiled by hortonmu on 2017-11-06T06:28Z 
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4 

Bu çıktı, bağımsız modda kurulum işleminin tamamlandığı anlamına gelir. Şuan varsayılan olarak, Hadoop tek bir makinede dağınık olmayan bir modda çalışacak şekilde yapılandırılmıştır.

Pseudo Dağıtılmış Mod’da Hadoop Kurulumu:

Gelelim diğer yöntem olan Pseudo Dağıtılmış Mod’a.
Bu modda kurulan Hadoop, tek bir makinede birden fazla makine varmış gibi simüle ederek, sahte sağıtılmış modda çalışır.

Hadoop Kurulum:

~/.bashrc dosyasına aşağıdaki komutları ekleyerek Hadoop ortam değişkenlerini ayarlayabilirsiniz.

export HADOOP_HOME=/usr/local/hadoop 
export HADOOP_MAPRED_HOME=$HADOOP_HOME 
export HADOOP_COMMON_HOME=$HADOOP_HOME 
export HADOOP_HDFS_HOME=$HADOOP_HOME 
export YARN_HOME=$HADOOP_HOME 
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native 
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin 
export HADOOP_INSTALL=$HADOOP_HOME

Şimdi tüm değişiklikleri geçerli çalışan sisteme uygulayın.

$ source ~/.bashrc 

Hadoop Yapıladırması(Hadoop Configuration)

Hadoop’ın bütün yapılandırma dosyaları
“$ HADOOP_HOME / etc / hadoop” dizinindedir.
Bu yapılandırma dosyalarında, Hadoop altyapınıza göre değişiklik yapmamız gerekiyor.

$ cd $HADOOP_HOME/etc/hadoop

Hadoop programlarını java’da geliştirmek için hadoop-env.sh dosyasındaki java ortam değişkenlerini JAVA_HOME değerini sisteminizdeki java konumuyla değiştirerek sıfırlamanız gerekir.

Bunun için yine vim kullanarak hadoop-env.sh dosyasını açıyoruz.

$ vim hadoop-env.sh

içerisine aşağıdaki kodu ekliyoruz.

 export JAVA_HOME=/usr/local/jdk1.7.0_71

Not: jdk1.7.0_71 sizin sisteminizde kurduğunuz sürüme göre değişkenlik gösterebilir.

Hadoop’u yapılandırmak için bir kaç tane dosyayı daha düzenlememiz gerekiyor.
İlk olarak core-site.xml dosyasını vim ile açıyoruz ve tagları arasına aşağıdakileri ekliyoruz. Ve kaydedip çıkıyoruz.

<configuration>

   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value> 
   </property>
 
</configuration>

Sıradaki yapılandıracağımız dosya: hdfs-site.xml.
Hdfs-site.xml dosyası, yerel dosya sisteminizin çoğaltma verisinin, namenode yolunun ve datanode yollarının değeri gibi bilgileri içerir.(namenode ve datanode hakkında hadoop yazımda bilgi vermiştim, oradan öğrenebilirsiniz)
Bu dosyadaki değişikliklerin amacı, Hadoop altyapısını depolamak istediğiniz yeri göstermektir.
Dosyayı açalım ve aşağıdaki kodları tagları arasına yapıştıralım.

<configuration>

   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
    
   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
   </property>
    
   <property>
      <name>dfs.data.dir</name> 
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value> 
   </property>
       
</configuration>

Not: Yukarıdaki dosyada, tüm pathler kullanıcı tanımlıdır ve Hadoop altyapınıza göre değişiklik yapabilirsiniz.

Sırada yarn-site.xml yapılandırması var,
Yarn nedir diyecek olursanız, onu ayrıntılı açıklarım ama kısaca dağıtık sistemlerde kullanılan bir paket yöneticisi olduğunu bilmenizde fayda var.
yarn-site.xml dosyasını da bir öncekiler gibi yapılandıralım ve kaydedelim.

<configuration>
 
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</value> 
   </property>
  
</configuration>

Son yapılandırılacak dosya olan mapred-site.xml ‘de sıra.
mapred-site.xml dosyası, hangi MapReduce frameworkünü kullandığımızı belirlemek için kullanılır.
Varsayılan olarak, Hadoop, bir yarn-site.xml şablonunu içerir. Her şeyden önce dosyayı sizdeki mapred-site.xml.template dosyasını koypalayıp ismini mapred-site.xml olarak verin. Bunun için aşağıdakileri yazın:
$ cp mapred-site.xml.template mapred-site.xml

Daha sonra mapred-site.xml dosyasını açın ve tagları arasınaaşağıdakileri yapıştırın. Ardından kaydedin.

<configuration>
 
   <property> 
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
   
</configuration>

Kurulumumuz nihayet burada bitiyor!
Son bir adım kaldı. O da Kurulumun doğrulanması. Çalışıp çalışmadığını anlamak için aşağıdaki adımları uygulayalım.

Hadoop Kurulum Doğrulama
Adım 1: Name-node Ayarı
Aşağıdaki komutları yazın.

$ cd ~ 
$ hdfs namenode -format 

Şu şekilde bir çıktı göreceksiniz:

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG: 
/************************************************************ 
STARTUP_MSG: Starting NameNode 
STARTUP_MSG:   host = localhost/192.168.1.11 
STARTUP_MSG:   args = [-format] 
STARTUP_MSG:   version = 2.4.1 
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory 
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted. 
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to 
retain 1 images with txid >= 0 
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0 
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG: 
/************************************************************ 
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11 
************************************************************/

Adım 2: Hadoop dfs Doğrulama
Aşağıdaki komut, dfs’yi başlatmak için kullanılır. Bu komutu çalıştırdığımızda, Hadoop dosya sistemimiz başlayacaktır.

$ start-dfs.sh 

Beklenen çıktı şu şekildedir:

10/24/14 21:37:56 
Starting namenodes on [localhost] 
localhost: starting namenode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-namenode-localhost.out 
localhost: starting datanode, logging to /home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-datanode-localhost.out 
Starting secondary namenodes [0.0.0.0]

Adım 3: Yarn Script Doğrulama
yarn’ı çalıştırmak için kullanacağımız komut:

$ start-yarn.sh 

Beklenen çıktı:

starting yarn daemons 
starting resourcemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out 
localhost: starting nodemanager, logging to /home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out 

Adım 4: Tarayıcınızdan Hadoop’a Bağlanma
Hadoop’a erişmek için varsayılan port numarası 50070‘dir. Tarayıcınızda Hadoop hizmetleri almak için aşağıdaki URL’yi kullanın.

http://localhost:50070/

Böyle bir ekran sizi karşılayacak.

Adım 5: Cluster için tüm uygulamaları doğrulayın

Clusterlardaki tüm uygulamalara erişmek için varsayılan port numarası 8088’dir. Bu porta aşağıdaki adresi tarayıcınıza yazarak erişebilirsiniz.

http://localhost:8088/

Yukarıdaki gibi bir ekran ile karşılaşacaksınız.
Buradan clusterlarınızdaki tüm uygulamalarınızı kontrol edebilirsiniz.

Hadoop kurulumu ile ilgili öğretici dökümanın sonuna geldik. Umarım faydalı olmuştur. Herkese iyi çalışmalar dilerim.