hadoop @ devveri.com

Post on 20-Jan-2015

5.513 Views

Category:

Technology

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

devveri.com Hadoop sunumu

TRANSCRIPT

Aralık 2012v1.3

Hadoopdevveri.com

Hakkımda

● Marmara Üni. Elektronik

● Software Development Supervisor @ Gitti Gidiyor / eBay

● 12+ yıl yazılım tecrübesi

● Java, C, C++, C#

● Big Data, Search, NoSQL

Hakan İlterhilter@ebay.com

twitter: devvericomhttp://tr.linkedin.com/in/hakanilter/

Gündem

● Big Data (Dev veri)● Hadoop● HDFS● MapReduce● Hadoop Kurulum● Küme Yapısı● Hadoop Ekosistemi

Dev Veri

Dev Veri

Dev Veri NedirTeknoloji > 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ış

Büyüklük (Volume)● Facebook 70+PB, eBay 5+PB

Hız (Velocity)● Twitter'da hergün 12TB twit atılıyor

Çeşitlilik (Variety)● Metin, sensör verileri, ses, görüntü, log

dosyaları

Dev Verinin 3 Boyutu

Dev Veri

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○ ...

Geleneksel Sistemlerin Problemleri

● RDBMSGöreceli olarak küçük boyutta veri, yapılandırılmamış verilere uygun değil

● Donanım limitleriDaha fazla CPU, daha fazla RAM, daha fazla Disk = Daha fazla Maliyet

● Yazılımsal karmaşıklıkSenkronizasyon, bant genişliği, erişilebilirlik, hata toleransı

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!

Yeni bir yaklaşım

● Ölçeklenebilir

● Tutarlı

● Veri Garantili

● Erişilebilir

Kim çözdü?

● Google File System (2003)

● MapReduce (2004)

● Big Table (2006)

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.

Gündem

● Big Data (Dev veri)● Hadoop● HDFS● MapReduce● Hadoop Kurulum● Küme Yapısı● Hadoop Ekosistemi

Neden Hadoop

● EsnekHer türlü veriyi saklayıp analizini yapabilir

● ÖlçeklenebilirBinlerce düğüm bir araya getirilebilir

● EkonomikAçık kaynaklı, "commodity" donanımda çalışabilir

Nerede?

Nerede?

Gitti Gidiyor'da Hadoop

Nokia kelimesiyle daha ilgili olduğu için Cep telefonu kategorisi daha üstte yer alıyor

İlgili diğer aramalar

Nokkia aratılmış ama Nokia olarak düzeltilmiş

Gitti Gidiyor'da Hadoop "Metallica" ile ilgili diğer aramalar

Mobil uygulama ana sayfada kişiselleştirilmiş ürün gösterimi

Autocomplete verisi

Kimler kullanıyor?

Hadoop

İki ana bileşenden oluşur● Hadoop Distributed File System (HDFS)● MapReduce

Gündem

● Big Data (Dev veri)● Hadoop● HDFS● MapReduce● Hadoop Kurulum● Küme Yapısı● Hadoop Ekosistemi

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

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

Data Node 1

HDFS

blok 1 blok 2

blok 3Data Node 2

blok 3

blok 2

blok 4

Data Node 3

blok 3

blok 1

blok 4

Data Node 4

blok 4

blok 2

Blokların düğümler üzerine dağılım örneği

blok 1

HDFS Erişimi

HDFS üzerindeki verilere konsol üzerinden hadoop fs komutu ile erişilebilir:

hadoop fs -ls Dosyaları listeler

hadoop fs -mkdir <path> Klasör oluşturur

hadoop fs -put <local> <target> Lokalden HDFS'e dosya kopyalar

hadoop fs -get <source> <local> HDFS'den lokale dosya kopyalar

hadoop fs -cat <filename> Dosya içeriğini konsola basar

hadoop fs -rmr <filename> Dosyayı siler

Gündem

● Big Data (Dev veri)● Hadoop● HDFS● MapReduce● Hadoop Kurulum● Küme Yapısı● Hadoop Ekosistemi

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

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

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

MapReduce ile akış örneği

MapReduce

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

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));

}

}

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));

}

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);}

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 devveri12/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 : 112/07/09 23:44:41 INFO mapred.JobClient: Running job: job_201204231254_552212/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_552212/07/09 23:45:13 INFO mapred.JobClient: Counters: 2912/07/09 23:45:13 INFO mapred.JobClient: Job Counters12/07/09 23:45:13 INFO mapred.JobClient: Launched reduce tasks=112/07/09 23:45:13 INFO mapred.JobClient: SLOTS_MILLIS_MAPS=1198412/07/09 23:45:13 INFO mapred.JobClient: Total time spent by all reduces waiting after reserving slots (ms)=012/07/09 23:45:13 INFO mapred.JobClient: Total time spent by all maps waiting after reserving slots (ms)=012/07/09 23:45:13 INFO mapred.JobClient: Launched map tasks=112/07/09 23:45:13 INFO mapred.JobClient: Data-local map tasks=112/07/09 23:45:13 INFO mapred.JobClient: SLOTS_MILLIS_REDUCES=1003312/07/09 23:45:13 INFO mapred.JobClient: File Output Format Counters12/07/09 23:45:13 INFO mapred.JobClient: Bytes Written=3112/07/09 23:45:13 INFO mapred.JobClient: FileSystemCounters12/07/09 23:45:13 INFO mapred.JobClient: FILE_BYTES_READ=61...

Word Count

Gündem

● Big Data (Dev veri)● Hadoop● HDFS● MapReduce● Hadoop Kurulum● Küme Yapısı● Hadoop Ekosistemi

Hadoop Kurulumu● Apache sürümü dışında Cloudera, Hortonworks gibi

firmaların dağıtımları da kullanılabilir

● Farklı sürümleri bulunuyor1.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

Örnek kurulum adım 1

● JDK 1.6, openssh-server ve rsync sistemde olmalı

$ sudo apt-get install ssh

$ sudo apt-get install rsync

Ö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

Örnek kurulum adım 3

● Kurulumun yapılacağı klasörler ayarlanır

$ sudo mkdir /usr/java

$ sudo chown -R devveri:devveri /usr/java

$ mkdir /usr/java/hadoop-data

● 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

Örnek kurulum adım 4

● 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>

Örnek kurulum adım 5

Ö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>

Ö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>

Ö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"

Ö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

Örnek kurulum adım 10● NameNode formatlanmalıdır

$ hadoop namenode -format12/09/05 00:07:06 INFO namenode.NameNode: STARTUP_MSG:/************************************************************STARTUP_MSG: Starting NameNodeSTARTUP_MSG: host = devveri-HP-ProBook-6540b/127.0.1.1STARTUP_MSG: args = [-format]STARTUP_MSG: version = 1.0.3STARTUP_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-bit12/09/05 00:07:06 INFO util.GSet: 2% max memory = 9.1025 MB12/09/05 00:07:06 INFO util.GSet: capacity = 2^21 = 2097152 entries12/09/05 00:07:06 INFO util.GSet: recommended=2097152, actual=209715212/09/05 00:07:07 INFO namenode.FSNamesystem: fsOwner=devveri12/09/05 00:07:07 INFO namenode.FSNamesystem: supergroup=supergroup12/09/05 00:07:07 INFO namenode.FSNamesystem: isPermissionEnabled=true12/09/05 00:07:07 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=10012/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 times12/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************************************************************/

● Big Data (Dev veri)● Hadoop● HDFS● MapReduce● Hadoop Kurulum● Küme Yapısı● Hadoop Ekosistemi

Gündem

● Hadoop kümesini durdurup başlatmak için bin

klasörü altındaki script'ler kullanılır

Küme Yapısı

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

Hadoop Süreçleri

Hadoop kümesi içerisinde birlikte çalışan birkaç farklı süreç vardır

● NameNode

● SecondaryNameNode

● DataNode

● JobTracker

● TaskTracker

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

NameNode

NameNode yedeği değildir!● Sadece NameNode tarafından yapılmayan bazı

görevleri yerine getirir

SecondaryNameNode

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!

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

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

Kümeye bakış

Node 1

NameNode JobTracker

Node 2

DataNode TaskTracker

Node 3

DataNode TaskTracker

Node 4

DataNode TaskTracker

Node 5

DataNode TaskTracker

SNNode

NameNode Arayüzü

JobTracker Arayüzü

Gündem

● Big Data (Dev veri)● Hadoop● HDFS● MapReduce● Hadoop Kurulum● Küme Yapısı● Hadoop Ekosistemi

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...

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;

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;

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

Mahout

● Hadoop üzerinde çalışabilen Machine Learning

algoritmalarını içeren bir kütüphanedir

● Recommendation

● Clustering

● Classification

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

Sorular

?

DevVeri.com Hakkında

Big Data, Search, NoSQL her türlü yazılarınızı bekliyoruz!

Kaynaklarhttp://hadoop.apache.org

http://www.cloudera.com

http://www-01.ibm.com/software/data/bigdata/

http://en.wikipedia.org/wiki/Google_File_System

http://en.wikipedia.org/wiki/MapReduce

http://en.wikipedia.org/wiki/BigTable

http://www.evolven.com/images/stories/blog/blog_infographic_big_data_autonomy-big-data.jpg

http://architects.dzone.com/articles/big-data-rich-compendium-big

http://devveri.com

Teşekkürler!

top related