2. Gündem
Big Data Kavramı
Hadoop Nedir?
Neden Hadoop?
Hadoop Bileşenleri
Hadoop Kurulumu
Hadoop Örnek Uygulama
3. Büyük Veri Nedir?
Büyük veri; toplumsal medya paylaşımları, ağ günlükleri
bloglar, fotoğraf, video, log dosyaları v.b. gibi değişik
kaynaklardan toparlanan yapısal olmayan veri yığınıdır.
4. Büyük Veri (Big Data)?
Günümüzde;
İnternet (Bilgiye Ulaşma, Alışveriş),
Teknolojik Gelişmeler,
Mobil Gelişmeler,
Sosyal Medya (Facebook ,Twitter,You Tube vb )
alanlarındaki gelişmeler sonucunda üretilen veri
miktarı hızlı bir şekilde artmaktadır.
5. Büyük Veri (Big Data)?
Büyük Verinin
Büyük verinin içerisinden anlamlı olanları ayıklamak
firmalar için son derece önemli bir hale gelmiştir.
Büyük Veri işlemlerinin en çok kullanıldığı sektörler
telekom,sağlık,sosyal medya sektörü olarak sayılabilir.
6. Büyük Veri (Big Data)?
Örnek olarak Bir gsm şirketi, günlük 5-10TB lık
kullanım loglarını inceleyerek müşteri hizmetlerini
daha da güçlendirebilir.
Sosyal medya açısında bakarsak,sosyal aglardan elde
edilen veriler ile kurumların rekabet güçlerini
ölçebilmeleri ve kampanyalarını daha iyi
yönetebilmelerine olanak sağlayabilir.
7. Veri Tipleri?
Veri yapılandırılmış ve yapılandırılmamış veri olarak
2 kısımda incelenebilir.
Yapılandırılmış veriler :
Fatura ,ödeme,sınav sonuçları,e-devlet verileri vs
Yapılandırılmamış veriler:
twitter –tweet ,facebook-like, reklam tıklama verileri vs
9. Geleneksel Sistemlerdeki Problem?
Geleneksel Sistemler(ilişkisel veri tabanı kullanan sistemler)
Yapılandırılmamış veriye uygun değil
Terabyte seviyesindeki büyük veriler üzerindeki analiz
kabiliyetlerinin bilgisayar üzerindeki ram ,cpu, harddisk
performansları ile sınırlı olması
Cpu ve memory artışına bağlı olarak artan yüksek
maliyetler
10. Geleneksel Sistemlerdeki Problem?
Geleneksel Yöntemlerle
100 terabyte
büyüklüğündeki verinin
1 bilgisayar
tarafından okunabilmesi için yaklaşık
11 günlük
bir süreye ihtiyaç var
11. Yeni Yaklaşım:Dağıtık Veri İşleme Sistemleri
100 terabyte
büyüklüğündeki veri
1000 bilgisayar
tarafından
15 dakikada
okunabilir.
Hız tek başına yeterli değil
Ölçeklenebilir, Esnek,Ekonomik ve
Güvenilir bir sisteme ihtiyaç var
12. Hadoop sıradan sunuculardan oluşturulan kümeler
üzerinde büyük hacimli verilerin dağıtık dosya sistemi ile
incelenmesine olanak sağlayan açık kaynaklı bir yapıdır.
Hem tekil sunucuda hem de kendi işlemci ve hafıza birimi
olan binlerce sunucuyu barındıran küme üzerinde de
çalışabilecek şekilde tasarlanmıştır.
13. Neden Hadoop?
Ölçeklenebilir
İhtiyaç duyulduğunda, verinin kendisini, formatını, yerini
değiştirmeden, çalışan işlerin ve uygulamaların nasıl yazıldığını
dikkate almadan yeni düğüm noktası eklenebilir.
Hesaplı
Yüksek hacimli verinin, fazla CPU gücü ile işlenmesini
gerektiren paralel çözüm ihtiyaçlarını, daha ucuz veya hesaplı
bilgisayar altyapısı ile gerçekleştirilmesini sağlar.
Esnek
Farklı kaynaklardan gelen, farklı veri tipleri birbirleriyle
birleştirilip, özetlenebilir ve işlenebilir.
Güvenilir:
Veri noktalarından biri ulaşılamaz olduğunda, sistem, gelen
yükü diğer veri noktalarına paylaştırarak kesintisiz hizmete
devam eder.
19. HDFS
Hadoop içindeki dağıtık yapıyı sağlayan dosyalama
sistemi HDFS (Hadoop Distributed File System) olarak
adlandırılmaktadır.
HDFS sayesinde sistemdeki her bir sunucunun diskleri
birleşerek tek bir sanal disk gibi davrandığı için büyük boyuttaki
bir çok dosya ,dağıtık dosya sistemi içerisinde saklanabilir.
HDFS içerisindeki dosyalar 64/128 Mb lık bloklar halinde farklı
birden çok sunucu üzerine dağıtılarak yedeklenir. RAID yapısına
benzer bu yapı sayesinde veri kaybı önlenmiş olur.
HDFS üzerinde her bloğun varsayılan 3 kopyası tutulmaktadır.
Her veri bloğu küme içerisinde farklı node lara dağıtılır.Aynı
dosyaya ait olan veri blokları farklı nodelar da olabilir.
21. NameNode
NameNode ana (master) süreç olarak blokların sunucular
üzerindeki
dağılımınından, yaratılmasından, silinmesinden, bir blokta
sorun meydana geldiğinde yeniden oluşturulmasından ve
her türlü dosya erişiminden sorumludur.
NameNode üzerinde dosya sistemi üzerindeki veriler değil
verilerin bulunduğu yer ile ilgili bilgiler (metadata)tutulur.
22. NameNode – İstemci İlişkisi
Client uygulaması bir veri bloğu ile ilgili işlem yapmak istediği
zaman (erişme,silme,taşıma,ekleme gibi) Name Node’dan
ilgilendiği verinin bulunduğu lokasyon bilgisini ister.
NameNode da client uygulamasına istenen verinin bulunduğu
datanode lokasyonlarının listesini client uygulamasına bildirir.
HDFS Kümelerinde namenode verilerin bulunduğu lokasyon
bilgisini içerdiğinden sistemin çalışması için gereklidir. Eğer
sistemde namenode çalışmaz ise tüm küme çalışmaz hale
gelecektir.
23. NameNode- Editlog ve fsimage
Editlog ve fsimage olmak üzere iki tip dosya vardır.
fsimage: Namenode başlatıldığında dosya sisteminin o anki
durumunun içeriğidir.
editlog: Namenode başladıktan sonra dosya sisteminde
oluşan değişikliklerdir.
24. NameNode- Editlog ve fsimage
Namenode yeniden başlatıldığında;
1. Editlog içerisindeki değişiklikler son alınan fsimage dosyasına
uygulanır.
2. Son değişiklikler fsimage dosyasına aktarıldıktan sonra editlog
dosyası boşaltılarak sistem aktif hale geçer.
25. Karşılaşılabilecek Problemler
Namenode ‘un uzun süre çalıştığı büyük veri kümelerinde
editslog dosyasının boyutu çok büyük seviyelere ulaşabilir.
Bu durumda aşağıdaki problemlerle karşılaşılabilir.
1. Namenode yeniden başlatılması gerektiğinde
namenode’un yeniden başlaması fsimage üzerine
uygulanacak değişiklerin çok fazla olmasından dolayı uzun
süre alabilir.
2. Çökme durumunda fsimage çok eski kalmış olacağından
büyük oranda veri kaybedilebilir.
26. Çözüm:Secondary Namenode
Secondary NameNode fsimage dosyasını editlog dosya
içeriğine göre periodic olarak güncellemektedir. Bu sayede
editlog dosyasının boyutu yönetilebilir boyut limitlerini
geçmemektedir.
Fsimage güncellenmesi tamamlandıktan sonra yeni
namenode’un çalıştığı bilgisayardaki fsimage dosyasına
kopyalanmaktadır.
Namenode bir sonraki yeniden başlatmada güncel fsimage
dosyasını kullanacağı için başlama süresi kısalmaktadır.
28. Secondary Namenode
Secondary name node name nod ‘un yedeği değildir.Dosya
sisteminde checkpoint noktalar oluşturarak name node ‘un
çalışmasını kolaylaştırır.
29. DataNode
DataNode ise işlevi blokları saklamak olan işçi
(slave) süreçtir.
Her DataNode kendi yerel diskindeki veriden sorumludur.
Ayrıca diğer DataNode’lardaki verilerin yedeklerini de
barındırır.
DataNode’lar küme içerisinde birden fazla olabilir.
DataNode lar client lardan gelen okuma ve yazma
isteklerini gerçekleştirmekten sorumlu olmakla birlikte
namenode dan gelen komutlara göre veri bloklarının
yaratılmasından,silinmesi,replike edilmesindende
sorumludur.
31. Map Reduce Tarihçesi
Teknolojinin çıkış noktası: Google
Yüksek miktarda veri üzerinde hızlı bir şekilde işlem
yapmanın yolu işleri birden çok bilgisayara dağıtmaktan
geçmektedir.
Google bilgisayar üzerindeki iş dağılımını kendi geliştirdiği
map-reduce teknolojisi ile yapmaktadır.
Hadoop geliştirilirken de google map –reduce
teknolojisinden esinlenilmiştir.
32. Map Reduce Nedir?
HDFS üzerindeki büyük dosyaları verileri işleyebilmek
amacıyla kullanılan bir yöntemdir. İstediğiniz verileri
filtrelemek için kullanılan Map fonksiyonu ve bu verilerden
sonuç elde etmenizi sağlayan Reduce fonksiyonlarından
oluşan program yazıldıktan sonra Hadoop üzerinde
çalıştırılır.
Hadoop Map ve Reduce’lerden oluşan iş parçacıklarını
küme üzerinde dağıtarak aynı anda işlenmesini ve bu işler
sonucunda oluşan verilerin tekrar bir araya getirilmesinden
sorumludur
33. Map Reduce Örnek?
Elimizde bir dosya var, bu dosyada her satırda bir ürün
ismi, ve o ürün satın alındığında ne kadar para ödenmiş
olduğu yazılı olsun. Her ürün için ne kadar para
harcandığını bulmak istiyoruz.
Örnek Dosya İçeriği
34. Map İşlemi
Her node, kendi içinde “map” yaparken, benzer anahtar
degerlerini aynı toplama yazacak.
Ürün Adı
Ürün1
Ürün2
Ürün3
Ürün1
Fiyat
10
3
9
9
Map
Ürün Adı
Ürün1
Ürün2
Ürün3
Ürün Adı
Ürün Adı
Fiyat
Ürün1
Ürün3
Ürün4
Ürün2
10
32
2
20
Map
Ürün1
Ürün2
Ürün3
Ürün4
Toplam
Fiyat
19
3
9
Toplam
Fiyat
10
20
32
2
35. Reduce İşlemi
Her bölümdeki anahtarlar bir de kendi aralarında
toplanıyorlar.
Ürün Adı
Toplam
Fiyat
9
Ürün Adı
Toplam
Fiyat
29
22
Ürün3
41
Ürün4
2
3
Ürün3
Ürün1
19
Ürün2
Toplam Fiyat
Ürün2
Ürün1
Ürün Adı
Ürün1
10
Ürün2
20
Ürün3
32
Ürün4
2
36. Sonuç :
MapReduce işlemleri küçük parçalara bölüyor ve farklı
bilgisayarlara dağıtıyor, sonra işlenenleri toplayıp sonucu
veriyor.
Hadoop’un gücü işlenen dosyaların her zaman ilgili
düğümün (node) yerel diskinden okunması ile ağ trafiğini
meşkul etmemesinden ve birden fazla işi aynı anda
işleyerek doğrusal olarak ölçeklenmesinden geliyor
Hadoop kümesindeki düğüm sayısı arttıkça performansı da
doğrusal olarak artmaktadır.
37. Map Reduce Süreçler :
MapReduce, JobTracker ve TaskTracker süreçlerinden
oluşur.
38. Job Tracker:
Job Tracker: Map Reduce işlerinin küme üzerinde dağıtılıp
çalıştırılmasından sorumludur.İstemciler tarafından mapreduce işleri job tracker’a gönderilir.
39. TaskTracker :
TaskTracker data nodelarının bulunduğu sunucularda
çalışmaktadır.
Task tracker job trackerdan iş parçacığı talep eder. Job
tracker namenode ile iletişim kurarak verinin lokasyonunu
öğrenir.
Datanode’un lokal diskindeki veriye göre uygun map işini
tasktracker a verir.
Task tracker iş parçacıklarını tamamladıktan sonra sonucu
job tracker a iletir.
Bu şekilde iş parçacıkları tamamlanır ve sonuç çıktısı HDFS
üzerinde bir dosyaya yazılarak işlem sonlanır.
40. TaskTracker :
İş Parçacıklarının durumu JobTracker tarafından takip
edilir.İş parçacığında bir sorun oluşması durumunda iş
parçacığı Job tracker tarafından sonladırılıp yeniden
başlatılır.
42. Hadoop Kurulum :
Ubuntu Linux 10.04 LTS üzerine
Apache Hadoop 1.04 versiyonu kurulum adımları
anlatılmıştır.
43. Kurulum Öncesi Adım 1:
Kurulumun öncesin de sistemimiz de javanın yüklü olması
gerekmektedir
Java yüklemek için terminal ekranına aşağıdaki adımları
yazıyoruz.
-$ sudo add-apt-repository ppa:webupd8team/java
-$ sudo apt-get update
-$ echo "check_certificate = off" | sudo tee -a /etc/wgetrc
-$ sudo apt-get install oracle-java7-installer
44. Java Kurulumum Başarılı mı?:
Kurulumun dogru gerceklestiginden emin olmak icin
aşağıdaki komutu yazarak kurulan java versiyonunu
öğrenebiliriz.
-$ java –version
eğer çıkan sonuç aşağıdaki gibi ise
-java version "1.7.0_21"
-Java(TM) SE Runtime Environment (build 1.7.0_21-b11)
-Java HotSpot(TM) Client VM (build 23.21-b01, mixed mode)
45. Kurulum Öncesi Adım 2:
Hadoop kurulumunu gerçekleştirebilmemiz için openssh-server ve
rsync paketlerinin kurulması gerekmektedir.
$ sudo apt-get install ssh
$ sudo apt-get install rsync
Hadoop sistemi için kullanıcı ve grup oluşturuyoruz.
$ sudo addgroup hadoop
$ sudo adduser --ingroup hadoop hduser
Yukarıdaki komutların çalıştırılmasıyla lokal makine üzerinde
hadoop grubu ve hduser isimli kullanıcı oluşturulur.
46. Kurulum Öncesi Adım 3:
Hadoop node ların yönetilmesi için SSH erişimine ihtiyaç
duymaktadır.Hadoop sistemi içerinde oluşturulan hduser kullanıcısı
için SSH anahtar üretilmesi için aşağıdaki adımlar izlenir.
user@ubuntu:~$ su - hduser
2. hduser@ubuntu:~$ ssh-keygen -t rsa -P ""
1.
3.
cat $HOME/.ssh/id_rsa.pub >> HOME/.ssh/authorized_keys
Yukarıdaki komutlarla
şifresiz giriş için anahtar çifti üretilmektedir. (2)
anahtarla ssh erişimi aktive edilir.(3)
47. Hadoop Kurulum Başlangıç:
Apache Sayfası üzerinden seçmiş olduğunuz Hadoop
versiyonunu indiriyoruz.
İndirilen Hadoop versiyonunu lokal bilgisayar üzerinde
belirlemiş olduğunuz klasor içerine açıyoruz.
Örnekte Kurulum yolu olarak /usr/local/hadoop yolunu
seçilmiştir.
1. $ cd /usr/local
2. $ sudo tar xzf hadoop-1.0.3.tar.gz
3. $ sudo mv hadoop-1.0.3 hadoop
4. $ sudo chown -R hduser:hadoop hadoop
49. core-site.xml dosyası:
Küme ile ilgili genel ayarlar core-site.xml dosyasında bulunmaktadır.
conf/core-site.xml dosyasında aşagıdaki düzenlemeyi yapıyoruz
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/java/hadoop-data</value>
</property>
</configuration>
50. hdfs-site.xml dosyası:
HDFS ile ilgili ayarların yapıldığı hdfs-site.xml dosyasına varsayılan
replikasyon ayarını 1 olacak şekilde ayarlıyoruz:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
51. mapred-site.xml dosyası:
MapReduce ayarlarının yapıldığı mapred-site.xml dosyasına aşağıdaki
tanımı yapıyoruz:
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
54. Kontrol
Sistemin başarılı bir şekilde başladığını görmek için jps
komutunu kullanabiliriz.
hduser@ubuntu:/usr/local/hadoop$ jps
2287 TaskTracker
2149 JobTracker
1938 DataNode
2085 SecondaryNameNode
2349 Jps
1788 NameNode
59. Örnek Uygulama:
Twitter Verisinin Apache Hadoop
ile Analiz Edilmesi.
Belirli bir konuda en çok takip edilen veya tweet’i en çok
retweet yapılan kullanıcı nasıl belirlenir?
a) SQL sorgusu
b) Hadoop
60. Twitter Veri Formatı
Twitter Streaming API tweetleri JSON formatında
yayınladığı için geleneksel sistemler tarafından
sorgulanabilmek için uygun değildir.
json örnek:
"in_reply_to_status_id_str": null,
"id": 245255511388336128,
"in_reply_to_user_id_str": null,
"source": "SocialOomph,
62. Apache Flume + Hive+Oozie
Apache Flume sayesinde twitter api çıktıları hadoop hdfs
Üzerindeki dosyalara yazılır.
Twitter verileri HDFS üzerine yüklendikten sonra Hive
üzerinde veri sorgularının yönetilebilmesi için harici bir tablo
yapısı oluşturulur.
Oozie sayesinde de hdfs üzerinde her yeni dosya oluştuğunda
hive üzerindeki tabloya yeni satırlar eklenir.
63. Hive
Hive ile Hadoop üzerinde belirli bir formata uygun şekilde
bulunan dosyaları, örneğin .csv dosyalarını metadataları
girerek tablo gibi tanıtabiliriz.
Hive bu metadata bilgisini
saklayarak daha sonra çalıştıracağımız SQL benzeri sorguları
MapReduce kodlarına çevirerek bu dosyalar üzerinde select,
join işlemlerini gerçekleştirir. Bu sayede çok büyük miktarda
veriyi SQL gibi Hadoop üzerinde paralel olarak sorgulama
şansımız olur.
64. Hive -Örnek
hive> CREATE EXTERNAL TABLE products
(ID INT, NAME STRING)
ROW FORMAT DELIMITED FIELDS
TERMINATED BY 't'
LINES TERMINATED BY 'n'
STORED AS TEXTFILE
LOCATION '/user/twitterlogs';
66. Hive
SELECT t.retweeted_screen_name, sum(retweets) AS
total_retweets, count(*) AS tweet_count FROM
(SELECT retweeted_status.user.screen_name as
retweeted_screen_name, retweeted_status.text, max(r
etweet_count) as retweets FROM tweets GROUP BY
retweeted_status.user.screen_name,
retweeted_stat
us.text) t GROUP BY t.retweeted_screen_name ORDER BY
total_retweets DESC LIMIT 10;