6. Dev Veri Nedir
Teknoloji > Internet > Sosyal Medya > Mobil > ...
Dünya'daki verilerin %90'lık kısmı son iki yılda toplandı
Yapılandırılmış (structured) ve Yapılandırılmamış
(unstructured) verilerden meydana gelir
● Yapılandırılmış veriler: ürün, kategori, müşteri,
fatura, ödeme...
● Yapılandırılmamış veriler: tweet, paylaşım, beğeni
(like), e-posta, video, tıklama...
%10 Yapılandırılmış, %90 Yapılandırılmamış
9. Dev Veri'nin Önemi
● Bu kadar veri tek başına bir anlam ifade etmiyor
● Önemli olan Dev Veri içerisinde saklanmış olan
bilgiyi ortaya çıkartıp yaptığımız işi daha iyi
anlamak, belki de geleceği tahmin etmeye
çalışmak
● Bu gerçekleştirildiğinde;
○ Mutlu müşteriler
○ Daha fazla kazanç
○ Dolandırıcılıkta azalma
○ Daha sağlıklı insanlar
○ ...
10. Geleneksel Sistemlerin Problemleri
● RDBMS
Göreceli olarak küçük boyutta veri, yapılandırılmamış
verilere uygun değil
● Donanım limitleri
Daha fazla CPU, daha fazla RAM, daha fazla Disk =
Daha fazla Maliyet
● Yazılımsal karmaşıklık
Senkronizasyon, bant genişliği, erişilebilirlik, hata
toleransı
11. Peki ya gerçek problem?
Gerçek problem: Veriyi işlemciye
ulaştırabilmek!
100GB boyutundaki bir veriyi
tipik bir disk ile (~75 MB/sn) aktarmak
yaklaşık 22 dakika!
12. Yeni bir yaklaşım
● Ölçeklenebilir
● Tutarlı
● Veri Garantili
● Erişilebilir
13. Kim çözdü?
● Google File System (2003)
● MapReduce (2004)
● Big Table (2006)
14. ve Hadoop!
Veri işleme amaçlı dağıtık uygulamalar
yazılmasını sağlayan bir platform ve açık
kaynaklı bir Apache projesidir.
15. Gündem
● Big Data (Dev veri)
● Hadoop
● HDFS
● MapReduce
● Hadoop Kurulum
● Küme Yapısı
● Hadoop Ekosistemi
16. Neden Hadoop
● Esnek
Her türlü veriyi saklayıp analizini yapabilir
● Ölçeklenebilir
Binlerce düğüm bir araya getirilebilir
● Ekonomik
Açık kaynaklı, "commodity" donanımda çalışabilir
19. Gitti Gidiyor'da Hadoop
İlgili diğer aramalar
Nokkia aratılmış ama Nokia olarak
düzeltilmiş
Nokia
kelimesiyle
daha ilgili
olduğu için Cep
telefonu
kategorisi daha
üstte yer alıyor
20. Gitti Gidiyor'da Hadoop
"Metallica" ile ilgili diğer aramalar
Mobil uygulama ana sayfada
kişiselleştirilmiş ürün gösterimi
Autocomplete verisi
23. Gündem
● Big Data (Dev veri)
● Hadoop
● HDFS
● MapReduce
● Hadoop Kurulum
● Küme Yapısı
● Hadoop Ekosistemi
24. HDFS
Verinin saklanmasından sorumludur
● Dağıtık bir dosya sistemidir
● Veriyi 64MB ya da 128MB'lık bloklar halinde saklar
● Her blok küme içerisinde farklı düğümlere dağıtılır
● Her bloğun varsayılan 3 kopyası tutulur
● Bu sayede verinin erişilebilirliği ve güvenilirliği
sağlanmış olur
● Aynı dosyaya ait bloklar farklı düğümlerde olabilir
25. HDFS
● Normal dosya sistemi üzerinde çalışır: ext3, ext4, xfs
● Büyük miktarda veri için yedekli depolama sağlar
● Düşük maliyetli sunucular üzerinde çalışmaya uygundur
● Küçük çok dosya yerine büyük daha az dosya tutulmalıdır
● Ortalama bir dosya 100MB civarı olmalıdır
● Rastlantısal erişim yoktur (write once)
● Büyük ve duraksız (streaming) veri erişimine göre
optimize edilmiştir
26. HDFS
Blokların düğümler üzerine dağılım örneği
blok 1 blok 2 blok 3 blok 4
blok 3 blok 2
Data Node 1 Data Node 2
blok 3 blok 4 blok 4 blok 1
blok 1 blok 2
Data Node 3 Data Node 4
28. Gündem
● Big Data (Dev veri)
● Hadoop
● HDFS
● MapReduce
● Hadoop Kurulum
● Küme Yapısı
● Hadoop Ekosistemi
29. MapReduce
Veriyi işleme yöntemidir
● Fonksiyonel programlamadan esinlenilmiştir
● Map ve Reduce birer fonksiyondur
● Map fonksiyonu ile veri içerisinden istenilen veriler
anahtar-değer formatında seçilir
● Reduce fonksiyonu ile de seçilen bu veriler
üzerinde işlem yapılır, sonuç yine anahtar-değer
olarak iletilir
● Map ve Reduce arasında Shuffle ve Sort aşamaları
vardır
30. MapReduce
Daha kolay anlaşılabilir olması için SQL'e benzetmek
gerekirse;
● WHERE ile yapılan filtreleme gibi Map aşamasında
sadece ihtiyacımız olan veriler seçilir
● Reduce aşamasında ise SUM, COUNT, AVG gibi
birleştirme işlemleri yapılır
31. MapReduce
● Map aşamasındaki işlemler küme üzerinde paralel
olarak çalışır
● Bu sayede kümenin büyüklüğüne göre veriler hızlı bir
şekilde işlenebilir hale gelmiş olur
● Her iş parçacığı verinin belirli bir parçasını işler
● İş parçacıkları mümkünse üzerinde çalıştığı
düğümdeki verileri işler. Buna Data Localization
denir
33. MapReduce
● Uygulama geliştirilirken sadece Map ve Reduce
metodları yazılır, geri kalan işleyiş otomatik
gerçekleşir
● Hadoop tamamen Java ile geliştirildiği için
MapReduce uygulamaları Java ile yazılır, jar olarak
paketlenir
● Streaming özelliği sayesinde Python, C++, Php gibi
farklı dillerde de kullanılabilir
34. Word Count
Map Metodu
public void map(LongWritable key, Text value, Context context)
throws IOException, InterruptedException
{
String line = value.toString().toLowerCase();
StringTokenizer tokenizer = new StringTokenizer(line);
while (tokenizer.hasMoreTokens()) {
Text word = new Text(tokenizer.nextToken());
context.write(word, new IntWritable(1));
}
}
35. Word Count
Reduce Metodu
public void reduce(Text key, Iterable<IntWritable> values, Context context)
throws IOException, InterruptedException
{
int sum = 0;
for (IntWritable value : values) {
sum += value.get();
}
context.write(key, new IntWritable(sum));
}
36. Word Count
Tool sınıfı metodları
public int run(String[] args) throws Exception
{
if (args.length != 2) {
System.err.printf("Usage: %s [generic options] <input> <output>n", getClass().getSimpleName());
ToolRunner.printGenericCommandUsage(System.err);
return -1;
}
Job job = new Job();
job.setJarByClass(WordCount.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
job.setMapperClass(WordCountMapper.class);
job.setReducerClass(WordCountReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
return job.waitForCompletion(true) ? 0 : 1;
}
public static void main(String[] args) throws Exception {
int exitCode = ToolRunner.run(new WordCount(), args);
System.exit(exitCode);
}
37. Word Count
MapReduce programını çalıştırma
$ hadoop jar <jarfile> <classname> <args...>
$ hadoop jar devveri-mapreduce-0.0.1-SNAPSHOT.jar com.devveri.hadoop.mapreduce.WordCount test.txt devveri
12/07/09 23:44:41 WARN mapred.JobClient: Use GenericOptionsParser for parsing the arguments. Applications should
implement Tool for the same.
12/07/09 23:44:41 INFO input.FileInputFormat: Total input paths to process : 1
12/07/09 23:44:41 INFO mapred.JobClient: Running job: job_201204231254_5522
12/07/09 23:44:42 INFO mapred.JobClient: map 0% reduce 0%
12/07/09 23:44:56 INFO mapred.JobClient: map 100% reduce 0%
12/07/09 23:45:08 INFO mapred.JobClient: map 100% reduce 100%
12/07/09 23:45:13 INFO mapred.JobClient: Job complete: job_201204231254_5522
12/07/09 23:45:13 INFO mapred.JobClient: Counters: 29
12/07/09 23:45:13 INFO mapred.JobClient: Job Counters
12/07/09 23:45:13 INFO mapred.JobClient: Launched reduce tasks=1
12/07/09 23:45:13 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=11984
12/07/09 23:45:13 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=0
12/07/09 23:45:13 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=0
12/07/09 23:45:13 INFO mapred.JobClient: Launched map tasks=1
12/07/09 23:45:13 INFO mapred.JobClient: Data-local map tasks=1
12/07/09 23:45:13 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=10033
12/07/09 23:45:13 INFO mapred.JobClient: File Output Format Counters
12/07/09 23:45:13 INFO mapred.JobClient: Bytes Written=31
12/07/09 23:45:13 INFO mapred.JobClient: FileSystemCounters
12/07/09 23:45:13 INFO mapred.JobClient: FILE_BYTES_READ=61
...
38. Gündem
● Big Data (Dev veri)
● Hadoop
● HDFS
● MapReduce
● Hadoop Kurulum
● Küme Yapısı
● Hadoop Ekosistemi
39. Hadoop Kurulumu
● Apache sürümü dışında Cloudera, Hortonworks gibi
firmaların dağıtımları da kullanılabilir
● Farklı sürümleri bulunuyor
1.0.X - current stable version, 1.0 release
1.1.X - current beta version, 1.1 release
2.X.X - current alpha version
0.23.X - simmilar to 2.X.X but missing NN HA.
0.22.X - does not include security
0.20.203.X - old legacy stable version
0.20.X - old legacy version
● Küme olarak (full cluster) ya da tek sunucuya (pseudo-
distributed) kurulabilir
● deb, rpm veya tarball olarak indirilip kurulabilir
40. Örnek kurulum adım 1
● JDK 1.6, openssh-server ve rsync sistemde olmalı
$ sudo apt-get install ssh
$ sudo apt-get install rsync
41. Örnek kurulum adım 2
● Sunucular arası şifresiz bağlantı gerekir
$ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be
established.
ECDSA key fingerprint is 00:ab:cd:ef:12:23:56:ab:ba:c4:89:
11:d8:22:33:1b.
Are you sure you want to continue connecting (yes/no)? yes
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
43. Örnek kurulum adım 4
● Apache sunucusundan son sürüm indirilir
$ cd /usr/java/
$ wget "http://www.eu.apache.org/dist/hadoop/
common/hadoop-1.0.4/hadoop-1.0.4.tar.gz"
$ gzip -dc hadoop-1.0.4.tar.gz | tar xf -
$ ln -s /usr/java/hadoop-1.0.4 /usr/java/hadoop
44. Örnek kurulum adım 5
● Küme ile ilgili genel ayarlar conf/core-site.xml
dosyasında bulunur
<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>
45. Örnek kurulum adım 6
● HDFS ile ilgili ayarlar conf/hdfs-site.xml dosyası
içerisinde bulunur
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
46. Örnek kurulum adım 7
● MapReduce ile ilgili ayarlar conf/mapred-site.xml
dosyası içerisinde bulunur
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property>
</configuration>
47. Örnek kurulum adım 8
● Hadoop ile ilgili ortam değişkenleri conf/hadoop-env.
sh dosyasında bulunur
export JAVA_HOME=/usr/java/jdk
export HADOOP_HEAPSIZE=512
export HADOOP_HOME_WARN_SUPPRESS="TRUE"
48. Örnek kurulum adım 9
● .bash_profile ya da .bash_rc dosyalarında $PATH
değişkeni ayarlanmalıdır
JAVA_HOME=/usr/java/jdk
PATH=$PATH:$JAVA_HOME/bin
HADOOP_HOME=/usr/java/hadoop
PATH=$PATH:$HADOOP_HOME/bin
49. Örnek kurulum adım 10
● NameNode formatlanmalıdır
$ hadoop namenode -format
12/09/05 00:07:06 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = devveri-HP-ProBook-6540b/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.0.3
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.0 -r 1335192; compiled by
'hortonfo' on Tue May 8 20:31:25 UTC 2012
************************************************************/
12/09/05 00:07:06 INFO util.GSet: VM type = 32-bit
12/09/05 00:07:06 INFO util.GSet: 2% max memory = 9.1025 MB
12/09/05 00:07:06 INFO util.GSet: capacity = 2^21 = 2097152 entries
12/09/05 00:07:06 INFO util.GSet: recommended=2097152, actual=2097152
12/09/05 00:07:07 INFO namenode.FSNamesystem: fsOwner=devveri
12/09/05 00:07:07 INFO namenode.FSNamesystem: supergroup=supergroup
12/09/05 00:07:07 INFO namenode.FSNamesystem: isPermissionEnabled=true
12/09/05 00:07:07 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
12/09/05 00:07:07 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s),
accessTokenLifetime=0 min(s)
12/09/05 00:07:07 INFO namenode.NameNode: Caching file names occuring more than 10 times
12/09/05 00:07:07 INFO common.Storage: Image file of size 111 saved in 0 seconds.
12/09/05 00:07:07 INFO common.Storage: Storage directory /usr/java/hadoop-data/dfs/name has been successfully formatted.
12/09/05 00:07:07 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at devveri-HP-ProBook-6540b/127.0.1.1
************************************************************/
50. Gündem
● Big Data (Dev veri)
● Hadoop
● HDFS
● MapReduce
● Hadoop Kurulum
● Küme Yapısı
● Hadoop Ekosistemi
51. Küme Yapısı
● Hadoop kümesini durdurup başlatmak için bin
klasörü altındaki script'ler kullanılır
start-all.sh Kümeyi çalıştırır
stop-all.sh Kümeyi durdurur
start-dfs.sh Sadece HDFS süreçlerini çalıştırır
stop-dfs.sh HDFS süreçlerini durdurur
start-mapred.sh Sadece MapReduce süreçlerini çalıştırır
stop-mapred.sh MapReduce süreçlerini durdurur
52. Hadoop Süreçleri
Hadoop kümesi içerisinde birlikte çalışan birkaç farklı
süreç vardır
● NameNode
● SecondaryNameNode
● DataNode
● JobTracker
● TaskTracker
53. NameNode
Ana (master) düğümdür
● Hangi blok, hangi dosya nerededir takip eder
● Her türlü dosya işleminden sorumludur
● Veri değil sadece metadata saklar
● Her zaman ayakta olmak zorundadır
NameNode çalışmaz ise tüm küme çalışmaz hale gelir
● Hızlı erişim açısından verileri hafızada tutar
● Çökmeye karşı diske bilgileri senkronize eder
● Bu verileri mutlaka yedeklenmelidir
55. DataNode
Verilerin bulunduğu düğümdür
● Blok halinde dosyaları saklar
● Yedekli olduğu için kapanması halinde veri kaybı
yaşanmaz
● Veriler bu düğümlerde olduğu için analiz işlemleri
de bu düğümler üzerinde çalışır
● Küme içerisinde birden fazla olabilir (olmalıdır)
● 4000+ düğüme kadar büyüyebilir
● Sayısı arttıkça performansı lineer olarak artar!
56. JobTracker
MapReduce işlerini takip eder
● NameNode gibi tektir
● İstemciler MapReduce işlerini JobTracker'a
gönderir
● İşleri diğer düğümlere dağıtır
● İş parçacıklarının durumunu takip eder
● Bir iş parçacığında sorun olursa bunu sonlandırarak
yeni bir tekrar çalıştırır
● Bazı durumlarda aynı işi yapan birden fazla iş
parçacığı çalıştırabilir
57. TaskTracker
MapReduce işlemlerini çalıştırır
● DataNode ile aynı düğümde bulunur
● JobTracker tarafından gönderilen iş
parçacıklarından sorumludur
● Map ve Reduce görevlerini çalıştırıp sonuçlarını
JobTracker'a iletir
61. Gündem
● Big Data (Dev veri)
● Hadoop
● HDFS
● MapReduce
● Hadoop Kurulum
● Küme Yapısı
● Hadoop Ekosistemi
62. Hadoop Ecosystem
Hadoop çatısı altında birçok proje barınır
● Hive
● Pig
● HBase
● Mahout
● Impala
● Diğerleri: Sqoop, Flume, Avro, Zookeeper, Oozie,
Cascading...
63. Hive
● Facebook tarafından geliştirilmiştir
● SQL benzeri HiveQL dili ile Java kullanmadan
MapReduce uygulamaları yazılmasını sağlar
● Öncelikle HDFS üzerindeki dosyalar tablo olarak
tanıtılır
○ create table member_visits (member_id string,
visit_count int) row format delimited fields
terminated by 't' stored as textfile;
○ load data inpath '/usr/hadoop/anyfile' into table
members;
● Daha sonra bu sanal tablolar sorgulanabilir
○ select avg(visit_count) from member_visits where
visit_count > 0;
64. Pig
● Yahoo tarafından geliştirilmiştir
● MapReduce yazmak için "DataFlow" dili olarak
adlandırılan, SQL'den farklı kendine özgü PigLatin dili
kullanılır
● Join destekler, daha kolay ve performanslı
MapReduce programaları yazmayı sağlar
○ A = LOAD 'companies.csv' USING PigStorage() AS
(productId:int, productName:chararray);
B = FILTER A BY productId > 3;
C = FOREACH B GENERATE *;
DUMP C;
65. HBase
● Hadoop üzerinde çalışan NoSQL veritabanıdır
● Google Big Table örnek alınarak geliştirilmiştir
● Esnek şema yapısı ile binlerce kolon, petabyte'larca
satırdan oluşan veriyi saklayabilir
● HDFS üzerinde çalıştığından MapReduce destekler
● Veriye erişiminde bazı kısıtlar vardır
● Verilere anahtar üzerinden ya da partial table scan
ile erişilebilir
● İkincil indeks, karmaşık sorgu çalıştırma desteği
yoktur
66. Mahout
● Hadoop üzerinde çalışabilen Machine Learning
algoritmalarını içeren bir kütüphanedir
● Recommendation
● Clustering
● Classification
67. Impala
● Google Dremel (2010) projesinden esinlenmiştir
● Cloudera tarafından geliştirilmiştir
● MapReduce yapmadan verilere direkt erişir
● HiveQL destekler, 7-45 kat daha hızlı çalışır