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!  🙂

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 Nedir?

Hadoop Nedir?

Önceki yazımda Big Data ve bunların işlenmesi ile alakalı teknolojilerden bahsetmiştim.

Bu yazımda Hadoop’un ne olduğundan bahsedeceğim.

Bildiğiniz gibi Big Data, büyük ölçekli verilerin oluşturduğu veri setlerine (Data Set) verilen isim ve biz bu büyük veri setlerini kaydetmek ve işlemek için çeşitli dosya sistemleri ve veritabanları kullanıyoruz.

Hadoop da büyük veri setleri ile birden fazla makinede paralel olarak işlem yapmamızı, verileri kaydetmemizi ve yönetmemizi sağlayan, MapReduce özelliklerini bir araya getiren, Java ile yazılmış açık kaynak kodlu kütüphanedir.

Hadoop içinde büyük verileri sakladığımız bileşene HDFS (Hadoop Distributed File System) denir.

HDFS nedir?
Açılımı Hadoop Distributed File System

yani Türkçesi ile Hadoop Dağıtık Dosya Sistemi.

Peki ne için böyle bir sisteme ihtiyaç duyulmuş?
Petabyte seviyesindeki büyük verileri saklamak için pahalı bir donanım satın almak yerine sıradan sunucuların disklerini bir araya getirerek büyük, tek bir sanal disk oluştururlar. Bu sunucu disklerine Cluster adı verilmektedir. Clusterların her biri aynı yerde durmak durumunda değildirler, farklı bölgelerde, farklı şehirlerde hatta farklı ülkelerde aynı sisteme hizmet edebilirler.

HDFS içine büyük boyuttaki veriler kopyalandıktan sonra bir çok kaynak üzerinden aynı anda ve oldukça hızlı erişim sağlanabilir. Bu dosya sistemi içinde büyük veriler küçük dosya blokları halinde saklanırlar.

HDFS, NameNode ve DataNode olarak iki ayrı süreçten oluşur.

NameNode, master(ana) düğümdür. Verilerin bloklar halinde parçalanarak dağıtıldığını düşünürsek bu parçaların her birinin diğer makinelere DataNode) dağılımından, yaratılmasından, silinmesinden, yeniden oluşturulmasından sorumlu düğümdür. (Serverlar arasındaki configürasyonu sağlayan ana makine)

DataNode, slave(işçi) düğümdür. Ona verilen blockları kendi yerel diskinde saklamaktan sorumludur. İlave olarak diğer DataNode’lardaki verilerin yedeklerini de saklayabilirler. Bir HDFS sistemde birden fazla olabilirler.

Şu görsel ile anladıklarımızı güçlendirelim;

Gelelim yukarıda bahsettiğimiz MapReduce’a,
MapReduce ise HDFS üzerindeki büyük verileri işleyebilmek amacıyla kullanılan bir yöntemdir. Bu yöntemin içeriğine bu linke tıklayarak ulaşabilirsiniz.

Hadoop şuanda Facebook, Twitter, Yahoo, Alibaba, EBay, Adobe()BURAYA LİNKİ VER ve daha bir çok bilindik firmada büyük verileri analiz etmek amacı ile kullanılıyor.

Bunların yanısıra Hadoop projesi büyük verileri işlemek için başka projelere bir çatı görevi görüyor. Bu projelerden bazıları, Hive, Mahout, Cassandra, Pig, Zookeper.

Ben, Yazılım Mühendisliği son sınıf öğrencisi bir adet Gülcan!

Yazılım alanı ile ilk tanışmam 15 yaşında başladı. İlk yazdığım uygulama elbette hesap makinesiydi. Evet şimdi düşününce basit geliyor gerçekten ama yazdığım uygulamayı ilk çalıştırdığımdaki hissi keşke buraya yazabilsem.

Şimdilerde 23 yaşlarında bir yazılım mühendisi adayıyım.

Ne için bu sitenin ismi böyle diye düşünebilir, belki de fazla cinsiyetçi olduğumu zannedebilirsiniz. Ancak doğrusunu söylemek gerekirse, çıkış noktam;

“Yazılım sektöründeki kadınların oldukça az olması”

Bu blog ile birlikte hem ben kendimi geliştireceğim, hem de öğrendiklerimi kaydedip sizlerle paylaşacağım. Kim bilir belki tanışır, birlikte öğrenir, burada birlikte paylaşırız, neden olmasın?

Haydi hemcinslerim, klavye başına!

İlk “Hello World” ünü yazdır ve KIZ GİBİ KODLA! 🙂